diff options
760 files changed, 87250 insertions, 21041 deletions
diff --git a/.gitignore b/.gitignore index 906c6a8a83..6294cb451d 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,8 @@ lib*.a /.project /.cproject /.settings +/.autotools +/Icon.* /build @@ -71,9 +73,15 @@ lib*.a /dists/codeblocks/*.layout /dists/codeblocks/scummvm* +#Ignore XCode user data and build files +xcuserdata +project.xcworkspace /dists/iphone/build -/dists/iphone/scummvm.xcodeproj/*.mode1v3 -/dists/iphone/scummvm.xcodeproj/*.pbxuser +/dists/iphone/scummvm.xcodeproj +/dists/iphone/create_project +/dists/macosx/build +/dists/macosx/scummvm.xcodeproj +/dists/macosx/create_project /dists/msvc*/[Dd]ebug*/ /dists/msvc*/[Rr]elease*/ @@ -68,6 +68,10 @@ ScummVM Team Filippos Karapetis Pawel Kolodziejski + DreamWeb: + Vladimir Menshakov + Torbjorn Andersson + Gob: Torbjorn Andersson Arnaud Boutonne @@ -222,7 +226,8 @@ ScummVM Team PocketPC / WinCE: Nicolas Bacca - (retired) - Kostas Nakos + Ismail Khatib + Kostas Nakos - (retired) PlayStation 2: Robert Goeffringmann - (retired) @@ -40,10 +40,10 @@ Travis Howell Janne Huttunen Felix Jakschitsch Jeroen Janssen -Willem Jan Palenstijn Florian Kagerer Filippos Karapetis Andreas Karlsson +Ismail Khatib Oliver Kiehl Martin Kiewitz Pawel Kolodziejski @@ -58,6 +58,7 @@ Gregory Montoir Kostas Nakos Mikesch Nepomuk Nicolas Noble +Willem Jan Palenstijn Lars Persson Joost Peters Tim Phillips @@ -5,7 +5,7 @@ For a more comprehensive changelog of the latest experimental code, see: SDL ports: - Added support for OpenGL (GSoC Task). -1.3.0 (????-??-??) +1.3.0 (2011-05-28) New Games: - Added support for Backyard Baseball. - Added support for Backyard Baseball 2001. @@ -1123,7 +1123,7 @@ For a more comprehensive changelog of the latest experimental code, see: - Added MMX i386 assembler versions of the HQ2x and HQ3x scalers. - Added 'Extra Path' option allows for a searching an additional datafile location (for reencoded cutscenes and the like). - - Disabled Alt-x and Ctrl-z quit keys in favour of Ctrl-q on unix like + - Disabled Alt-x and Ctrl-z quit keys in favor of Ctrl-q on unix like operating systems, like Linux (exception: Mac OS X still uses Cmd-q). - Separate smaller font for the console, allowing for more visible information, for example in the SCUMM debugger. @@ -2052,8 +2052,7 @@ compiler. Several compilers, including GCC, mingw and recent versions of Microsoft Visual C++ are supported. If you wish to use MP3-compressed CD tracks or .SOU files, you will need to install the MAD library; likewise you will need the appropriate libraries for Ogg Vorbis and FLAC -compressed sound. For MPEG2 support, libmpeg2 is required. For -compressed save states, zlib is required. +compressed sound. For compressed save states, zlib is required. Some parts of ScummVM, particularly scalers, have highly optimized versions written in assembler. If you wish to use this option, you will @@ -2137,7 +2136,7 @@ debug messages (see http://www.sysinternals.com/ntw2k/freeware/debugview.shtml). Maemo: * Get Scratchbox environment with Maemo 2.2 rootstrap (2.2 is for 770 and up) - * Install libmad, Tremor, FLAC, libmpeg2 from source + * Install libmad, Tremor, FLAC from source * patch scummvm source (some stuff is currently too dirty to be in svn directly) patch -p1 < backends/platform/maemo/scummvm-[currentversion]-maemo.patch * update debian/changelog diff --git a/audio/audiostream.cpp b/audio/audiostream.cpp index e6587a6543..547aa77526 100644 --- a/audio/audiostream.cpp +++ b/audio/audiostream.cpp @@ -30,6 +30,7 @@ #include "audio/audiostream.h" #include "audio/decoders/flac.h" #include "audio/decoders/mp3.h" +#include "audio/decoders/quicktime.h" #include "audio/decoders/raw.h" #include "audio/decoders/vorbis.h" @@ -48,7 +49,7 @@ struct StreamFileFormat { }; static const StreamFileFormat STREAM_FILEFORMATS[] = { - /* decoderName, fileExt, openStreamFuntion */ + /* decoderName, fileExt, openStreamFunction */ #ifdef USE_FLAC { "FLAC", ".flac", makeFLACStream }, { "FLAC", ".fla", makeFLACStream }, @@ -59,6 +60,7 @@ static const StreamFileFormat STREAM_FILEFORMATS[] = { #ifdef USE_MAD { "MPEG Layer 3", ".mp3", makeMP3Stream }, #endif + { "MPEG-4 Audio", ".m4a", makeQuickTimeStream }, { NULL, NULL, NULL } // Terminator }; diff --git a/audio/decoders/aac.cpp b/audio/decoders/aac.cpp new file mode 100644 index 0000000000..7949b5b561 --- /dev/null +++ b/audio/decoders/aac.cpp @@ -0,0 +1,177 @@ +/* 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. + * + * $URL$ + * $Id$ + * + */ + +#include "audio/decoders/aac.h" + +#ifdef USE_FAAD + +#include "common/debug.h" +#include "common/stream.h" +#include "common/textconsole.h" +#include "common/util.h" + +#include "audio/audiostream.h" + +#include <neaacdec.h> + +namespace Audio { + +class AACStream : public AudioStream { +public: + AACStream(Common::SeekableReadStream *stream, + DisposeAfterUse::Flag disposeStream, + Common::SeekableReadStream *extraData, + DisposeAfterUse::Flag disposeExtraData); + ~AACStream(); + + int readBuffer(int16 *buffer, const int numSamples); + + bool endOfData() const { return _inBufferPos >= _inBufferSize && !_remainingSamples; } + bool isStereo() const { return _channels == 2; } + int getRate() const { return _rate; } + +private: + NeAACDecHandle _handle; + byte _channels; + unsigned long _rate; + + byte *_inBuffer; + uint32 _inBufferSize; + uint32 _inBufferPos; + + int16 *_remainingSamples; + uint32 _remainingSamplesSize; + uint32 _remainingSamplesPos; + + void init(Common::SeekableReadStream *extraData); +}; + +AACStream::AACStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeStream, + Common::SeekableReadStream *extraData, DisposeAfterUse::Flag disposeExtraData) { + + _remainingSamples = 0; + _inBufferPos = 0; + + init(extraData); + + // Copy all the data to a pointer so it can be passed through + // (At least MPEG-4 chunks shouldn't be large) + _inBufferSize = stream->size(); + _inBuffer = new byte[_inBufferSize]; + stream->read(_inBuffer, _inBufferSize); + + if (disposeStream == DisposeAfterUse::YES) + delete stream; + + if (disposeExtraData == DisposeAfterUse::YES) + delete extraData; +} + +AACStream::~AACStream() { + NeAACDecClose(_handle); + delete[] _inBuffer; + delete[] _remainingSamples; +} + +void AACStream::init(Common::SeekableReadStream *extraData) { + // Open the library + _handle = NeAACDecOpen(); + + // Configure the library to our needs + NeAACDecConfigurationPtr conf = NeAACDecGetCurrentConfiguration(_handle); + conf->outputFormat = FAAD_FMT_16BIT; // We only support 16bit audio + conf->downMatrix = 1; // Convert from 5.1 to stereo if required + NeAACDecSetConfiguration(_handle, conf); + + // Copy the extra data to a buffer + extraData->seek(0); + byte *extraDataBuf = new byte[extraData->size()]; + extraData->read(extraDataBuf, extraData->size()); + + // Initialize with our extra data + // NOTE: This code assumes the extra data is coming from an MPEG-4 file! + int err = NeAACDecInit2(_handle, extraDataBuf, extraData->size(), &_rate, &_channels); + delete[] extraDataBuf; + + if (err < 0) + error("Could not initialize AAC decoder: %s", NeAACDecGetErrorMessage(err)); +} + +int AACStream::readBuffer(int16 *buffer, const int numSamples) { + int samples = 0; + + assert((numSamples % _channels) == 0); + + // Dip into our remaining samples pool if it's available + if (_remainingSamples) { + samples = MIN<int>(numSamples, _remainingSamplesSize - _remainingSamplesPos); + + memcpy(buffer, _remainingSamples + _remainingSamplesPos, samples * 2); + _remainingSamplesPos += samples; + + if (_remainingSamplesPos == _remainingSamplesSize) { + delete[] _remainingSamples; + _remainingSamples = 0; + } + } + + // Decode until we have enough samples (or there's no more left) + while (samples < numSamples && !endOfData()) { + NeAACDecFrameInfo frameInfo; + uint16 *decodedSamples = (uint16 *)NeAACDecDecode(_handle, &frameInfo, _inBuffer + _inBufferPos, _inBufferSize - _inBufferPos); + + if (frameInfo.error != 0) + error("Failed to decode AAC frame: %s", NeAACDecGetErrorMessage(frameInfo.error)); + + int decodedSampleSize = frameInfo.samples; + int copySamples = (decodedSampleSize > (numSamples - samples)) ? (numSamples - samples) : decodedSampleSize; + + memcpy(buffer + samples, decodedSamples, copySamples * 2); + samples += copySamples; + + // Copy leftover samples for use in a later readBuffer() call + if (copySamples != decodedSampleSize) { + _remainingSamplesSize = decodedSampleSize - copySamples; + _remainingSamples = new int16[_remainingSamplesSize]; + _remainingSamplesPos = 0; + memcpy(_remainingSamples, decodedSamples + copySamples, _remainingSamplesSize * 2); + } + + _inBufferPos += frameInfo.bytesconsumed; + } + + return samples; +} + +// Factory function +AudioStream *makeAACStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeStream, + Common::SeekableReadStream *extraData, DisposeAfterUse::Flag disposeExtraData) { + + return new AACStream(stream, disposeStream, extraData, disposeExtraData); +} + +} // End of namespace Audio + +#endif // #ifdef USE_FAAD diff --git a/audio/decoders/aac.h b/audio/decoders/aac.h new file mode 100644 index 0000000000..efcbcc6f42 --- /dev/null +++ b/audio/decoders/aac.h @@ -0,0 +1,69 @@ +/* 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. + * + * $URL$ + * $Id$ + * + */ + +/** + * @file + * Sound decoder used in engines: + * - groovie + */ + +#ifndef SOUND_AAC_H +#define SOUND_AAC_H + +#include "common/scummsys.h" +#include "common/types.h" + +#ifdef USE_FAAD + +namespace Common { + class SeekableReadStream; +} + +namespace Audio { + +class AudioStream; + +/** + * Create a new AudioStream from the AAC data of an MPEG-4 file in the given stream. + * + * @note This should *only* be called by our QuickTime/MPEG-4 decoder since it relies + * on the MPEG-4 extra data. If you want to decode a file using AAC, go use + * makeQuickTimeStream() instead! + * @param stream the SeekableReadStream from which to read the AAC data + * @param disposeStream whether to delete the stream after use + * @param extraData the SeekableReadStream from which to read the AAC extra data + * @param disposeExtraData whether to delete the extra data stream after use + * @return a new AudioStream, or NULL, if an error occurred + */ +AudioStream *makeAACStream( + Common::SeekableReadStream *stream, + DisposeAfterUse::Flag disposeStream, + Common::SeekableReadStream *extraData, + DisposeAfterUse::Flag disposeExtraData = DisposeAfterUse::NO); + +} // End of namespace Audio + +#endif // #ifdef USE_FAAD +#endif // #ifndef SOUND_AAC_H diff --git a/audio/decoders/flac.cpp b/audio/decoders/flac.cpp index b818d4f7e9..d06a7b9c0e 100644 --- a/audio/decoders/flac.cpp +++ b/audio/decoders/flac.cpp @@ -303,7 +303,7 @@ int FLACStream::readBuffer(int16 *buffer, const int numSamples) { const uint numChannels = getChannels(); if (numChannels == 0) { - warning("FLACStream: Stream not successfully initialised, cant playback"); + warning("FLACStream: Stream not successfully initialized, cant playback"); return -1; // streaminfo wasnt read! } diff --git a/video/codecs/qdm2.cpp b/audio/decoders/qdm2.cpp index 10310ce2a0..a178c363b5 100644 --- a/video/codecs/qdm2.cpp +++ b/audio/decoders/qdm2.cpp @@ -23,19 +23,19 @@ // Based off ffmpeg's QDM2 decoder #include "common/scummsys.h" -#include "video/codecs/qdm2.h" +#include "audio/decoders/qdm2.h" -#ifdef VIDEO_CODECS_QDM2_H +#ifdef AUDIO_QDM2_H #include "audio/audiostream.h" -#include "video/codecs/qdm2data.h" +#include "audio/decoders/qdm2data.h" #include "common/array.h" #include "common/debug.h" #include "common/stream.h" #include "common/textconsole.h" -namespace Video { +namespace Audio { enum { SOFTCLIP_THRESHOLD = 27600, @@ -150,7 +150,7 @@ struct RDFTContext { FFTContext fft; }; -class QDM2Stream : public Audio::AudioStream { +class QDM2Stream : public AudioStream { public: QDM2Stream(Common::SeekableReadStream *stream, Common::SeekableReadStream *extraData); ~QDM2Stream(); @@ -3270,10 +3270,10 @@ int QDM2Stream::readBuffer(int16 *buffer, const int numSamples) { return decodedSamples; } -Audio::AudioStream *makeQDM2Stream(Common::SeekableReadStream *stream, Common::SeekableReadStream *extraData) { +AudioStream *makeQDM2Stream(Common::SeekableReadStream *stream, Common::SeekableReadStream *extraData) { return new QDM2Stream(stream, extraData); } -} // End of namespace Video +} // End of namespace Audio #endif diff --git a/video/codecs/qdm2.h b/audio/decoders/qdm2.h index bb9228550a..c0ec647bfd 100644 --- a/video/codecs/qdm2.h +++ b/audio/decoders/qdm2.h @@ -23,18 +23,16 @@ // Only compile if Mohawk is enabled or if we're building dynamic modules #if defined(ENABLE_MOHAWK) || defined(DYNAMIC_MODULES) -#ifndef VIDEO_CODECS_QDM2_H -#define VIDEO_CODECS_QDM2_H +#ifndef AUDIO_QDM2_H +#define AUDIO_QDM2_H namespace Common { class SeekableReadStream; } namespace Audio { -class AudioStream; -} -namespace Video { +class AudioStream; /** * Create a new AudioStream from the QDM2 data in the given stream. @@ -43,9 +41,9 @@ namespace Video { * @param extraData the QuickTime extra data stream * @return a new AudioStream, or NULL, if an error occurred */ -Audio::AudioStream *makeQDM2Stream(Common::SeekableReadStream *stream, Common::SeekableReadStream *extraData); +AudioStream *makeQDM2Stream(Common::SeekableReadStream *stream, Common::SeekableReadStream *extraData); -} // End of namespace Video +} // End of namespace Audio -#endif // VIDEO_CODECS_QDM2_H +#endif // AUDIO_QDM2_H #endif // Mohawk/Plugins guard diff --git a/video/codecs/qdm2data.h b/audio/decoders/qdm2data.h index 995873207f..d92bc0ff80 100644 --- a/video/codecs/qdm2data.h +++ b/audio/decoders/qdm2data.h @@ -20,12 +20,12 @@ * */ -#ifndef VIDEO_CODECS_QDM2DATA_H -#define VIDEO_CODECS_QDM2DATA_H +#ifndef AUDIO_QDM2DATA_H +#define AUDIO_QDM2DATA_H #include "common/scummsys.h" -namespace Video { +namespace Audio { /// VLC TABLES @@ -523,6 +523,6 @@ static const float type34_delta[10] = { // FIXME: covers 8 entries.. 0.138071194291115f,0.333333343267441f,0.60947573184967f,1.0f,0.0f, }; -} // End of namespace Video +} // End of namespace Audio #endif diff --git a/audio/decoders/quicktime.cpp b/audio/decoders/quicktime.cpp new file mode 100644 index 0000000000..0f2e76658b --- /dev/null +++ b/audio/decoders/quicktime.cpp @@ -0,0 +1,421 @@ +/* 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. + * + * $URL$ + * $Id$ + * + */ + +#include "common/debug.h" +#include "common/util.h" +#include "common/memstream.h" +#include "common/stream.h" +#include "common/textconsole.h" + +#include "audio/audiostream.h" +#include "audio/decoders/quicktime.h" +#include "audio/decoders/quicktime_intern.h" + +// Codecs +#include "audio/decoders/aac.h" +#include "audio/decoders/adpcm.h" +#include "audio/decoders/qdm2.h" +#include "audio/decoders/raw.h" + +namespace Audio { + +QuickTimeAudioDecoder::QuickTimeAudioDecoder() : Common::QuickTimeParser() { + _audStream = 0; +} + +QuickTimeAudioDecoder::~QuickTimeAudioDecoder() { + delete _audStream; +} + +bool QuickTimeAudioDecoder::loadAudioFile(const Common::String &filename) { + if (!Common::QuickTimeParser::parseFile(filename)) + return false; + + init(); + return true; +} + +bool QuickTimeAudioDecoder::loadAudioStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeFileHandle) { + if (!Common::QuickTimeParser::parseStream(stream, disposeFileHandle)) + return false; + + init(); + return true; +} + +void QuickTimeAudioDecoder::init() { + Common::QuickTimeParser::init(); + + _audioTrackIndex = -1; + + // Find an audio stream + for (uint32 i = 0; i < _tracks.size(); i++) + if (_tracks[i]->codecType == CODEC_TYPE_AUDIO && _audioTrackIndex < 0) + _audioTrackIndex = i; + + // Initialize audio, if present + if (_audioTrackIndex >= 0) { + AudioSampleDesc *entry = (AudioSampleDesc *)_tracks[_audioTrackIndex]->sampleDescs[0]; + + if (entry->isAudioCodecSupported()) { + _audStream = makeQueuingAudioStream(entry->_sampleRate, entry->_channels == 2); + _curAudioChunk = 0; + + // Make sure the bits per sample transfers to the sample size + if (entry->getCodecTag() == MKTAG('r', 'a', 'w', ' ') || entry->getCodecTag() == MKTAG('t', 'w', 'o', 's')) + _tracks[_audioTrackIndex]->sampleSize = (entry->_bitsPerSample / 8) * entry->_channels; + } + } +} + +Common::QuickTimeParser::SampleDesc *QuickTimeAudioDecoder::readSampleDesc(Track *track, uint32 format) { + if (track->codecType == CODEC_TYPE_AUDIO) { + debug(0, "Audio Codec FourCC: \'%s\'", tag2str(format)); + + AudioSampleDesc *entry = new AudioSampleDesc(track, format); + + uint16 stsdVersion = _fd->readUint16BE(); + _fd->readUint16BE(); // revision level + _fd->readUint32BE(); // vendor + + entry->_channels = _fd->readUint16BE(); // channel count + entry->_bitsPerSample = _fd->readUint16BE(); // sample size + + _fd->readUint16BE(); // compression id = 0 + _fd->readUint16BE(); // packet size = 0 + + entry->_sampleRate = (_fd->readUint32BE() >> 16); + + debug(0, "stsd version =%d", stsdVersion); + if (stsdVersion == 0) { + // Not used, except in special cases. See below. + entry->_samplesPerFrame = entry->_bytesPerFrame = 0; + } else if (stsdVersion == 1) { + // Read QT version 1 fields. In version 0 these dont exist. + entry->_samplesPerFrame = _fd->readUint32BE(); + debug(0, "stsd samples_per_frame =%d",entry->_samplesPerFrame); + _fd->readUint32BE(); // bytes per packet + entry->_bytesPerFrame = _fd->readUint32BE(); + debug(0, "stsd bytes_per_frame =%d", entry->_bytesPerFrame); + _fd->readUint32BE(); // bytes per sample + } else { + warning("Unsupported QuickTime STSD audio version %d", stsdVersion); + delete entry; + return 0; + } + + // Version 0 videos (such as the Riven ones) don't have this set, + // but we need it later on. Add it in here. + if (format == MKTAG('i', 'm', 'a', '4')) { + entry->_samplesPerFrame = 64; + entry->_bytesPerFrame = 34 * entry->_channels; + } + + if (entry->_sampleRate == 0 && track->timeScale > 1) + entry->_sampleRate = track->timeScale; + + return entry; + } + + return 0; +} + +bool QuickTimeAudioDecoder::isOldDemuxing() const { + assert(_audioTrackIndex >= 0); + return _tracks[_audioTrackIndex]->timeToSampleCount == 1 && _tracks[_audioTrackIndex]->timeToSample[0].duration == 1; +} + +void QuickTimeAudioDecoder::queueNextAudioChunk() { + AudioSampleDesc *entry = (AudioSampleDesc *)_tracks[_audioTrackIndex]->sampleDescs[0]; + Common::MemoryWriteStreamDynamic *wStream = new Common::MemoryWriteStreamDynamic(); + + _fd->seek(_tracks[_audioTrackIndex]->chunkOffsets[_curAudioChunk]); + + // First, we have to get the sample count + uint32 sampleCount = entry->getAudioChunkSampleCount(_curAudioChunk); + assert(sampleCount); + + if (isOldDemuxing()) { + // Old-style audio demuxing + + // Then calculate the right sizes + while (sampleCount > 0) { + uint32 samples = 0, size = 0; + + if (entry->_samplesPerFrame >= 160) { + samples = entry->_samplesPerFrame; + size = entry->_bytesPerFrame; + } else if (entry->_samplesPerFrame > 1) { + samples = MIN<uint32>((1024 / entry->_samplesPerFrame) * entry->_samplesPerFrame, sampleCount); + size = (samples / entry->_samplesPerFrame) * entry->_bytesPerFrame; + } else { + samples = MIN<uint32>(1024, sampleCount); + size = samples * _tracks[_audioTrackIndex]->sampleSize; + } + + // Now, we read in the data for this data and output it + byte *data = (byte *)malloc(size); + _fd->read(data, size); + wStream->write(data, size); + free(data); + sampleCount -= samples; + } + } else { + // New-style audio demuxing + + // Find our starting sample + uint32 startSample = 0; + for (uint32 i = 0; i < _curAudioChunk; i++) + startSample += entry->getAudioChunkSampleCount(i); + + for (uint32 i = 0; i < sampleCount; i++) { + uint32 size = (_tracks[_audioTrackIndex]->sampleSize != 0) ? _tracks[_audioTrackIndex]->sampleSize : _tracks[_audioTrackIndex]->sampleSizes[i + startSample]; + + // Now, we read in the data for this data and output it + byte *data = (byte *)malloc(size); + _fd->read(data, size); + wStream->write(data, size); + free(data); + } + } + + // Now queue the buffer + _audStream->queueAudioStream(entry->createAudioStream(new Common::MemoryReadStream(wStream->getData(), wStream->size(), DisposeAfterUse::YES))); + delete wStream; + + _curAudioChunk++; +} + +void QuickTimeAudioDecoder::setAudioStreamPos(const Timestamp &where) { + if (!_audStream) + return; + + // Re-create the audio stream + delete _audStream; + Audio::QuickTimeAudioDecoder::AudioSampleDesc *entry = (Audio::QuickTimeAudioDecoder::AudioSampleDesc *)_tracks[_audioTrackIndex]->sampleDescs[0]; + _audStream = Audio::makeQueuingAudioStream(entry->_sampleRate, entry->_channels == 2); + + // First, we need to track down what audio sample we need + Audio::Timestamp curAudioTime = where.convertToFramerate(_tracks[_audioTrackIndex]->timeScale); + uint32 sample = curAudioTime.totalNumberOfFrames(); + uint32 seekSample = sample; + + if (!isOldDemuxing()) { + // We shouldn't have audio samples that are a different duration + // That would be quite bad! + if (_tracks[_audioTrackIndex]->timeToSampleCount != 1) { + warning("Failed seeking"); + return; + } + + // Note that duration is in terms of *one* channel + // This eases calculation a bit + seekSample /= _tracks[_audioTrackIndex]->timeToSample[0].duration; + } + + // Now to track down what chunk it's in + uint32 totalSamples = 0; + _curAudioChunk = 0; + for (uint32 i = 0; i < _tracks[_audioTrackIndex]->chunkCount; i++, _curAudioChunk++) { + uint32 chunkSampleCount = entry->getAudioChunkSampleCount(i); + + if (seekSample < totalSamples + chunkSampleCount) + break; + + totalSamples += chunkSampleCount; + } + + // Reposition the audio stream + queueNextAudioChunk(); + if (sample != totalSamples) { + // HACK: Skip a certain amount of samples from the stream + // (There's got to be a better way to do this!) + int skipSamples = (sample - totalSamples) * entry->_channels; + + int16 *tempBuffer = new int16[skipSamples]; + _audStream->readBuffer(tempBuffer, skipSamples); + delete[] tempBuffer; + } +} + +QuickTimeAudioDecoder::AudioSampleDesc::AudioSampleDesc(Common::QuickTimeParser::Track *parentTrack, uint32 codecTag) : Common::QuickTimeParser::SampleDesc(parentTrack, codecTag) { + _channels = 0; + _sampleRate = 0; + _samplesPerFrame = 0; + _bytesPerFrame = 0; + _bitsPerSample = 0; +} + +bool QuickTimeAudioDecoder::AudioSampleDesc::isAudioCodecSupported() const { + // Check if the codec is a supported codec + if (_codecTag == MKTAG('t', 'w', 'o', 's') || _codecTag == MKTAG('r', 'a', 'w', ' ') || _codecTag == MKTAG('i', 'm', 'a', '4')) + return true; + +#ifdef AUDIO_QDM2_H + if (_codecTag == MKTAG('Q', 'D', 'M', '2')) + return true; +#endif + + if (_codecTag == MKTAG('m', 'p', '4', 'a')) { + Common::String audioType; + switch (_parentTrack->objectTypeMP4) { + case 0x40: // AAC +#ifdef USE_FAAD + return true; +#else + audioType = "AAC"; + break; +#endif + default: + audioType = "Unknown"; + break; + } + warning("No MPEG-4 audio (%s) support", audioType.c_str()); + } else + warning("Audio Codec Not Supported: \'%s\'", tag2str(_codecTag)); + + return false; +} + +uint32 QuickTimeAudioDecoder::AudioSampleDesc::getAudioChunkSampleCount(uint chunk) const { + uint32 sampleCount = 0; + + for (uint32 j = 0; j < _parentTrack->sampleToChunkCount; j++) + if (chunk >= _parentTrack->sampleToChunk[j].first) + sampleCount = _parentTrack->sampleToChunk[j].count; + + return sampleCount; +} + +AudioStream *QuickTimeAudioDecoder::AudioSampleDesc::createAudioStream(Common::SeekableReadStream *stream) const { + if (!stream) + return 0; + + if (_codecTag == MKTAG('t', 'w', 'o', 's') || _codecTag == MKTAG('r', 'a', 'w', ' ')) { + // Fortunately, most of the audio used in Myst videos is raw... + uint16 flags = 0; + if (_codecTag == MKTAG('r', 'a', 'w', ' ')) + flags |= FLAG_UNSIGNED; + if (_channels == 2) + flags |= FLAG_STEREO; + if (_bitsPerSample == 16) + flags |= FLAG_16BITS; + uint32 dataSize = stream->size(); + byte *data = (byte *)malloc(dataSize); + stream->read(data, dataSize); + delete stream; + return makeRawStream(data, dataSize, _sampleRate, flags); + } else if (_codecTag == MKTAG('i', 'm', 'a', '4')) { + // Riven uses this codec (as do some Myst ME videos) + return makeADPCMStream(stream, DisposeAfterUse::YES, stream->size(), kADPCMApple, _sampleRate, _channels, 34); + } else if (_codecTag == MKTAG('m', 'p', '4', 'a')) { + // The 7th Guest iOS uses an MPEG-4 codec +#ifdef USE_FAAD + if (_parentTrack->objectTypeMP4 == 0x40) + return makeAACStream(stream, DisposeAfterUse::YES, _parentTrack->extraData); +#endif +#ifdef AUDIO_QDM2_H + } else if (_codecTag == MKTAG('Q', 'D', 'M', '2')) { + // Myst ME uses this codec for many videos + return makeQDM2Stream(stream, _parentTrack->extraData); +#endif + } + + error("Unsupported audio codec"); + + return NULL; +} + +/** + * A wrapper around QuickTimeAudioDecoder that implements the RewindableAudioStream API + */ +class QuickTimeAudioStream : public SeekableAudioStream, public QuickTimeAudioDecoder { +public: + QuickTimeAudioStream() {} + ~QuickTimeAudioStream() {} + + bool openFromFile(const Common::String &filename) { + return QuickTimeAudioDecoder::loadAudioFile(filename) && _audioTrackIndex >= 0 && _audStream; + } + + bool openFromStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeFileHandle) { + return QuickTimeAudioDecoder::loadAudioStream(stream, disposeFileHandle) && _audioTrackIndex >= 0 && _audStream; + } + + // AudioStream API + int readBuffer(int16 *buffer, const int numSamples) { + int samples = 0; + + while (samples < numSamples && !endOfData()) { + if (_audStream->numQueuedStreams() == 0) + queueNextAudioChunk(); + + samples += _audStream->readBuffer(buffer + samples, numSamples - samples); + } + + return samples; + } + + bool isStereo() const { return _audStream->isStereo(); } + int getRate() const { return _audStream->getRate(); } + bool endOfData() const { return _curAudioChunk >= _tracks[_audioTrackIndex]->chunkCount && _audStream->endOfData(); } + + // SeekableAudioStream API + bool seek(const Timestamp &where) { + if (where > getLength()) + return false; + + setAudioStreamPos(where); + return true; + } + + Timestamp getLength() const { + return Timestamp(0, _tracks[_audioTrackIndex]->duration, _tracks[_audioTrackIndex]->timeScale); + } +}; + +SeekableAudioStream *makeQuickTimeStream(const Common::String &filename) { + QuickTimeAudioStream *audioStream = new QuickTimeAudioStream(); + + if (!audioStream->openFromFile(filename)) { + delete audioStream; + return 0; + } + + return audioStream; +} + +SeekableAudioStream *makeQuickTimeStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse) { + QuickTimeAudioStream *audioStream = new QuickTimeAudioStream(); + + if (!audioStream->openFromStream(stream, disposeAfterUse)) { + delete audioStream; + return 0; + } + + return audioStream; +} + +} // End of namespace Audio diff --git a/audio/decoders/quicktime.h b/audio/decoders/quicktime.h new file mode 100644 index 0000000000..413f527221 --- /dev/null +++ b/audio/decoders/quicktime.h @@ -0,0 +1,70 @@ +/* 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. + * + * $URL$ + * $Id$ + * + */ + +/** + * @file + * Sound decoder used in engines: + * - groovie + * - mohawk + * - sci + */ + +#ifndef AUDIO_QUICKTIME_H +#define AUDIO_QUICKTIME_H + +#include "common/scummsys.h" +#include "common/types.h" + +namespace Common { + class SeekableReadStream; + class String; +} + +namespace Audio { + +class SeekableAudioStream; + +/** + * Try to load a QuickTime sound file from the given file name and create a SeekableAudioStream + * from that data. + * + * @param filename the filename of the file from which to read the data + * @return a new SeekableAudioStream, or NULL, if an error occurred + */ +SeekableAudioStream *makeQuickTimeStream(const Common::String &filename); + +/** + * Try to load a QuickTime sound file from the given seekable stream and create a SeekableAudioStream + * from that data. + * + * @param stream the SeekableReadStream from which to read the data + * @param disposeAfterUse whether to delete the stream after use + * @return a new SeekableAudioStream, or NULL, if an error occurred + */ +SeekableAudioStream *makeQuickTimeStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeAfterUse = DisposeAfterUse::YES); + +} // End of namespace Audio + +#endif diff --git a/audio/decoders/quicktime_intern.h b/audio/decoders/quicktime_intern.h new file mode 100644 index 0000000000..f288d5604b --- /dev/null +++ b/audio/decoders/quicktime_intern.h @@ -0,0 +1,99 @@ +/* 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. + * + * $URL$ + * $Id$ + * + */ + +/** + * Internal interface to the QuickTime audio decoder. + * + * This is available so that the QuickTimeVideoDecoder can use + * this directly. + */ + +#ifndef AUDIO_QUICKTIME_INTERN_H +#define AUDIO_QUICKTIME_INTERN_H + +#include "common/quicktime.h" +#include "common/scummsys.h" +#include "common/types.h" + +namespace Common { + class SeekableReadStream; + class String; +} + +namespace Audio { + +class AudioStream; +class QueuingAudioStream; + +class QuickTimeAudioDecoder : public Common::QuickTimeParser { +public: + QuickTimeAudioDecoder(); + virtual ~QuickTimeAudioDecoder(); + + /** + * Load a QuickTime audio file + * @param filename the filename to load + */ + bool loadAudioFile(const Common::String &filename); + + /** + * Load a QuickTime audio file from a SeekableReadStream + * @param stream the stream to load + */ + bool loadAudioStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeFileHandle); + +protected: + class AudioSampleDesc : public Common::QuickTimeParser::SampleDesc { + public: + AudioSampleDesc(Common::QuickTimeParser::Track *parentTrack, uint32 codecTag); + + bool isAudioCodecSupported() const; + uint32 getAudioChunkSampleCount(uint chunk) const; + AudioStream *createAudioStream(Common::SeekableReadStream *stream) const; + + // TODO: Make private in the long run + uint16 _bitsPerSample; + uint16 _channels; + uint32 _sampleRate; + uint32 _samplesPerFrame; + uint32 _bytesPerFrame; + }; + + // Common::QuickTimeParser API + virtual Common::QuickTimeParser::SampleDesc *readSampleDesc(Track *track, uint32 format); + + void init(); + void setAudioStreamPos(const Timestamp &where); + bool isOldDemuxing() const; + void queueNextAudioChunk(); + + int _audioTrackIndex; + uint _curAudioChunk; + QueuingAudioStream *_audStream; +}; + +} // End of namespace Audio + +#endif diff --git a/audio/mididrv.cpp b/audio/mididrv.cpp index 7beb76352c..0ca70b24f8 100644 --- a/audio/mididrv.cpp +++ b/audio/mididrv.cpp @@ -25,7 +25,9 @@ #include "common/str.h" #include "common/system.h" #include "common/textconsole.h" +#include "common/translation.h" #include "common/util.h" +#include "gui/message.h" #include "audio/mididrv.h" #include "audio/musicplugin.h" @@ -110,6 +112,8 @@ Common::String MidiDriver::getDeviceString(DeviceHandle handle, DeviceStringType return d->getMusicDriverName(); else if (type == kDriverId) return d->getMusicDriverId(); + else if (type == kDeviceName) + return d->getCompleteName(); else if (type == kDeviceId) return d->getCompleteId(); else @@ -125,6 +129,7 @@ Common::String MidiDriver::getDeviceString(DeviceHandle handle, DeviceStringType MidiDriver::DeviceHandle MidiDriver::detectDevice(int flags) { // Query the selected music device (defaults to MT_AUTO device). DeviceHandle hdl = getDeviceHandle(ConfMan.get("music_driver")); + DeviceHandle reslt = 0; _forceTypeMT32 = false; @@ -133,143 +138,217 @@ MidiDriver::DeviceHandle MidiDriver::detectDevice(int flags) { switch (getMusicType(hdl)) { case MT_PCSPK: if (flags & MDT_PCSPK) - return hdl; + reslt = hdl; break; case MT_PCJR: if (flags & MDT_PCJR) - return hdl; + reslt = hdl; break; case MT_CMS: if (flags & MDT_CMS) - return hdl; + reslt = hdl; break; case MT_ADLIB: if (flags & MDT_ADLIB) - return hdl; + reslt = hdl; break; case MT_C64: if (flags & MDT_C64) - return hdl; + reslt = hdl; break; case MT_AMIGA: if (flags & MDT_AMIGA) - return hdl; + reslt = hdl; break; case MT_APPLEIIGS: if (flags & MDT_APPLEIIGS) - return hdl; + reslt = hdl; break; case MT_TOWNS: if (flags & MDT_TOWNS) - return hdl; + reslt = hdl; break; case MT_PC98: if (flags & MDT_PC98) - return hdl; + reslt = hdl; break; case MT_GM: case MT_GS: case MT_MT32: if (flags & MDT_MIDI) - return hdl; + reslt = hdl; break; case MT_NULL: - return hdl; + reslt = hdl; + break; default: break; } + Common::String failedDevStr; + if (getMusicType(hdl) == MT_INVALID) { + // If the expressly selected driver or device cannot be found (no longer compiled in, turned off, etc.) + // we display a warning and continue. + failedDevStr = ConfMan.get("music_driver"); + Common::String warningMsg = Common::String::format(_("The selected audio device '%s' was not found (e.g. might be turned off or disconnected). Attempting to fall back to the next available device..."), failedDevStr.c_str()); + GUI::MessageDialog dialog(warningMsg); + dialog.runModal(); + } + + MusicType tp = getMusicType(reslt); + if (tp != MT_INVALID && tp != MT_AUTO) { + if (checkDevice(reslt)) { + return reslt; + } else { + // If the expressly selected device cannot be used we display a warning and continue. + failedDevStr = getDeviceString(hdl, MidiDriver::kDeviceName); + Common::String warningMsg = Common::String::format(_("The selected audio device '%s' cannot be used. See log file for more information. Attempting to fall back to the next available device..."), failedDevStr.c_str()); + GUI::MessageDialog dialog(warningMsg); + dialog.runModal(); + } + } + // If the selected driver did not match the flags setting, // we try to determine a suitable and "optimal" music driver. const MusicPlugin::List p = MusicMan.getPlugins(); // If only MDT_MIDI but not MDT_PREFER_MT32 or MDT_PREFER_GM is set we prefer the other devices (which will always be - // detected since they are hard coded and cannot be disabled. - for (int l = (flags & (MDT_PREFER_GM | MDT_PREFER_MT32)) ? 1 : 0; l < 2; ++l) { - if ((flags & MDT_MIDI) && (l == 1)) { - // If a preferred MT32 or GM device has been selected that device gets returned - if (flags & MDT_PREFER_MT32) - hdl = getDeviceHandle(ConfMan.get("mt32_device")); + // detected since they are hard coded and cannot be disabled). + bool skipMidi = !(flags & (MDT_PREFER_GM | MDT_PREFER_MT32)); + while (flags != MDT_NONE) { + if ((flags & MDT_MIDI) && !skipMidi) { + // If a preferred MT32 or GM device has been selected that device gets returned if available. + Common::String devStr; + if (flags & MDT_PREFER_MT32) + devStr = ConfMan.get("mt32_device"); else if (flags & MDT_PREFER_GM) - hdl = getDeviceHandle(ConfMan.get("gm_device")); + devStr = ConfMan.get("gm_device"); else - hdl = getDeviceHandle("auto"); + devStr = "auto"; + hdl = getDeviceHandle(devStr); const MusicType type = getMusicType(hdl); - // If have a "Don't use GM/MT-32" setting we skip this part and jump + // If we have a "Don't use GM/MT-32" setting we skip this part and jump // to AdLib, PC Speaker etc. detection right away. if (type != MT_NULL) { - if (type != MT_AUTO && type != MT_INVALID) { - if (flags & MDT_PREFER_MT32) - // If we have a preferred MT32 device we disable the gm/mt32 mapping (more about this in mididrv.h) - _forceTypeMT32 = true; - - return hdl; + if (type == MT_INVALID) { + // If the preferred (expressly requested) selected driver or device cannot be found (no longer compiled in, turned off, etc.) + // we display a warning and continue. Don't warn about the missing device if we did already (this becomes relevant if the + // missing device is selected as preferred device and also as GM or MT-32 device). + if (failedDevStr != devStr) { + Common::String warningMsg = Common::String::format(_("The preferred audio device '%s' was not found (e.g. might be turned off or disconnected). Attempting to fall back to the next available device..."), devStr.c_str()); + GUI::MessageDialog dialog(warningMsg); + dialog.runModal(); + } + } else if (type != MT_AUTO) { + if (checkDevice(hdl)) { + if (flags & MDT_PREFER_MT32) + // If we have a preferred MT32 device we disable the gm/mt32 mapping (more about this in mididrv.h). + _forceTypeMT32 = true; + return hdl; + } else { + // If the preferred (expressly requested) device cannot be used we display a warning and continue. + // Don't warn about the failing device if we did already (this becomes relevant if the failing + // device is selected as preferred device and also as GM or MT-32 device). + if (failedDevStr != getDeviceString(hdl, MidiDriver::kDeviceName)) { + Common::String warningMsg = Common::String::format(_("The preferred audio device '%s' cannot be used. See log file for more information. Attempting to fall back to the next available device..."), getDeviceString(hdl, MidiDriver::kDeviceName).c_str()); + GUI::MessageDialog dialog(warningMsg); + dialog.runModal(); + } + } } - // If we have no specific device selected (neither in the scummvm nor in the game domain) - // and no preferred MT32 or GM device selected we arrive here. - // If MT32 is preferred we try for the first available device with music type 'MT_MT32' (usually the mt32 emulator) + // If no specific device is selected (neither in the scummvm nor in the game domain) + // and there is no preferred MT32 or GM device selected either or if the detected device is unavailable we arrive here. + // If MT32 is preferred we try for the first available device with music type 'MT_MT32' (usually the mt32 emulator). if (flags & MDT_PREFER_MT32) { for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); ++m) { MusicDevices i = (**m)->getDevices(); for (MusicDevices::iterator d = i.begin(); d != i.end(); ++d) { - if (d->getMusicType() == MT_MT32) - return d->getHandle(); + if (d->getMusicType() == MT_MT32) { + hdl = d->getHandle(); + if (checkDevice(hdl)) + return hdl; + } } } } - // Now we default to the first available device with music type 'MT_GM' - for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); ++m) { - MusicDevices i = (**m)->getDevices(); - for (MusicDevices::iterator d = i.begin(); d != i.end(); ++d) { - if (d->getMusicType() == MT_GM || d->getMusicType() == MT_GS) - return d->getHandle(); + // Now we default to the first available device with music type 'MT_GM' if not + // MT-32 is preferred or if MT-32 is preferred but all other devices have failed. + if (!(flags & MDT_PREFER_MT32) || flags == (MDT_PREFER_MT32 | MDT_MIDI)) { + for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); ++m) { + MusicDevices i = (**m)->getDevices(); + for (MusicDevices::iterator d = i.begin(); d != i.end(); ++d) { + if (d->getMusicType() == MT_GM || d->getMusicType() == MT_GS) { + hdl = d->getHandle(); + if (checkDevice(hdl)) + return hdl; + } + } } + // Detection flags get removed after final detection attempt to avoid further attempts. + flags &= ~(MDT_MIDI | MDT_PREFER_GM | MDT_PREFER_MT32); } } } - MusicType tp = MT_AUTO; - if (flags & MDT_TOWNS) + // The order in this list is important, since this is the order of preference + // (e.g. MT_ADLIB is checked before MT_PCJR and MT_PCSPK for a good reason). + // Detection flags get removed after detection attempt to avoid further attempts. + if (flags & MDT_TOWNS) { tp = MT_TOWNS; - else if (flags & MDT_PC98) + flags &= ~MDT_TOWNS; + } else if (flags & MDT_PC98) { tp = MT_PC98; - else if (flags & MDT_ADLIB) + flags &= ~MDT_PC98; + } else if (flags & MDT_ADLIB) { tp = MT_ADLIB; - else if (flags & MDT_PCJR) + flags &= ~MDT_ADLIB; + } else if (flags & MDT_PCJR) { tp = MT_PCJR; - else if (flags & MDT_PCSPK) + flags &= ~MDT_PCJR; + } else if (flags & MDT_PCSPK) { tp = MT_PCSPK; - else if (flags & MDT_C64) + flags &= ~MDT_PCSPK; + } else if (flags & MDT_C64) { tp = MT_C64; - else if (flags & MDT_AMIGA) + flags &= ~MDT_C64; + } else if (flags & MDT_AMIGA) { tp = MT_AMIGA; - else if (flags & MDT_APPLEIIGS) + flags &= ~MDT_AMIGA; + } else if (flags & MDT_APPLEIIGS) { tp = MT_APPLEIIGS; - else if (l == 0) - // if we haven't tried to find a MIDI device yet we do this now. + flags &= ~MDT_APPLEIIGS; + } else if (flags & MDT_MIDI) { + // If we haven't tried to find a MIDI device yet we do this now. + skipMidi = false; continue; - else + } else if (flags) { + // Invalid flags. Set them to MDT_NONE to leave detection loop. + flags = MDT_NONE; tp = MT_AUTO; + } for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); ++m) { MusicDevices i = (**m)->getDevices(); for (MusicDevices::iterator d = i.begin(); d != i.end(); ++d) { - if (d->getMusicType() == tp) - return d->getHandle(); + if (d->getMusicType() == tp) { + hdl = d->getHandle(); + if (checkDevice(hdl)) + return hdl; + } } } } @@ -288,11 +367,21 @@ MidiDriver *MidiDriver::createMidi(MidiDriver::DeviceHandle handle) { return driver; } +bool MidiDriver::checkDevice(MidiDriver::DeviceHandle handle) { + const MusicPlugin::List p = MusicMan.getPlugins(); + for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); m++) { + if (getDeviceString(handle, MidiDriver::kDriverId).equals((**m)->getId())) + return (**m)->checkDevice(handle); + } + + return false; +} + MidiDriver::DeviceHandle MidiDriver::getDeviceHandle(const Common::String &identifier) { const MusicPlugin::List p = MusicMan.getPlugins(); if (p.begin() == p.end()) - error("Music plugins must be loaded prior to calling this method"); + error("MidiDriver::getDeviceHandle: Music plugins must be loaded prior to calling this method"); for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); m++) { MusicDevices i = (**m)->getDevices(); diff --git a/audio/mididrv.h b/audio/mididrv.h index 7369cab26b..e3f6461be9 100644 --- a/audio/mididrv.h +++ b/audio/mididrv.h @@ -142,6 +142,7 @@ public: enum DeviceStringType { kDriverName, kDriverId, + kDeviceName, kDeviceId }; @@ -156,6 +157,9 @@ public: /** Find the music driver matching the given driver name/description. */ static DeviceHandle getDeviceHandle(const Common::String &identifier); + /** Check whether the device with the given handle is available. */ + static bool checkDevice(DeviceHandle handle); + /** Get the music type matching the given device handle, or MT_AUTO if there is no match. */ static MusicType getMusicType(DeviceHandle handle); diff --git a/audio/midiparser_xmidi.cpp b/audio/midiparser_xmidi.cpp index 84e1aa2ec7..85491faaf8 100644 --- a/audio/midiparser_xmidi.cpp +++ b/audio/midiparser_xmidi.cpp @@ -237,7 +237,7 @@ bool MidiParser_XMIDI::loadMusic(byte *data, uint32 size) { pos += 4; _num_tracks = 1; } else if (memcmp(pos, "XDIR", 4)) { - // Not an XMIDI that we recognise + // Not an XMIDI that we recognize warning("Expected 'XDIR' but found '%c%c%c%c'", pos[0], pos[1], pos[2], pos[3]); return false; } else { @@ -256,26 +256,25 @@ bool MidiParser_XMIDI::loadMusic(byte *data, uint32 size) { // Add eight bytes i += 8; - if (memcmp(buf, "INFO", 4)) { - // Must align - pos += (chunk_len + 1) & ~1; - i += (chunk_len + 1) & ~1; - continue; - } - - // Must be at least 2 bytes long - if (chunk_len < 2) { - warning("Invalid chunk length %d for 'INFO' block", (int)chunk_len); - return false; - } + if (memcmp(buf, "INFO", 4) == 0) { + // Must be at least 2 bytes long + if (chunk_len < 2) { + warning("Invalid chunk length %d for 'INFO' block", (int)chunk_len); + return false; + } - _num_tracks = (byte)read2low(pos); + _num_tracks = (byte)read2low(pos); - if (chunk_len > 2) { - warning("Chunk length %d is greater than 2", (int)chunk_len); - pos += chunk_len - 2; + if (chunk_len > 2) { + warning("Chunk length %d is greater than 2", (int)chunk_len); + //pos += chunk_len - 2; + } + break; } - break; + + // Must align + pos += (chunk_len + 1) & ~1; + i += (chunk_len + 1) & ~1; } // Didn't get to fill the header diff --git a/audio/mixer.cpp b/audio/mixer.cpp index fb4fffb8d8..128224ae85 100644 --- a/audio/mixer.cpp +++ b/audio/mixer.cpp @@ -94,6 +94,13 @@ public: void setVolume(const byte volume); /** + * Gets the channel's own volume. + * + * @return volume + */ + byte getVolume(); + + /** * Sets the channel's balance setting. * * @param balance new balance @@ -101,6 +108,13 @@ public: void setBalance(const int8 balance); /** + * Gets the channel's balance setting. + * + * @return balance + */ + int8 getBalance(); + + /** * Notifies the channel that the global sound type * volume settings changed. */ @@ -342,6 +356,14 @@ void MixerImpl::setChannelVolume(SoundHandle handle, byte volume) { _channels[index]->setVolume(volume); } +byte MixerImpl::getChannelVolume(SoundHandle handle) { + const int index = handle._val % NUM_CHANNELS; + if (!_channels[index] || _channels[index]->getHandle()._val != handle._val) + return 0; + + return _channels[index]->getVolume(); +} + void MixerImpl::setChannelBalance(SoundHandle handle, int8 balance) { Common::StackLock lock(_mutex); @@ -352,6 +374,14 @@ void MixerImpl::setChannelBalance(SoundHandle handle, int8 balance) { _channels[index]->setBalance(balance); } +int8 MixerImpl::getChannelBalance(SoundHandle handle) { + const int index = handle._val % NUM_CHANNELS; + if (!_channels[index] || _channels[index]->getHandle()._val != handle._val) + return 0; + + return _channels[index]->getBalance(); +} + uint32 MixerImpl::getSoundElapsedTime(SoundHandle handle) { return getElapsedTime(handle).msecs(); } @@ -482,11 +512,19 @@ void Channel::setVolume(const byte volume) { updateChannelVolumes(); } +byte Channel::getVolume() { + return _volume; +} + void Channel::setBalance(const int8 balance) { _balance = balance; updateChannelVolumes(); } +int8 Channel::getBalance() { + return _balance; +} + void Channel::updateChannelVolumes() { // From the channel balance/volume and the global volume, we compute // the effective volume for the left and right channel. Note the diff --git a/audio/mixer.h b/audio/mixer.h index 1fbe265488..de709e13fe 100644 --- a/audio/mixer.h +++ b/audio/mixer.h @@ -211,6 +211,14 @@ public: virtual void setChannelVolume(SoundHandle handle, byte volume) = 0; /** + * Get the channel volume for the given handle. + * + * @param handle the sound to affect + * @return channel volume + */ + virtual byte getChannelVolume(SoundHandle handle) = 0; + + /** * Set the channel balance for the given handle. * * @param handle the sound to affect @@ -220,6 +228,14 @@ public: virtual void setChannelBalance(SoundHandle handle, int8 balance) = 0; /** + * Get the channel balance for the given handle. + * + * @param handle the sound to affect + * @return channel balance + */ + virtual int8 getChannelBalance(SoundHandle handle) = 0; + + /** * Get approximation of for how long the channel has been playing. */ virtual uint32 getSoundElapsedTime(SoundHandle handle) = 0; diff --git a/audio/mixer_intern.h b/audio/mixer_intern.h index a04eb55c5b..dc361ce560 100644 --- a/audio/mixer_intern.h +++ b/audio/mixer_intern.h @@ -105,7 +105,9 @@ public: virtual bool isSoundTypeMuted(SoundType type) const; virtual void setChannelVolume(SoundHandle handle, byte volume); + virtual byte getChannelVolume(SoundHandle handle); virtual void setChannelBalance(SoundHandle handle, int8 balance); + virtual int8 getChannelBalance(SoundHandle handle); virtual uint32 getSoundElapsedTime(SoundHandle handle); virtual Timestamp getElapsedTime(SoundHandle handle); diff --git a/audio/mods/tfmx.cpp b/audio/mods/tfmx.cpp index afc7d3b40b..a89da78af1 100644 --- a/audio/mods/tfmx.cpp +++ b/audio/mods/tfmx.cpp @@ -332,7 +332,7 @@ void Tfmx::macroRun(ChannelContext &channel) { channel.vibLength = macroPtr[1]; channel.vibCount = macroPtr[1] / 2; channel.vibDelta = macroPtr[3]; - // TODO: Perhaps a bug, vibValue could be left uninitialised + // TODO: Perhaps a bug, vibValue could be left uninitialized if (!channel.portaDelta) { channel.period = channel.refPeriod; channel.vibValue = 0; @@ -700,7 +700,7 @@ void Tfmx::noteCommand(const uint8 note, const uint8 param1, const uint8 param2, channel.relVol = param2 >> 4; channel.fineTune = (int8)param3; - // TODO: the point where the channel gets initialised varies with the games, needs more research. + // TODO: the point where the channel gets initialized varies with the games, needs more research. initMacroProgramm(channel); channel.keyUp = false; // key down = playing a Note diff --git a/audio/module.mk b/audio/module.mk index 840b6d6692..46cb9944e1 100644 --- a/audio/module.mk +++ b/audio/module.mk @@ -13,12 +13,15 @@ MODULE_OBJS := \ musicplugin.o \ null.o \ timestamp.o \ + decoders/aac.o \ decoders/adpcm.o \ decoders/aiff.o \ decoders/flac.o \ decoders/iff_sound.o \ decoders/mac_snd.o \ decoders/mp3.o \ + decoders/qdm2.o \ + decoders/quicktime.o \ decoders/raw.o \ decoders/vag.o \ decoders/voc.o \ diff --git a/audio/musicplugin.h b/audio/musicplugin.h index 2a25962b87..307293a7c9 100644 --- a/audio/musicplugin.h +++ b/audio/musicplugin.h @@ -90,6 +90,13 @@ public: virtual MusicDevices getDevices() const = 0; /** + * Checks whether a device can actually be used. Currently this is only + * implemented for the MT-32 emulator to check whether the required rom + * files are present. + */ + virtual bool checkDevice(MidiDriver::DeviceHandle) const { return true; } + + /** * Tries to instantiate a MIDI Driver instance based on the device * previously detected via MidiDriver::detectDevice() * diff --git a/audio/softsynth/adlib.cpp b/audio/softsynth/adlib.cpp index 60de8fad60..4025a667ac 100644 --- a/audio/softsynth/adlib.cpp +++ b/audio/softsynth/adlib.cpp @@ -857,6 +857,7 @@ void AdLibPercussionChannel::sysEx_customInstrument(uint32 type, const byte *ins // Allocate memory for the new instruments if (!_customInstruments[note]) { _customInstruments[note] = new AdLibInstrument; + memset(_customInstruments[note], 0, sizeof(AdLibInstrument)); } // Save the new instrument data diff --git a/audio/softsynth/fmtowns_pc98/towns_audio.cpp b/audio/softsynth/fmtowns_pc98/towns_audio.cpp index 5161871601..beee5f1cad 100644 --- a/audio/softsynth/fmtowns_pc98/towns_audio.cpp +++ b/audio/softsynth/fmtowns_pc98/towns_audio.cpp @@ -28,87 +28,117 @@ #include "common/textconsole.h" #include "backends/audiocd/audiocd.h" +class TownsAudio_WaveTable { +friend class TownsAudioInterfaceInternal; +friend class TownsAudio_PcmChannel; +public: + TownsAudio_WaveTable(); + ~TownsAudio_WaveTable(); + +private: + void readHeader(const uint8 *buffer); + void readData(const uint8 *buffer); + void clear(); + + char name[9]; + int32 id; + uint32 size; + uint32 loopStart; + uint32 loopLen; + uint16 rate; + uint16 rateOffs; + uint16 baseNote; + int8 *data; +}; class TownsAudio_PcmChannel { -friend class TownsAudioInterfaceInternal; public: TownsAudio_PcmChannel(); ~TownsAudio_PcmChannel(); -private: - void loadExtData(uint8 *buffer, uint32 size); - void setupLoop(uint32 start, uint32 len); void clear(); + void loadData(TownsAudio_WaveTable *w); + void loadData(uint8 *buffer, uint32 size); + + int initInstrument(uint8 ¬e, TownsAudio_WaveTable *&tables, int numTables); + void keyOn(uint8 note, uint8 velo, TownsAudio_WaveTable *w); + void keyOff(); + + void updateEnvelopeGenerator(); + + void setInstrument(uint8 *instr); + void setLevel(uint8 lvl); + void setPitch(uint32 pt); + void setBalance(uint8 blc); + + void updateOutput(); + int32 currentSampleLeft(); + int32 currentSampleRight(); + + bool _keyPressed; + bool _reserved; + bool _activeKey; + bool _activeEffect; + bool _activeOutput; + +private: + void setupLoop(uint32 loopStart, uint32 len); + void setNote(uint8 note, TownsAudio_WaveTable *w, bool stepLimit = false); + void setVelo(uint8 velo); + void envAttack(); void envDecay(); void envSustain(); void envRelease(); - uint8 *curInstrument; - uint8 note; - uint8 velo; + uint8 *_curInstrument; - int8 *data; - int8 *dataEnd; + uint8 _note; - int8 *loopEnd; - uint32 loopLen; + uint8 _velo; + uint8 _level; + uint8 _tl; - uint16 stepNote; - uint16 stepPitch; - uint16 step; + uint8 _panLeft; + uint8 _panRight; - uint8 panLeft; - uint8 panRight; + int8 *_data; + int8 *_dataEnd; - uint32 pos; + int8 *_loopEnd; + uint32 _loopLen; - uint8 envTotalLevel; - uint8 envAttackRate; - uint8 envDecayRate; - uint8 envSustainLevel; - uint8 envSustainRate; - uint8 envReleaseRate; + uint16 _stepNote; + uint16 _stepPitch; + uint16 _step; - int16 envStep; - int16 envCurrentLevel; + uint32 _pos; - EnvelopeState envState; - - int8 *extData; -}; + uint8 _envTotalLevel; + uint8 _envAttackRate; + uint8 _envDecayRate; + uint8 _envSustainLevel; + uint8 _envSustainRate; + uint8 _envReleaseRate; + int16 _envStep; + int16 _envCurrentLevel; -class TownsAudio_WaveTable { -friend class TownsAudioInterfaceInternal; -public: - TownsAudio_WaveTable(); - ~TownsAudio_WaveTable(); + EnvelopeState _envState; -private: - void readHeader(const uint8 *buffer); - void readData(const uint8 *buffer); - void clear(); + int8 *_extData; - char name[9]; - int32 id; - uint32 size; - uint32 loopStart; - uint32 loopLen; - uint16 rate; - uint16 rateOffs; - uint16 baseNote; - int8 *data; + static const uint16 _pcmPhase1[]; + static const uint16 _pcmPhase2[]; }; class TownsAudioInterfaceInternal : public TownsPC98_FmSynth { public: - TownsAudioInterfaceInternal(Audio::Mixer *mixer, TownsAudioInterfacePluginDriver *driver); + TownsAudioInterfaceInternal(Audio::Mixer *mixer, TownsAudioInterface *owner, TownsAudioInterfacePluginDriver *driver, bool externalMutexHandling = false); ~TownsAudioInterfaceInternal(); - static TownsAudioInterfaceInternal *addNewRef(Audio::Mixer *mixer, TownsAudioInterfacePluginDriver *driver); - static void releaseRef(); - bool checkPluginDriver(TownsAudioInterfacePluginDriver *driver); + static TownsAudioInterfaceInternal *addNewRef(Audio::Mixer *mixer, TownsAudioInterface *owner, TownsAudioInterfacePluginDriver *driver, bool externalMutexHandling = false); + static void releaseRef(TownsAudioInterface *owner); bool init(); @@ -122,6 +152,9 @@ public: void setSoundEffectChanMask(int mask); private: + bool assignPluginDriver(TownsAudioInterface *owner, TownsAudioInterfacePluginDriver *driver, bool externalMutexHandling = false); + void removePluginDriver(TownsAudioInterface *owner); + void nextTickEx(int32 *buffer, uint32 bufferSize); void timerCallbackA(); @@ -200,18 +233,8 @@ private: int pcmLoadInstrument(int instrId, const uint8 *data); int pcmSetPitch(int chan, int pitch); int pcmSetLevel(int chan, int lvl); - void pcmUpdateEnvelopeGenerator(int chan); TownsAudio_PcmChannel *_pcmChan; - uint8 _pcmChanOut; - uint8 _pcmChanReserved; - uint8 _pcmChanKeyPressed; - uint8 _pcmChanEffectPlaying; - uint8 _pcmChanKeyPlaying; - - uint8 _pcmChanNote[8]; - uint8 _pcmChanVelo[8]; - uint8 _pcmChanLevel[8]; uint8 _numReservedChannels; uint8 *_pcmInstruments; @@ -220,8 +243,6 @@ private: uint8 _numWaveTables; uint32 _waveTablesTotalDataSize; - void pcmCalcPhaseStep(TownsAudio_PcmChannel *p, TownsAudio_WaveTable *w); - void updateOutputVolume(); void updateOutputVolumeInternal(); uint8 _outputVolumeFlags; @@ -239,6 +260,7 @@ private: int _pcmSfxChanMask; TownsAudioInterfacePluginDriver *_drv; + void *_drvOwner; bool _ready; static TownsAudioInterfaceInternal *_refInstance; @@ -248,16 +270,14 @@ private: static const uint16 _frequency[]; static const uint8 _carrier[]; static const uint8 _fmDefaultInstrument[]; - static const uint16 _pcmPhase1[]; - static const uint16 _pcmPhase2[]; }; -TownsAudioInterfaceInternal::TownsAudioInterfaceInternal(Audio::Mixer *mixer, TownsAudioInterfacePluginDriver *driver) : TownsPC98_FmSynth(mixer, kTypeTowns), +TownsAudioInterfaceInternal::TownsAudioInterfaceInternal(Audio::Mixer *mixer, TownsAudioInterface *owner, TownsAudioInterfacePluginDriver *driver, bool externalMutexHandling) : + TownsPC98_FmSynth(mixer, kTypeTowns, externalMutexHandling), _fmInstruments(0), _pcmInstruments(0), _pcmChan(0), _waveTables(0), _waveTablesTotalDataSize(0), - _baserate(55125.0f / (float)mixer->getOutputRate()), _tickLength(0), _timer(0), _drv(driver), + _baserate(55125.0f / (float)mixer->getOutputRate()), _tickLength(0), _timer(0), _drv(driver), _drvOwner(owner), _pcmSfxChanMask(0), _musicVolume(Audio::Mixer::kMaxMixerVolume), _sfxVolume(Audio::Mixer::kMaxMixerVolume), - _outputVolumeFlags(0), _pcmChanOut(0), _pcmChanReserved(0), _pcmChanKeyPressed(0), - _pcmChanEffectPlaying(0), _pcmChanKeyPlaying(0), _fmChanPlaying(0), + _outputVolumeFlags(0), _fmChanPlaying(0), _numReservedChannels(0), _numWaveTables(0), _updateOutputVol(false), _ready(false) { #define INTCB(x) &TownsAudioInterfaceInternal::intf_##x @@ -373,9 +393,6 @@ TownsAudioInterfaceInternal::TownsAudioInterfaceInternal(Audio::Mixer *mixer, To memset(_fmSaveReg, 0, sizeof(_fmSaveReg)); memset(_fmChanNote, 0, sizeof(_fmChanNote)); memset(_fmChanPitch, 0, sizeof(_fmChanPitch)); - memset(_pcmChanNote, 0, sizeof(_pcmChanNote)); - memset(_pcmChanVelo, 0, sizeof(_pcmChanVelo)); - memset(_pcmChanLevel, 0, sizeof(_pcmChanLevel)); memset(_outputLevel, 0, sizeof(_outputLevel)); memset(_outputMute, 0, sizeof(_outputMute)); @@ -387,6 +404,8 @@ TownsAudioInterfaceInternal::~TownsAudioInterfaceInternal() { _ready = false; deinit(); + Common::StackLock lock(_mutex); + delete[] _fmSaveReg[0]; delete[] _fmSaveReg[1]; delete[] _fmInstruments; @@ -395,44 +414,33 @@ TownsAudioInterfaceInternal::~TownsAudioInterfaceInternal() { delete[] _pcmChan; } -TownsAudioInterfaceInternal *TownsAudioInterfaceInternal::addNewRef(Audio::Mixer *mixer, TownsAudioInterfacePluginDriver *driver) { +TownsAudioInterfaceInternal *TownsAudioInterfaceInternal::addNewRef(Audio::Mixer *mixer, TownsAudioInterface *owner, TownsAudioInterfacePluginDriver *driver, bool externalMutexHandling) { _refCount++; if (_refCount == 1 && _refInstance == 0) - _refInstance = new TownsAudioInterfaceInternal(mixer, driver); + _refInstance = new TownsAudioInterfaceInternal(mixer, owner, driver, externalMutexHandling); else if (_refCount < 2 || _refInstance == 0) error("TownsAudioInterfaceInternal::addNewRef(): Internal reference management failure"); - else if (!_refInstance->checkPluginDriver(driver)) + else if (!_refInstance->assignPluginDriver(owner, driver, externalMutexHandling)) error("TownsAudioInterfaceInternal::addNewRef(): Plugin driver conflict"); return _refInstance; } -void TownsAudioInterfaceInternal::releaseRef() { +void TownsAudioInterfaceInternal::releaseRef(TownsAudioInterface *owner) { if (!_refCount) return; _refCount--; - if (!_refCount) { + if (_refCount) { + if (_refInstance) + _refInstance->removePluginDriver(owner); + } else { delete _refInstance; _refInstance = 0; } } -bool TownsAudioInterfaceInternal::checkPluginDriver(TownsAudioInterfacePluginDriver *driver) { - if (_refCount <= 1) - return true; - - if (_drv) { - if (driver && driver != _drv) - return false; - } else { - _drv = driver; - } - - return true; -} - bool TownsAudioInterfaceInternal::init() { if (_ready) return true; @@ -499,6 +507,30 @@ void TownsAudioInterfaceInternal::setSoundEffectChanMask(int mask) { setVolumeChannelMasks(~mask, mask); } +bool TownsAudioInterfaceInternal::assignPluginDriver(TownsAudioInterface *owner, TownsAudioInterfacePluginDriver *driver, bool externalMutexHandling) { + if (_refCount <= 1) + return true; + + if (_drv) { + if (driver && driver != _drv) + return false; + } else { + Common::StackLock lock(_mutex); + _drv = driver; + _drvOwner = owner; + _externalMutex = externalMutexHandling; + } + + return true; +} + +void TownsAudioInterfaceInternal::removePluginDriver(TownsAudioInterface *owner) { + if (_drvOwner == owner) { + Common::StackLock lock(_mutex); + _drv = 0; + } +} + void TownsAudioInterfaceInternal::nextTickEx(int32 *buffer, uint32 bufferSize) { if (!_ready) return; @@ -511,40 +543,30 @@ void TownsAudioInterfaceInternal::nextTickEx(int32 *buffer, uint32 bufferSize) { while (_timer > 0x514767) { _timer -= 0x514767; - for (int ii = 0; ii < 8; ii++) { - if ((_pcmChanKeyPlaying & _chanFlags[ii]) || (_pcmChanEffectPlaying & _chanFlags[ii])) { - TownsAudio_PcmChannel *s = &_pcmChan[ii]; - s->pos += s->step; - - if (&s->data[s->pos >> 11] >= s->loopEnd) { - if (s->loopLen) { - s->pos -= s->loopLen; - } else { - s->pos = 0; - _pcmChanEffectPlaying &= ~_chanFlags[ii]; - _pcmChanKeyPlaying &= ~_chanFlags[ii]; - } - } - } - } + for (int ii = 0; ii < 8; ii++) + _pcmChan[ii].updateOutput(); } int32 finOutL = 0; int32 finOutR = 0; for (int ii = 0; ii < 8; ii++) { - if (_pcmChanOut & _chanFlags[ii]) { - int32 o = _pcmChan[ii].data[_pcmChan[ii].pos >> 11] * _pcmChan[ii].velo; - if ((1 << ii) & (~_pcmSfxChanMask)) - o = (o * _musicVolume) / Audio::Mixer::kMaxMixerVolume; - if ((1 << ii) & _pcmSfxChanMask) - o = (o * _sfxVolume) / Audio::Mixer::kMaxMixerVolume; - if (_pcmChan[ii].panLeft) - finOutL += ((o * _pcmChan[ii].panLeft) >> 3); - if (_pcmChan[ii].panRight) - finOutR += ((o * _pcmChan[ii].panRight) >> 3); - if (!((_pcmChanKeyPlaying & _chanFlags[ii]) || (_pcmChanEffectPlaying & _chanFlags[ii]))) - _pcmChanOut &= ~_chanFlags[ii]; + if (_pcmChan[ii]._activeOutput) { + int32 oL = _pcmChan[ii].currentSampleLeft(); + int32 oR = _pcmChan[ii].currentSampleRight(); + if ((1 << ii) & (~_pcmSfxChanMask)) { + oL = (oR * _musicVolume) / Audio::Mixer::kMaxMixerVolume; + oR = (oR * _musicVolume) / Audio::Mixer::kMaxMixerVolume; + } + if ((1 << ii) & _pcmSfxChanMask) { + oL = (oL * _sfxVolume) / Audio::Mixer::kMaxMixerVolume; + oR = (oR * _sfxVolume) / Audio::Mixer::kMaxMixerVolume; + } + finOutL += oL; + finOutR += oR; + + if (!(_pcmChan[ii]._activeKey || _pcmChan[ii]._activeEffect)) + _pcmChan[ii]._activeOutput = false; } } @@ -731,22 +753,19 @@ int TownsAudioInterfaceInternal::intf_reserveEffectChannels(va_list &args) { if (numChan < _numReservedChannels) { int c = 8 - _numReservedChannels; - for (int i = numChan; i; i--) { - uint8 f = ~_chanFlags[c--]; - _pcmChanEffectPlaying &= f; - } + for (int i = numChan; i; i--) + _pcmChan[c--]._activeEffect = false; } else { int c = 7 - _numReservedChannels; for (int i = numChan - _numReservedChannels; i; i--) { - uint8 f = ~_chanFlags[c--]; - _pcmChanKeyPressed &= f; - _pcmChanKeyPlaying &= f; + _pcmChan[c]._keyPressed = false; + _pcmChan[c--]._activeKey = false; } } - static const uint8 reserveChanFlags[] = { 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF }; _numReservedChannels = numChan; - _pcmChanReserved = reserveChanFlags[_numReservedChannels]; + for (int i = 0; i < 8; i++) + _pcmChan[i]._reserved = i >= (8 - _numReservedChannels) ? true : false; return 0; } @@ -819,10 +838,10 @@ int TownsAudioInterfaceInternal::intf_pcmPlayEffect(va_list &args) { chan -= 0x40; - if (!(_pcmChanReserved & _chanFlags[chan])) + if (!_pcmChan[chan]._reserved) return 7; - if ((_pcmChanEffectPlaying & _chanFlags[chan])) + if (_pcmChan[chan]._activeEffect) return 2; TownsAudio_WaveTable w; @@ -836,21 +855,8 @@ int TownsAudioInterfaceInternal::intf_pcmPlayEffect(va_list &args) { TownsAudio_PcmChannel *p = &_pcmChan[chan]; - _pcmChanNote[chan] = note; - _pcmChanVelo[chan] = velo; - - p->note = note; - p->velo = velo << 1; - - p->loadExtData(data + 32, w.size); - p->setupLoop(w.loopStart, w.loopLen); - - pcmCalcPhaseStep(p, &w); - if (p->step > 2048) - p->step = 2048; - - _pcmChanEffectPlaying |= _chanFlags[chan]; - _pcmChanOut |= _chanFlags[chan]; + p->loadData(data + 32, w.size); + p->keyOn(note, velo, &w); return 0; } @@ -866,7 +872,7 @@ int TownsAudioInterfaceInternal::intf_pcmEffectPlaying(va_list &args) { if (chan < 0x40 || chan > 0x47) return 1; chan -= 0x40; - return (_pcmChanEffectPlaying & _chanFlags[chan]) ? 1 : 0; + return _pcmChan[chan]._activeEffect ? 1 : 0; } int TownsAudioInterfaceInternal::intf_fmKeyOn(va_list &args) { @@ -1025,7 +1031,7 @@ int TownsAudioInterfaceInternal::intf_getOutputMute (va_list &args) { int TownsAudioInterfaceInternal::intf_pcmUpdateEnvelopeGenerator(va_list &args) { for (int i = 0; i < 8; i++) - pcmUpdateEnvelopeGenerator(i); + _pcmChan[i].updateEnvelopeGenerator(); return 0; } @@ -1356,14 +1362,8 @@ void TownsAudioInterfaceInternal::bufferedWriteReg(uint8 part, uint8 regAddress, } void TownsAudioInterfaceInternal::pcmReset() { - _pcmChanOut = 0; - _pcmChanReserved = _pcmChanKeyPressed = _pcmChanEffectPlaying = _pcmChanKeyPlaying = 0; _numReservedChannels = 0; - memset(_pcmChanNote, 0, 8); - memset(_pcmChanVelo, 0, 8); - memset(_pcmChanLevel, 0, 8); - for (int i = 0; i < 8; i++) _pcmChan[i].clear(); @@ -1391,65 +1391,19 @@ int TownsAudioInterfaceInternal::pcmKeyOn(int chan, int note, int velo) { return 3; chan -= 0x40; - - if ((_pcmChanReserved & _chanFlags[chan]) || (_pcmChanKeyPressed & _chanFlags[chan])) - return 2; - - _pcmChanNote[chan] = note; - _pcmChanVelo[chan] = velo; - + uint8 noteT = note; TownsAudio_PcmChannel *p = &_pcmChan[chan]; - p->note = note; - - uint8 *instr = _pcmChan[chan].curInstrument; - int i = 0; - for (; i < 8; i++) { - if (note <= instr[16 + 2 * i]) - break; - } - - if (i == 8) - return 8; - int il = i << 3; - p->note += instr[il + 70]; - - p->envTotalLevel = instr[il + 64]; - p->envAttackRate = instr[il + 65]; - p->envDecayRate = instr[il + 66]; - p->envSustainLevel = instr[il + 67]; - p->envSustainRate = instr[il + 68]; - p->envReleaseRate = instr[il + 69]; - p->envStep = 0; - - int32 id = (int32)READ_LE_UINT32(&instr[i * 4 + 32]); - - for (i = 0; i < _numWaveTables; i++) { - if (id == _waveTables[i].id) - break; - } - - if (i == _numWaveTables) - return 9; - - TownsAudio_WaveTable *w = &_waveTables[i]; - - p->data = w->data; - p->dataEnd = w->data + w->size; - p->setupLoop(w->loopStart, w->loopLen); - - pcmCalcPhaseStep(p, w); - - uint32 lvl = _pcmChanLevel[chan] * _pcmChanVelo[chan]; - p->envTotalLevel = ((p->envTotalLevel * lvl) >> 14) & 0xff; - p->envSustainLevel = ((p->envSustainLevel * lvl) >> 14) & 0xff; + if (p->_reserved || p->_keyPressed) + return 2; - p->envAttack(); - p->velo = (p->envCurrentLevel >> 8) << 1; + TownsAudio_WaveTable *w = _waveTables; + int res = p->initInstrument(noteT, w, _numWaveTables); + if (res) + return res; - _pcmChanKeyPressed |= _chanFlags[chan]; - _pcmChanKeyPlaying |= _chanFlags[chan]; - _pcmChanOut |= _chanFlags[chan]; + p->loadData(w); + p->keyOn(noteT, velo, w); return 0; } @@ -1459,8 +1413,7 @@ int TownsAudioInterfaceInternal::pcmKeyOff(int chan) { return 1; chan -= 0x40; - _pcmChanKeyPressed &= ~_chanFlags[chan]; - _pcmChan[chan].envRelease(); + _pcmChan[chan].keyOff(); return 0; } @@ -1469,11 +1422,7 @@ int TownsAudioInterfaceInternal::pcmChanOff(int chan) { return 1; chan -= 0x40; - - _pcmChanKeyPressed &= ~_chanFlags[chan]; - _pcmChanEffectPlaying &= ~_chanFlags[chan]; - _pcmChanKeyPlaying &= ~_chanFlags[chan]; - _pcmChanOut &= ~_chanFlags[chan]; + _pcmChan[chan]._keyPressed = _pcmChan[chan]._activeEffect = _pcmChan[chan]._activeKey = _pcmChan[chan]._activeOutput = false; return 0; } @@ -1495,8 +1444,7 @@ int TownsAudioInterfaceInternal::pcmSetPanPos(int chan, int mode) { blc = ((119 + mode) ^ (mode << 4)) & 0xff; } - _pcmChan[chan].panLeft = blc & 0x0f; - _pcmChan[chan].panRight = blc >> 4; + _pcmChan[chan].setBalance(blc); return 0; } @@ -1507,7 +1455,8 @@ int TownsAudioInterfaceInternal::pcmSetInstrument(int chan, int instrId) { if (instrId > 31) return 3; chan -= 0x40; - _pcmChan[chan].curInstrument = &_pcmInstruments[instrId * 128]; + _pcmChan[chan].setInstrument(&_pcmInstruments[instrId * 128]); + return 0; } @@ -1536,15 +1485,7 @@ int TownsAudioInterfaceInternal::pcmSetPitch(int chan, int pitch) { else if (pitch > 0) pts = (((pitch + 0x2001) << 16) / 0x2000) >> 2; - p->stepPitch = pts & 0xffff; - p->step = (p->stepNote * p->stepPitch) >> 14; - -// if (_pcmChanUnkFlag & _chanFlags[chan]) -// unk[chan] = (((p->step * 1000) << 11) / 98) / 20833; - - /*else*/ - if ((_pcmChanEffectPlaying & _chanFlags[chan]) && (p->step > 2048)) - p->step = 2048; + p->setPitch(pts); return 0; } @@ -1557,98 +1498,11 @@ int TownsAudioInterfaceInternal::pcmSetLevel(int chan, int lvl) { return 3; chan -= 0x40; - TownsAudio_PcmChannel *p = &_pcmChan[chan]; - - if (_pcmChanReserved & _chanFlags[chan]) { - _pcmChanVelo[chan] = lvl; - p->velo = lvl << 1; - } else { - int32 t = p->envStep * lvl; - if (_pcmChanLevel[chan]) - t /= _pcmChanLevel[chan]; - p->envStep = t; - t = p->envCurrentLevel * lvl; - if (_pcmChanLevel[chan]) - t /= _pcmChanLevel[chan]; - p->envCurrentLevel = t; - _pcmChanLevel[chan] = lvl; - p->velo = p->envCurrentLevel >> 8; - } + _pcmChan[chan].setLevel(lvl); return 0; } -void TownsAudioInterfaceInternal::pcmUpdateEnvelopeGenerator(int chan) { - TownsAudio_PcmChannel *p = &_pcmChan[chan]; - if (!p->envCurrentLevel) { - _pcmChanKeyPlaying &= ~_chanFlags[chan]; - p->envState = kEnvReady; - } - - if (!(_pcmChanKeyPlaying & _chanFlags[chan])) - return; - - switch (p->envState) { - case kEnvAttacking: - if (((p->envCurrentLevel + p->envStep) >> 8) > p->envTotalLevel) { - p->envDecay(); - return; - } else { - p->envCurrentLevel += p->envStep; - } - break; - - case kEnvDecaying: - if (((p->envCurrentLevel - p->envStep) >> 8) < p->envSustainLevel) { - p->envSustain(); - return; - } else { - p->envCurrentLevel -= p->envStep; - } - break; - - case kEnvSustaining: - case kEnvReleasing: - p->envCurrentLevel -= p->envStep; - if (p->envCurrentLevel <= 0) - p->envCurrentLevel = 0; - break; - - default: - break; - } - p->velo = (p->envCurrentLevel >> 8) << 1; -} - -void TownsAudioInterfaceInternal::pcmCalcPhaseStep(TownsAudio_PcmChannel *p, TownsAudio_WaveTable *w) { - int8 diff = p->note - w->baseNote; - uint16 r = w->rate + w->rateOffs; - uint16 bl = 0; - uint32 s = 0; - - if (diff < 0) { - diff *= -1; - bl = diff % 12; - diff /= 12; - s = (r >> diff); - if (bl) - s = (s * _pcmPhase2[bl]) >> 16; - - } else if (diff > 0) { - bl = diff % 12; - diff /= 12; - s = (r << diff); - if (bl) - s += ((s * _pcmPhase1[bl]) >> 16); - - } else { - s = r; - } - - p->stepNote = s & 0xffff; - p->step = (s * p->stepPitch) >> 14; -} - void TownsAudioInterfaceInternal::updateOutputVolume() { // Avoid calls to g_system->getAudioCDManager() functions from the main thread // since this can cause mutex lockups. @@ -1669,7 +1523,6 @@ void TownsAudioInterfaceInternal::updateOutputVolumeInternal() { int volume = (int)(((float)(maxVol * 255) / 63.0f)); int balance = maxVol ? (int)( ( ((int)_outputLevel[13] * (_outputMute[13] ^ 1) - _outputLevel[12] * (_outputMute[12] ^ 1)) * 127) / (float)maxVol) : 0; - Common::StackLock lock(_mutex); g_system->getAudioCDManager()->setVolume(volume); g_system->getAudioCDManager()->setBalance(balance); @@ -1699,16 +1552,8 @@ const uint8 TownsAudioInterfaceInternal::_fmDefaultInstrument[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -const uint16 TownsAudioInterfaceInternal::_pcmPhase1[] = { - 0x879B, 0x0F37, 0x1F58, 0x306E, 0x4288, 0x55B6, 0x6A08, 0x7F8F, 0x965E, 0xAE88, 0xC882, 0xE341 -}; - -const uint16 TownsAudioInterfaceInternal::_pcmPhase2[] = { - 0xFEFE, 0xF1A0, 0xE411, 0xD744, 0xCB2F, 0xBFC7, 0xB504, 0xAAE2, 0xA144, 0x9827, 0x8FAC -}; - TownsAudio_PcmChannel::TownsAudio_PcmChannel() { - extData = 0; + _extData = 0; clear(); } @@ -1716,97 +1561,313 @@ TownsAudio_PcmChannel::~TownsAudio_PcmChannel() { clear(); } -void TownsAudio_PcmChannel::loadExtData(uint8 *buffer, uint32 size) { - delete[] extData; - extData = new int8[size]; +void TownsAudio_PcmChannel::clear() { + _curInstrument = 0; + _note = _tl = _level = _velo = 0; + + _data = 0; + _dataEnd = 0; + _loopLen = 0; + + _pos = 0; + _loopEnd = 0; + + _step = 0; + _stepNote = 0x4000; + _stepPitch = 0x4000; + + _panLeft = _panRight = 7; + + _envTotalLevel = _envAttackRate = _envDecayRate = _envSustainLevel = _envSustainRate = _envReleaseRate = 0; + _envStep = _envCurrentLevel = 0; + + _envState = kEnvReady; + + _activeKey = _activeEffect = _activeOutput = _keyPressed = _reserved = false; + + delete[] _extData; + _extData = 0; +} + +void TownsAudio_PcmChannel::loadData(TownsAudio_WaveTable *w) { + _data = w->data; + _dataEnd = w->data + w->size; +} + +void TownsAudio_PcmChannel::loadData(uint8 *buffer, uint32 size) { + delete[] _extData; + _extData = new int8[size]; int8 *src = (int8 *)buffer; - int8 *dst = extData; + int8 *dst = _extData; for (uint32 i = 0; i < size; i++) *dst++ = *src & 0x80 ? (*src++ & 0x7f) : -*src++; - data = extData; - dataEnd = extData + size; - pos = 0; + _data = _extData; + _dataEnd = _extData + size; + _pos = 0; } -void TownsAudio_PcmChannel::setupLoop(uint32 start, uint32 len) { - loopLen = len << 11; - loopEnd = loopLen ? &data[(start + loopLen) >> 11] : dataEnd; - pos = start; +int TownsAudio_PcmChannel::initInstrument(uint8 ¬e, TownsAudio_WaveTable *&tables, int numTables) { + int i = 0; + for (; i < 8; i++) { + if (note <= _curInstrument[16 + 2 * i]) + break; + } + + if (i == 8) + return 8; + + uint8 *d = &_curInstrument[(i << 3) + 64]; + _envTotalLevel = d[0]; + _envAttackRate = d[1]; + _envDecayRate = d[2]; + _envSustainLevel = d[3]; + _envSustainRate = d[4]; + _envReleaseRate = d[5]; + _envStep = 0; + note += d[6]; + + int32 id = (int32)READ_LE_UINT32(&_curInstrument[i * 4 + 32]); + + for (i = 0; i < numTables; i++) { + if (id == tables[i].id) + break; + } + + if (i == numTables) + return 9; + + tables = &tables[i]; + return 0; } -void TownsAudio_PcmChannel::clear() { - curInstrument = 0; - note = 0; - velo = 0; +void TownsAudio_PcmChannel::keyOn(uint8 note, uint8 velo, TownsAudio_WaveTable *w) { + setupLoop(w->loopStart, w->loopLen); + setNote(note, w, _reserved); + setVelo(velo); - data = 0; - dataEnd = 0; - loopLen = 0; + if (_reserved) + _activeEffect = true; + else + _keyPressed = _activeKey = true; + + _activeOutput = true; +} - pos = 0; - loopEnd = 0; +void TownsAudio_PcmChannel::keyOff() { + _keyPressed = false; + envRelease(); +} - step = 0; - stepNote = 0x4000; - stepPitch = 0x4000; +void TownsAudio_PcmChannel::updateEnvelopeGenerator() { + if (!_envCurrentLevel) { + _activeKey = false; + _envState = kEnvReady; + } - panLeft = panRight = 7; + if (!_activeKey) + return; - envTotalLevel = envAttackRate = envDecayRate = envSustainLevel = envSustainRate = envReleaseRate = 0; - envStep = envCurrentLevel = 0; + switch (_envState) { + case kEnvAttacking: + if (((_envCurrentLevel + _envStep) >> 8) > _envTotalLevel) { + envDecay(); + return; + } else { + _envCurrentLevel += _envStep; + } + break; - envState = kEnvReady; + case kEnvDecaying: + if (((_envCurrentLevel - _envStep) >> 8) < _envSustainLevel) { + envSustain(); + return; + } else { + _envCurrentLevel -= _envStep; + } + break; + + case kEnvSustaining: + case kEnvReleasing: + _envCurrentLevel -= _envStep; + if (_envCurrentLevel <= 0) + _envCurrentLevel = 0; + break; + + default: + break; + } + _tl = (_envCurrentLevel >> 8) << 1; +} + +void TownsAudio_PcmChannel::setInstrument(uint8 *instr) { + _curInstrument = instr; +} + +void TownsAudio_PcmChannel::setLevel(uint8 lvl) { + if (_reserved) { + _velo = lvl; + _tl = lvl << 1; + } else { + int32 t = _envStep * lvl; + if (_level) + t /= _level; + _envStep = t; + t = _envCurrentLevel * lvl; + if (_level) + t /= _level; + _envCurrentLevel = t; + _level = lvl; + _tl = _envCurrentLevel >> 8; + } +} - delete[] extData; - extData = 0; +void TownsAudio_PcmChannel::setPitch(uint32 pt) { + _stepPitch = pt & 0xffff; + _step = (_stepNote * _stepPitch) >> 14; + +// if (_pcmChanUnkFlag & _chanFlags[chan]) +// unk[chan] = (((p->step * 1000) << 11) / 98) / 20833; + + /*else*/ + if (_activeEffect && (_step > 2048)) + _step = 2048; +} + +void TownsAudio_PcmChannel::setBalance(uint8 blc) { + _panLeft = blc & 0x0f; + _panRight = blc >> 4; +} + +void TownsAudio_PcmChannel::updateOutput() { + if (_activeKey || _activeEffect) { + _pos += _step; + + if (&_data[_pos >> 11] >= _loopEnd) { + if (_loopLen) { + _pos -= _loopLen; + } else { + _pos = 0; + _activeKey = _activeEffect = false; + } + } + } +} + +int32 TownsAudio_PcmChannel::currentSampleLeft() { + return (_activeOutput && _panLeft) ? (((_data[_pos >> 11] * _tl) * _panLeft) >> 3) : 0; +} + +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::setNote(uint8 note, TownsAudio_WaveTable *w, bool stepLimit) { + _note = note; + int8 diff = _note - w->baseNote; + uint16 r = w->rate + w->rateOffs; + uint16 bl = 0; + uint32 s = 0; + + if (diff < 0) { + diff *= -1; + bl = diff % 12; + diff /= 12; + s = (r >> diff); + if (bl) + s = (s * _pcmPhase2[bl]) >> 16; + + } else if (diff > 0) { + bl = diff % 12; + diff /= 12; + s = (r << diff); + if (bl) + s += ((s * _pcmPhase1[bl]) >> 16); + + } else { + s = r; + } + + _stepNote = s & 0xffff; + _step = (s * _stepPitch) >> 14; + + if (stepLimit && _step > 2048) + _step = 2048; +} + +void TownsAudio_PcmChannel::setVelo(uint8 velo) { + if (_reserved) { + _velo = velo; + _tl = velo << 1; + } else { + _velo = velo; + uint32 lvl = _level * _velo; + _envTotalLevel = ((_envTotalLevel * lvl) >> 14) & 0xff; + _envSustainLevel = ((_envSustainLevel * lvl) >> 14) & 0xff; + envAttack(); + _tl = (_envCurrentLevel >> 8) << 1; + } } void TownsAudio_PcmChannel::envAttack() { - envState = kEnvAttacking; - int16 t = envTotalLevel << 8; - if (envAttackRate == 127) { - envStep = 0; - } else if (envAttackRate) { - envStep = t / envAttackRate; - envCurrentLevel = 1; + _envState = kEnvAttacking; + int16 t = _envTotalLevel << 8; + if (_envAttackRate == 127) { + _envCurrentLevel = _envStep = 0; + } else if (_envAttackRate) { + _envStep = t / _envAttackRate; + _envCurrentLevel = 1; } else { - envCurrentLevel = t; + _envCurrentLevel = t; envDecay(); } } void TownsAudio_PcmChannel::envDecay() { - envState = kEnvDecaying; - int16 t = envTotalLevel - envSustainLevel; - if (t < 0 || envDecayRate == 127) { - envStep = 0; - } else if (envDecayRate) { - envStep = (t << 8) / envDecayRate; + _envState = kEnvDecaying; + int16 t = _envTotalLevel - _envSustainLevel; + if (t < 0 || _envDecayRate == 127) { + _envStep = 0; + } else if (_envDecayRate) { + _envStep = (t << 8) / _envDecayRate; } else { - envCurrentLevel = envSustainLevel << 8; + _envCurrentLevel = _envSustainLevel << 8; envSustain(); } } void TownsAudio_PcmChannel::envSustain() { - envState = kEnvSustaining; - if (envSustainLevel && envSustainRate) - envStep = (envSustainRate == 127) ? 0 : (envCurrentLevel / envSustainRate) >> 1; + _envState = kEnvSustaining; + if (_envSustainLevel && _envSustainRate) + _envStep = (_envSustainRate == 127) ? 0 : (_envCurrentLevel / _envSustainRate) >> 1; else - envStep = envCurrentLevel = 1; + _envStep = _envCurrentLevel = 1; } void TownsAudio_PcmChannel::envRelease() { - envState = kEnvReleasing; - if (envReleaseRate == 127) - envStep = 0; - else if (envReleaseRate) - envStep = envCurrentLevel / envReleaseRate; + _envState = kEnvReleasing; + if (_envReleaseRate == 127) + _envStep = 0; + else if (_envReleaseRate) + _envStep = _envCurrentLevel / _envReleaseRate; else - envStep = envCurrentLevel = 1; + _envStep = _envCurrentLevel = 1; } +const uint16 TownsAudio_PcmChannel::_pcmPhase1[] = { + 0x879B, 0x0F37, 0x1F58, 0x306E, 0x4288, 0x55B6, 0x6A08, 0x7F8F, 0x965E, 0xAE88, 0xC882, 0xE341 +}; + +const uint16 TownsAudio_PcmChannel::_pcmPhase2[] = { + 0xFEFE, 0xF1A0, 0xE411, 0xD744, 0xCB2F, 0xBFC7, 0xB504, 0xAAE2, 0xA144, 0x9827, 0x8FAC +}; + TownsAudio_WaveTable::TownsAudio_WaveTable() { data = 0; clear(); @@ -1854,12 +1915,12 @@ void TownsAudio_WaveTable::clear() { data = 0; } -TownsAudioInterface::TownsAudioInterface(Audio::Mixer *mixer, TownsAudioInterfacePluginDriver *driver) { - _intf = TownsAudioInterfaceInternal::addNewRef(mixer, driver); +TownsAudioInterface::TownsAudioInterface(Audio::Mixer *mixer, TownsAudioInterfacePluginDriver *driver, bool externalMutexHandling) { + _intf = TownsAudioInterfaceInternal::addNewRef(mixer, this, driver, externalMutexHandling); } TownsAudioInterface::~TownsAudioInterface() { - TownsAudioInterfaceInternal::releaseRef(); + TownsAudioInterfaceInternal::releaseRef(this); _intf = 0; } @@ -1888,11 +1949,3 @@ void TownsAudioInterface::setSoundEffectVolume(int volume) { void TownsAudioInterface::setSoundEffectChanMask(int mask) { _intf->setSoundEffectChanMask(mask); } - -void TownsAudioInterface::lockInternal() { - _intf->mutexLock(); -} - -void TownsAudioInterface::unlockInternal() { - _intf->mutexUnlock(); -} diff --git a/audio/softsynth/fmtowns_pc98/towns_audio.h b/audio/softsynth/fmtowns_pc98/towns_audio.h index b00243f610..4af888f009 100644 --- a/audio/softsynth/fmtowns_pc98/towns_audio.h +++ b/audio/softsynth/fmtowns_pc98/towns_audio.h @@ -35,7 +35,7 @@ public: class TownsAudioInterface { public: - TownsAudioInterface(Audio::Mixer *mixer, TownsAudioInterfacePluginDriver *driver); + TownsAudioInterface(Audio::Mixer *mixer, TownsAudioInterfacePluginDriver *driver, bool externalMutexHandling = false); ~TownsAudioInterface(); bool init(); @@ -48,13 +48,6 @@ public: // The first 6 bits are the 6 fm channels. The next 8 bits are pcm channels. void setSoundEffectChanMask(int mask); - // These methods should not be needed in standard situations, since the mutex - // is handled internally. However, they may be required to avoid lockup situations - // if the code using this class has a mutex of its own (example for a lockup - // situation: imuse.cpp, line 78). - void lockInternal(); - void unlockInternal(); - private: TownsAudioInterfaceInternal *_intf; }; diff --git a/audio/softsynth/fmtowns_pc98/towns_midi.cpp b/audio/softsynth/fmtowns_pc98/towns_midi.cpp index 00f0d43b98..071a697615 100644 --- a/audio/softsynth/fmtowns_pc98/towns_midi.cpp +++ b/audio/softsynth/fmtowns_pc98/towns_midi.cpp @@ -833,8 +833,9 @@ const uint8 TownsMidiInputChannel::_programAdjustLevel[] = { }; MidiDriver_TOWNS::MidiDriver_TOWNS(Audio::Mixer *mixer) : _timerProc(0), _timerProcPara(0), _channels(0), _out(0), - _chanState(0), _operatorLevelTable(0), _tickCounter1(0), _tickCounter2(0), _rand(1), _allocCurPos(0), _isOpen(false) { - _intf = new TownsAudioInterface(mixer, this); + _baseTempo(10080), _chanState(0), _operatorLevelTable(0), _tickCounter(0), _rand(1), _allocCurPos(0), _isOpen(false) { + // We set exteral mutex handling to true to avoid lockups in SCUMM which has its own mutex. + _intf = new TownsAudioInterface(mixer, this, true); _channels = new TownsMidiInputChannel*[32]; for (int i = 0; i < 32; i++) @@ -956,7 +957,7 @@ void MidiDriver_TOWNS::setTimerCallback(void *timer_param, Common::TimerManager: } uint32 MidiDriver_TOWNS::getBaseTempo() { - return 10080; + return _baseTempo; } MidiChannel *MidiDriver_TOWNS::allocateChannel() { @@ -984,12 +985,6 @@ void MidiDriver_TOWNS::timerCallback(int timerId) { case 1: updateParser(); updateOutputChannels(); - - /*_tickCounter1 += 10000; - while (_tickCounter1 >= 4167) { - _tickCounter1 -= 4167; - unkUpdate(); - }*/ break; default: break; @@ -1002,9 +997,9 @@ void MidiDriver_TOWNS::updateParser() { } void MidiDriver_TOWNS::updateOutputChannels() { - _tickCounter2 += 10000; - while (_tickCounter2 >= 16667) { - _tickCounter2 -= 16667; + _tickCounter += _baseTempo; + while (_tickCounter >= 16667) { + _tickCounter -= 16667; for (int i = 0; i < 6; i++) { if (_out[i]->update()) return; diff --git a/audio/softsynth/fmtowns_pc98/towns_midi.h b/audio/softsynth/fmtowns_pc98/towns_midi.h index a98bb1b59c..9aa7c93b35 100644 --- a/audio/softsynth/fmtowns_pc98/towns_midi.h +++ b/audio/softsynth/fmtowns_pc98/towns_midi.h @@ -69,14 +69,15 @@ private: TownsAudioInterface *_intf; - uint32 _tickCounter1; - uint32 _tickCounter2; + uint32 _tickCounter; uint8 _allocCurPos; uint8 _rand; bool _isOpen; uint8 *_operatorLevelTable; + + const uint16 _baseTempo; }; #endif diff --git a/audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp b/audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp index ee20068e74..49fe97caf1 100644 --- a/audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp +++ b/audio/softsynth/fmtowns_pc98/towns_pc98_driver.cpp @@ -1054,6 +1054,8 @@ TownsPC98_AudioDriver::~TownsPC98_AudioDriver() { _ready = false; deinit(); + Common::StackLock lock(_mutex); + if (_channels) { for (int i = 0; i < _numChan; i++) delete _channels[i]; diff --git a/audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp b/audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp index 4336de9bdb..63007ba93c 100644 --- a/audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp +++ b/audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.cpp @@ -851,7 +851,7 @@ void TownsPC98_FmSynthPercussionSource::advanceInput(RhtChannel *ins) { } #endif // DISABLE_PC98_RHYTHM_CHANNEL -TownsPC98_FmSynth::TownsPC98_FmSynth(Audio::Mixer *mixer, EmuType type) : +TownsPC98_FmSynth::TownsPC98_FmSynth(Audio::Mixer *mixer, EmuType type, bool externalMutexHandling) : _mixer(mixer), _chanInternal(0), _ssg(0), #ifndef DISABLE_PC98_RHYTHM_CHANNEL @@ -861,7 +861,8 @@ TownsPC98_FmSynth::TownsPC98_FmSynth(Audio::Mixer *mixer, EmuType type) : _hasPercussion(type == kType86 ? true : false), _oprRates(0), _oprRateshift(0), _oprAttackDecay(0), _oprFrq(0), _oprSinTbl(0), _oprLevelOut(0), _oprDetune(0), _rtt(type == kTypeTowns ? 0x514767 : 0x5B8D80), _baserate(55125.0f / (float)mixer->getOutputRate()), - _volMaskA(0), _volMaskB(0), _volumeA(255), _volumeB(255), _regProtectionFlag(false), _ready(false) { + _volMaskA(0), _volMaskB(0), _volumeA(255), _volumeB(255), + _regProtectionFlag(false), _externalMutex(externalMutexHandling), _ready(false) { memset(&_timers[0], 0, sizeof(ChipTimer)); memset(&_timers[1], 0, sizeof(ChipTimer)); @@ -874,6 +875,8 @@ TownsPC98_FmSynth::~TownsPC98_FmSynth() { if (_ready) deinit(); + Common::StackLock lock(_mutex); + delete _ssg; #ifndef DISABLE_PC98_RHYTHM_CHANNEL delete _prc; @@ -1147,7 +1150,7 @@ int TownsPC98_FmSynth::readBuffer(int16 *buffer, const int numSamples) { bool locked = false; if (_ready) { - mutexLock(); + _mutex.lock(); locked = true; } @@ -1157,7 +1160,19 @@ int TownsPC98_FmSynth::readBuffer(int16 *buffer, const int numSamples) { for (int i = 0; i < 2; i++) { if (_timers[i].enabled && _timers[i].cb) { if (!_timers[i].smpTillCb) { + + if (locked && _externalMutex) { + _mutex.unlock(); + locked = false; + } + (this->*_timers[i].cb)(); + + if (!locked && _externalMutex) { + _mutex.lock(); + locked = true; + } + _timers[i].smpTillCb = _timers[i].smpPerCb; _timers[i].smpTillCbRem += _timers[i].smpPerCbRem; @@ -1201,7 +1216,7 @@ int TownsPC98_FmSynth::readBuffer(int16 *buffer, const int numSamples) { } if (locked) - mutexUnlock(); + _mutex.unlock(); delete[] tmpStart; @@ -1220,14 +1235,6 @@ int TownsPC98_FmSynth::getRate() const { return _mixer->getOutputRate(); } -void TownsPC98_FmSynth::mutexLock() { - _mutex.lock(); -} - -void TownsPC98_FmSynth::mutexUnlock() { - _mutex.unlock(); -} - void TownsPC98_FmSynth::deinit() { _ready = false; _mixer->stopHandle(_soundHandle); @@ -1235,6 +1242,10 @@ void TownsPC98_FmSynth::deinit() { _timers[0].cb = _timers[1].cb = &TownsPC98_FmSynth::idleTimerCallback; } +void TownsPC98_FmSynth::toggleRegProtection(bool prot) { + _regProtectionFlag = prot; +} + uint8 TownsPC98_FmSynth::readSSGStatus() { return _ssg->chanEnable(); } diff --git a/audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.h b/audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.h index 6ea9815a72..4f81fa9a5c 100644 --- a/audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.h +++ b/audio/softsynth/fmtowns_pc98/towns_pc98_fmsynth.h @@ -59,7 +59,7 @@ public: kType86 }; - TownsPC98_FmSynth(Audio::Mixer *mixer, EmuType type); + TownsPC98_FmSynth(Audio::Mixer *mixer, EmuType type, bool externalMutexHandling = false); virtual ~TownsPC98_FmSynth(); virtual bool init(); @@ -73,9 +73,6 @@ public: bool endOfData() const; int getRate() const; - void mutexLock(); - void mutexUnlock(); - protected: void deinit(); @@ -83,17 +80,15 @@ protected: // additional output that has to be inserted into the buffer. virtual void nextTickEx(int32 *buffer, uint32 bufferSize) {} - void toggleRegProtection(bool prot) { - _regProtectionFlag = prot; - } + void toggleRegProtection(bool prot); uint8 readSSGStatus(); virtual void timerCallbackA() = 0; virtual void timerCallbackB() = 0; - // The audio driver can store and apply two different audio settings + // The audio driver can store and apply two different volume settings // (usually for music and sound effects). The channel mask will determine - // which channels get effected by the setting. The first bits will be + // which channels get effected by which setting. The first bits will be // the normal fm channels, the next bits the ssg channels and the final // bit the rhythm channel. void setVolumeIntern(int volA, int volB); @@ -104,6 +99,7 @@ protected: const bool _hasPercussion; Common::Mutex _mutex; + bool _externalMutex; private: void generateTables(); diff --git a/audio/softsynth/mt32.cpp b/audio/softsynth/mt32.cpp index a9a612f410..6d13ec33b4 100644 --- a/audio/softsynth/mt32.cpp +++ b/audio/softsynth/mt32.cpp @@ -20,6 +20,7 @@ */ #include "common/scummsys.h" +#include "common/system.h" #ifdef USE_MT32EMU @@ -63,7 +64,7 @@ protected: void generateSamples(int16 *buf, int len); public: - bool _initialising; + bool _initializing; MidiDriver_MT32(Audio::Mixer *mixer); virtual ~MidiDriver_MT32(); @@ -134,7 +135,7 @@ static int eatSystemEvents() { } static void drawProgress(float progress) { - const Graphics::Font &font(*FontMan.getFontByUsage(Graphics::FontManager::kOSDFont)); + const Graphics::Font &font(*FontMan.getFontByUsage(Graphics::FontManager::kGUIFont)); Graphics::Surface *screen = g_system->lockScreen(); assert(screen); @@ -173,7 +174,7 @@ static void drawProgress(float progress) { } static void drawMessage(int offset, const Common::String &text) { - const Graphics::Font &font(*FontMan.getFontByUsage(Graphics::FontManager::kOSDFont)); + const Graphics::Font &font(*FontMan.getFontByUsage(Graphics::FontManager::kGUIFont)); Graphics::Surface *screen = g_system->lockScreen(); assert(screen); @@ -215,7 +216,7 @@ static MT32Emu::File *MT32_OpenFile(void *userData, const char *filename, MT32Em } static void MT32_PrintDebug(void *userData, const char *fmt, va_list list) { - if (((MidiDriver_MT32 *)userData)->_initialising) { + if (((MidiDriver_MT32 *)userData)->_initializing) { char buf[512]; vsnprintf(buf, 512, fmt, list); @@ -239,7 +240,7 @@ static int MT32_Report(void *userData, MT32Emu::ReportType type, const void *rep error("Failed to load MT32_PCM.ROM"); break; case MT32Emu::ReportType_progressInit: - if (((MidiDriver_MT32 *)userData)->_initialising) { + if (((MidiDriver_MT32 *)userData)->_initializing) { drawProgress(*((const float *)reportData)); return eatSystemEvents(); } @@ -283,7 +284,7 @@ MidiDriver_MT32::MidiDriver_MT32(Audio::Mixer *mixer) : MidiDriver_Emulated(mixe // at rates other than 32KHz, thus we produce data at 32KHz and // rely on Mixer to convert. _outputRate = 32000; //_mixer->getOutputRate(); - _initialising = false; + _initializing = false; } MidiDriver_MT32::~MidiDriver_MT32() { @@ -324,11 +325,11 @@ int MidiDriver_MT32::open() { g_system->getPaletteManager()->setPalette(dummy_palette, 0, 3); } - _initialising = true; - drawMessage(-1, _s("Initialising MT-32 Emulator")); + _initializing = true; + drawMessage(-1, _s("Initializing MT-32 Emulator")); if (!_synth->open(prop)) return MERR_DEVICE_NOT_AVAILABLE; - _initialising = false; + _initializing = false; if (screenFormat.bytesPerPixel > 1) g_system->fillScreen(screenFormat.RGBToColor(0, 0, 0)); @@ -547,6 +548,7 @@ public: } MusicDevices getDevices() const; + bool checkDevice(MidiDriver::DeviceHandle) const; Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; }; @@ -556,6 +558,16 @@ MusicDevices MT32EmuMusicPlugin::getDevices() const { return devices; } +bool MT32EmuMusicPlugin::checkDevice(MidiDriver::DeviceHandle) const { + if (!((Common::File::exists("MT32_CONTROL.ROM") && Common::File::exists("MT32_PCM.ROM")) || + (Common::File::exists("CM32L_CONTROL.ROM") && Common::File::exists("CM32L_PCM.ROM")))) { + warning("The MT-32 emulator requires one of the two following file sets (not bundled with ScummVM):\n Either 'MT32_CONTROL.ROM' and 'MT32_PCM.ROM' or 'CM32L_CONTROL.ROM' and 'CM32L_PCM.ROM'"); + return false; + } + + return true; +} + Common::Error MT32EmuMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { if (ConfMan.hasKey("extrapath")) SearchMan.addDirectory("extrapath", ConfMan.get("extrapath")); diff --git a/audio/softsynth/mt32/partial.cpp b/audio/softsynth/mt32/partial.cpp index d06634dc91..c4f2e94ebe 100644 --- a/audio/softsynth/mt32/partial.cpp +++ b/audio/softsynth/mt32/partial.cpp @@ -164,7 +164,7 @@ void Partial::startPartial(dpoly *usePoly, const PatchCache *useCache, Partial * structurePosition = patchCache->structurePosition; play = true; - initKeyFollow(poly->freqnum); // Initialises noteVal, filtVal and realVal + initKeyFollow(poly->freqnum); // Initializes noteVal, filtVal and realVal #if MT32EMU_ACCURATENOTES == 0 noteLookup = &synth->tables.noteLookups[noteVal - LOWEST_NOTE]; #else diff --git a/audio/softsynth/mt32/synth.cpp b/audio/softsynth/mt32/synth.cpp index 5e74b262ae..322b864b6e 100644 --- a/audio/softsynth/mt32/synth.cpp +++ b/audio/softsynth/mt32/synth.cpp @@ -426,36 +426,36 @@ bool Synth::open(SynthProperties &useProp) { } } - printDebug("Initialising Timbre Bank A"); + printDebug("Initializing Timbre Bank A"); if (!initTimbres(controlROMMap->timbreAMap, controlROMMap->timbreAOffset, 0)) { return false; } - printDebug("Initialising Timbre Bank B"); + printDebug("Initializing Timbre Bank B"); if (!initTimbres(controlROMMap->timbreBMap, controlROMMap->timbreBOffset, 64)) { return false; } - printDebug("Initialising Timbre Bank R"); + printDebug("Initializing Timbre Bank R"); if (!initRhythmTimbres(controlROMMap->timbreRMap, controlROMMap->timbreRCount)) { return false; } - printDebug("Initialising Timbre Bank M"); - // CM-64 seems to initialise all bytes in this bank to 0. + printDebug("Initializing Timbre Bank M"); + // CM-64 seems to initialize all bytes in this bank to 0. memset(&mt32ram.timbres[128], 0, sizeof (mt32ram.timbres[128]) * 64); partialManager = new PartialManager(this); pcmWaves = new PCMWaveEntry[controlROMMap->pcmCount]; - printDebug("Initialising PCM List"); + printDebug("Initializing PCM List"); initPCMList(controlROMMap->pcmTable, controlROMMap->pcmCount); - printDebug("Initialising Rhythm Temp"); + printDebug("Initializing Rhythm Temp"); memcpy(mt32ram.rhythmSettings, &controlROMData[controlROMMap->rhythmSettings], controlROMMap->rhythmSettingsCount * 4); - printDebug("Initialising Patches"); + printDebug("Initializing Patches"); for (Bit8u i = 0; i < 128; i++) { PatchParam *patch = &mt32ram.patches[i]; patch->timbreGroup = i / 64; @@ -468,9 +468,9 @@ bool Synth::open(SynthProperties &useProp) { patch->dummy = 0; } - printDebug("Initialising System"); + printDebug("Initializing System"); // The MT-32 manual claims that "Standard pitch" is 442Hz. - mt32ram.system.masterTune = 0x40; // Confirmed on CM-64 as 0x4A, but SCUMM games use 0x40 and we don't want to initialise twice + mt32ram.system.masterTune = 0x40; // Confirmed on CM-64 as 0x4A, but SCUMM games use 0x40 and we don't want to initialize twice mt32ram.system.reverbMode = 0; // Confirmed mt32ram.system.reverbTime = 5; // Confirmed mt32ram.system.reverbLevel = 3; // Confirmed @@ -792,7 +792,7 @@ void Synth::writeSysex(unsigned char device, const Bit8u *sysex, Bit32u len) { for (;;) { // Find the appropriate memory region int regionNum; - const MemoryRegion *region = NULL; // Initialised to please compiler + const MemoryRegion *region = NULL; // Initialized to please compiler for (regionNum = 0; regionNum < NUM_REGIONS; regionNum++) { region = &memoryRegions[regionNum]; if (region->contains(addr)) { diff --git a/audio/softsynth/mt32/synth.h b/audio/softsynth/mt32/synth.h index edda446287..0ef2c9d135 100644 --- a/audio/softsynth/mt32/synth.h +++ b/audio/softsynth/mt32/synth.h @@ -263,7 +263,7 @@ public: Synth(); ~Synth(); - // Used to initialise the MT-32. Must be called before any other function. + // Used to initialize the MT-32. Must be called before any other function. // Returns true if initialization was sucessful, otherwise returns false. bool open(SynthProperties &useProp); diff --git a/audio/softsynth/mt32/tables.cpp b/audio/softsynth/mt32/tables.cpp index 25ee0436db..9fdb595467 100644 --- a/audio/softsynth/mt32/tables.cpp +++ b/audio/softsynth/mt32/tables.cpp @@ -203,7 +203,7 @@ void Tables::initEnvelopes(float samplerate) { void Tables::initMT32ConstantTables(Synth *synth) { int lf; - synth->printDebug("Initialising Pitch Tables"); + synth->printDebug("Initializing Pitch Tables"); for (lf = -108; lf <= 108; lf++) { tvfKeyfollowMult[lf + 108] = (int)(256 * powf(2.0f, (float)(lf / 24.0f))); //synth->printDebug("KT %d = %d", f, keytable[f+108]); @@ -668,7 +668,7 @@ bool Tables::initNotes(Synth *synth, PCMWaveEntry *pcmWaves, float rate, float m bool abort = false; synth->report(ReportType_progressInit, &progress); for (int f = LOWEST_NOTE; f <= HIGHEST_NOTE; f++) { - synth->printDebug("Initialising note %s%d", NoteNames[f % 12], (f / 12) - 2); + synth->printDebug("Initializing note %s%d", NoteNames[f % 12], (f / 12) - 2); NoteLookup *noteLookup = ¬eLookups[f - LOWEST_NOTE]; file = initNote(synth, noteLookup, (float)f, rate, masterTune, pcmWaves, file); progress = (f - LOWEST_NOTE + 1) / (float)NUM_NOTES; @@ -723,12 +723,12 @@ void Tables::freeNotes() { } } } - initialisedMasterTune = 0.0f; + initializedMasterTune = 0.0f; } Tables::Tables() { - initialisedSampleRate = 0.0f; - initialisedMasterTune = 0.0f; + initializedSampleRate = 0.0f; + initializedMasterTune = 0.0f; memset(¬eLookups, 0, sizeof(noteLookups)); } @@ -737,23 +737,23 @@ bool Tables::init(Synth *synth, PCMWaveEntry *pcmWaves, float sampleRate, float synth->printDebug("Bad sampleRate (%f <= 0.0f)", (double)sampleRate); return false; } - if (initialisedSampleRate == 0.0f) { + if (initializedSampleRate == 0.0f) { initMT32ConstantTables(synth); } - if (initialisedSampleRate != sampleRate) { + if (initializedSampleRate != sampleRate) { initFiltCoeff(sampleRate); initEnvelopes(sampleRate); for (int key = 12; key <= 108; key++) { initDep(&keyLookups[key - 12], (float)key); } } - if (initialisedSampleRate != sampleRate || initialisedMasterTune != masterTune) { + if (initializedSampleRate != sampleRate || initializedMasterTune != masterTune) { freeNotes(); if (!initNotes(synth, pcmWaves, sampleRate, masterTune)) { return false; } - initialisedSampleRate = sampleRate; - initialisedMasterTune = masterTune; + initializedSampleRate = sampleRate; + initializedMasterTune = masterTune; } return true; } diff --git a/audio/softsynth/mt32/tables.h b/audio/softsynth/mt32/tables.h index d9af5114b2..9950323e7b 100644 --- a/audio/softsynth/mt32/tables.h +++ b/audio/softsynth/mt32/tables.h @@ -69,8 +69,8 @@ struct KeyLookup { }; class Tables { - float initialisedSampleRate; - float initialisedMasterTune; + float initializedSampleRate; + float initializedMasterTune; void initMT32ConstantTables(Synth *synth); static Bit16s clampWF(Synth *synth, const char *n, float ampVal, double input); static File *initWave(Synth *synth, NoteLookup *noteLookup, float ampsize, float div2, File *file); diff --git a/audio/softsynth/opl/mame.cpp b/audio/softsynth/opl/mame.cpp index 9cc35971eb..74699ba4c6 100644 --- a/audio/softsynth/opl/mame.cpp +++ b/audio/softsynth/opl/mame.cpp @@ -754,8 +754,10 @@ static int OPLOpenTable(void) { } static void OPLCloseTable(void) { +#ifndef __DS__ free(TL_TABLE); free(SIN_TABLE); +#endif free(AMS_TABLE); free(VIB_TABLE); free(ENV_CURVE); diff --git a/backends/audiocd/audiocd.h b/backends/audiocd/audiocd.h index a4aeb41e74..92b7598cb5 100644 --- a/backends/audiocd/audiocd.h +++ b/backends/audiocd/audiocd.h @@ -108,7 +108,7 @@ public: //@{ /** - * Initialise the specified CD drive for audio playback. + * Initialize the specified CD drive for audio playback. * @param drive the drive id * @return true if the CD drive was inited succesfully */ diff --git a/backends/base-backend.cpp b/backends/base-backend.cpp index f3935b5893..8d22ab732d 100644 --- a/backends/base-backend.cpp +++ b/backends/base-backend.cpp @@ -18,11 +18,22 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + * $URL$ + * $Id$ + * */ #include "backends/base-backend.h" + +#ifndef DISABLE_DEFAULT_EVENT_MANAGER #include "backends/events/default/default-events.h" +#endif + +#ifndef DISABLE_DEFAULT_AUDIOCD_MANAGER #include "backends/audiocd/default/default-audiocd.h" +#endif + + #include "gui/message.h" void BaseBackend::displayMessageOnOSD(const char *msg) { @@ -31,16 +42,20 @@ void BaseBackend::displayMessageOnOSD(const char *msg) { dialog.runModal(); } +void BaseBackend::initBackend() { + // Init Event manager +#ifndef DISABLE_DEFAULT_EVENT_MANAGER + if (!_eventManager) + _eventManager = new DefaultEventManager(getDefaultEventSource()); +#endif -static Common::EventManager *s_eventManager = 0; + // Init audio CD manager +#ifndef DISABLE_DEFAULT_AUDIOCD_MANAGER + if (!_audiocdManager) + _audiocdManager = new DefaultAudioCDManager(); +#endif -Common::EventManager *BaseBackend::getEventManager() { - // FIXME/TODO: Eventually this method should be turned into an abstract one, - // to force backends to implement this conciously (even if they - // end up returning the default event manager anyway). - if (!s_eventManager) - s_eventManager = new DefaultEventManager(this); - return s_eventManager; + OSystem::initBackend(); } void BaseBackend::fillScreen(uint32 col) { @@ -49,49 +64,3 @@ void BaseBackend::fillScreen(uint32 col) { memset(screen->pixels, col, screen->h * screen->pitch); unlockScreen(); } - - -/* - FIXME: Maybe we should push the default config file loading/saving code below - out to all the backends? -*/ - - -#if defined(UNIX) -#define DEFAULT_CONFIG_FILE ".scummvmrc" -#endif - -#if !defined(UNIX) -#define DEFAULT_CONFIG_FILE "scummvm.ini" -#endif - -BaseBackend::BaseBackend() { - _audiocdManager = 0; -} - -BaseBackend::~BaseBackend() { - delete _audiocdManager; -} - -Common::SeekableReadStream *BaseBackend::createConfigReadStream() { - Common::FSNode file(DEFAULT_CONFIG_FILE); - return file.createReadStream(); -} - -Common::WriteStream *BaseBackend::createConfigWriteStream() { -#ifdef __DC__ - return 0; -#else - Common::FSNode file(DEFAULT_CONFIG_FILE); - return file.createWriteStream(); -#endif -} - -AudioCDManager *BaseBackend::getAudioCDManager() { - if (!_audiocdManager) - _audiocdManager = new DefaultAudioCDManager(); - return _audiocdManager; -} - -void BaseBackend::resetGraphicsScale() { -} diff --git a/backends/base-backend.h b/backends/base-backend.h index 864c11544a..c797e831a8 100644 --- a/backends/base-backend.h +++ b/backends/base-backend.h @@ -24,26 +24,22 @@ #define BACKENDS_BASE_BACKEND_H #include "common/system.h" -#include "backends/events/default/default-events.h" +#include "common/events.h" -class BaseBackend : public OSystem, Common::EventSource { +class BaseBackend : public OSystem { +protected: + virtual Common::EventSource *getDefaultEventSource() = 0; public: - BaseBackend(); - ~BaseBackend(); + virtual void initBackend(); - virtual Common::EventManager *getEventManager(); virtual void displayMessageOnOSD(const char *msg); virtual void fillScreen(uint32 col); +}; - virtual Common::SeekableReadStream *createConfigReadStream(); - virtual Common::WriteStream *createConfigWriteStream(); - - virtual AudioCDManager *getAudioCDManager(); - - virtual void resetGraphicsScale(); - +class EventsBaseBackend : public BaseBackend, Common::EventSource { protected: - AudioCDManager *_audiocdManager; + virtual Common::EventSource *getDefaultEventSource() { return this; } +public: }; diff --git a/backends/events/default/default-events.cpp b/backends/events/default/default-events.cpp index bb74933596..78072b0021 100644 --- a/backends/events/default/default-events.cpp +++ b/backends/events/default/default-events.cpp @@ -26,6 +26,7 @@ #include "common/system.h" #include "common/config-manager.h" +#include "common/translation.h" #include "backends/events/default/default-events.h" #include "backends/keymapper/keymapper.h" #include "backends/keymapper/remap-dialog.h" @@ -218,7 +219,7 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { if (ConfMan.getBool("confirm_exit")) { if (g_engine) g_engine->pauseEngine(true); - GUI::MessageDialog alert("Do you really want to return to the Launcher?", "Launcher", "Cancel"); + GUI::MessageDialog alert(_("Do you really want to return to the Launcher?"), _("Launcher"), _("Cancel")); result = _shouldRTL = (alert.runModal() == GUI::kMessageOK); if (g_engine) g_engine->pauseEngine(false); @@ -240,7 +241,7 @@ bool DefaultEventManager::pollEvent(Common::Event &event) { _confirmExitDialogActive = true; if (g_engine) g_engine->pauseEngine(true); - GUI::MessageDialog alert("Do you really want to quit?", "Quit", "Cancel"); + GUI::MessageDialog alert(_("Do you really want to quit?"), _("Quit"), _("Cancel")); result = _shouldQuit = (alert.runModal() == GUI::kMessageOK); if (g_engine) g_engine->pauseEngine(false); diff --git a/backends/events/gp2xsdl/gp2xsdl-events.cpp b/backends/events/gp2xsdl/gp2xsdl-events.cpp deleted file mode 100644 index 86d4de384f..0000000000 --- a/backends/events/gp2xsdl/gp2xsdl-events.cpp +++ /dev/null @@ -1,463 +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 "common/scummsys.h" - -#if defined(GP2X_OLD) - -#include "backends/events/gp2xsdl/gp2xsdl-events.h" -#include "backends/platform/gp2x/gp2x-hw.h" -#include "backends/graphics/gp2xsdl/gp2xsdl-graphics.h" - -#include "backends/platform/sdl/sdl.h" - -// FIXME move joystick defines out and replace with confile file options -// we should really allow users to map any key to a joystick button using the keymapper. -#define JOY_DEADZONE 2200 - -#define JOY_XAXIS 0 -#define JOY_YAXIS 1 - -/* Quick default button states for modifiers. */ -int BUTTON_STATE_L = false; - -enum { - /* DPAD/Stick */ - BUTTON_UP = 0, - BUTTON_UPLEFT = 1, - BUTTON_LEFT = 2, - BUTTON_DOWNLEFT = 3, - BUTTON_DOWN = 4, - BUTTON_DOWNRIGHT = 5, - BUTTON_RIGHT = 6, - BUTTON_UPRIGHT = 7, - /* Joystick Buttons */ - BUTTON_MENU = 8, // Start on F100 GP2X - BUTTON_SELECT = 9, - BUTTON_L = 10, - BUTTON_R = 11, - BUTTON_A = 12, - BUTTON_B = 13, - BUTTON_X = 14, - BUTTON_Y = 15, - BUTTON_VOLUP = 16, - BUTTON_VOLDOWN = 17, - BUTTON_CLICK = 18 -}; - -enum { - /* Unused Joystick Buttons on the GP2X */ - BUTTON_HOME = 51, - BUTTON_HOLD = 52, - BUTTON_HELP = 53, - BUTTON_HELP2 = 54 -}; - -enum { - /* Touchscreen TapMode */ - TAPMODE_LEFT = 0, - TAPMODE_RIGHT = 1, - TAPMODE_HOVER = 2 -}; - -GP2XSdlEventSource::GP2XSdlEventSource() - : _buttonStateL(false){ -} - -void GP2XSdlEventSource::SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event) { - event.kbd.flags = 0; - - if (mod & KMOD_SHIFT) - event.kbd.flags |= Common::KBD_SHIFT; - if (mod & KMOD_ALT) - event.kbd.flags |= Common::KBD_ALT; - if (mod & KMOD_CTRL) - event.kbd.flags |= Common::KBD_CTRL; - - // Sticky flags - if (mod & KMOD_NUM) - event.kbd.flags |= Common::KBD_NUM; - if (mod & KMOD_CAPS) - event.kbd.flags |= Common::KBD_CAPS; -} - -void GP2XSdlEventSource::moveStick() { - bool stickBtn[32]; - - memcpy(stickBtn, _stickBtn, sizeof(stickBtn)); - - if ((stickBtn[0])||(stickBtn[2])||(stickBtn[4])||(stickBtn[6])) - stickBtn[1] = stickBtn[3] = stickBtn[5] = stickBtn[7] = 0; - - if ((stickBtn[1])||(stickBtn[2])||(stickBtn[3])) { - if (_km.x_down_count!=2) { - _km.x_vel = -1; - _km.x_down_count = 1; - } else - _km.x_vel = -4; - } else if ((stickBtn[5])||(stickBtn[6])||(stickBtn[7])) { - if (_km.x_down_count!=2) { - _km.x_vel = 1; - _km.x_down_count = 1; - } else - _km.x_vel = 4; - } else { - _km.x_vel = 0; - _km.x_down_count = 0; - } - - if ((stickBtn[0])||(stickBtn[1])||(stickBtn[7])) { - if (_km.y_down_count!=2) { - _km.y_vel = -1; - _km.y_down_count = 1; - } else - _km.y_vel = -4; - } else if ((stickBtn[3])||(stickBtn[4])||(stickBtn[5])) { - if (_km.y_down_count!=2) { - _km.y_vel = 1; - _km.y_down_count = 1; - } else - _km.y_vel = 4; - } else { - _km.y_vel = 0; - _km.y_down_count = 0; - } -} - -/* GP2X Input mappings. -Single Button - -Movement: - -GP2X_BUTTON_UP Cursor Up -GP2X_BUTTON_DOWN Cursor Down -GP2X_BUTTON_LEFT Cursor Left -GP2X_BUTTON_RIGHT Cursor Right - -GP2X_BUTTON_UPLEFT Cursor Up Left -GP2X_BUTTON_UPRIGHT Cursor Up Right -GP2X_BUTTON_DOWNLEFT Cursor Down Left -GP2X_BUTTON_DOWNRIGHT Cursor Down Right - -Button Emulation: - -GP2X_BUTTON_CLICK Left Mouse Click (GP2X only) -GP2X_BUTTON_A . (Period) -GP2X_BUTTON_B Left Mouse Click -GP2X_BUTTON_Y Space Bar -GP2X_BUTTON_X Right Mouse Click -GP2X_BUTTON_L Combo Modifier (Left Trigger) -GP2X_BUTTON_R Return (Right Trigger) -GP2X_BUTTON_MENU F5 (Game Menu) -GP2X_BUTTON_SELECT Escape -GP2X_BUTTON_VOLUP /dev/mixer Global Volume Up -GP2X_BUTTON_VOLDOWN /dev/mixer Global Volume Down - -Combos: - -GP2X_BUTTON_VOLUP & GP2X_BUTTON_VOLDOWN 0 (For Monkey 2 CP) or Virtual Keyboard if enabled -GP2X_BUTTON_L & GP2X_BUTTON_SELECT Common::EVENT_QUIT (Calls Sync() to make sure SD is flushed) -GP2X_BUTTON_L & GP2X_BUTTON_MENU Common::EVENT_MAINMENU (ScummVM Global Main Menu) -GP2X_BUTTON_L & GP2X_BUTTON_A Common::EVENT_PREDICTIVE_DIALOG for predictive text entry box (AGI games) -GP2X_BUTTON_L & GP2X_BUTTON_Y Toggles setZoomOnMouse() for larger then 320*240 games to scale to the point + raduis. (GP2X only) -*/ - -bool GP2XSdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) { - SDLModToOSystemKeyFlags(SDL_GetModState(), event); - - if (remapKey(ev, event)) - return true; - - event.type = Common::EVENT_KEYDOWN; - event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym; - event.kbd.ascii = mapKey(ev.key.keysym.sym, ev.key.keysym.mod, ev.key.keysym.unicode); - - return true; -} - -bool GP2XSdlEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) { - - _stickBtn[ev.jbutton.button] = 1; - event.kbd.flags = 0; - - switch (ev.jbutton.button) { - case BUTTON_UP: - case BUTTON_UPLEFT: - case BUTTON_LEFT: - case BUTTON_DOWNLEFT: - case BUTTON_DOWN: - case BUTTON_DOWNRIGHT: - case BUTTON_RIGHT: - case BUTTON_UPRIGHT: - moveStick(); - event.type = Common::EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - break; - case BUTTON_B: - case BUTTON_CLICK: - if (BUTTON_STATE_L == true) { - ((GP2XSdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->toggleZoomOnMouse(); - fillMouseEvent(event, _km.x, _km.y); - } else { - event.type = Common::EVENT_LBUTTONDOWN; - fillMouseEvent(event, _km.x, _km.y); - } - break; - case BUTTON_X: - event.type = Common::EVENT_RBUTTONDOWN; - fillMouseEvent(event, _km.x, _km.y); - break; - case BUTTON_L: - BUTTON_STATE_L = true; - break; - case BUTTON_R: - event.type = Common::EVENT_KEYDOWN; - if (BUTTON_STATE_L == true) { -#ifdef ENABLE_VKEYBD - event.kbd.keycode = Common::KEYCODE_F7; - event.kbd.ascii = mapKey(SDLK_F7, ev.key.keysym.mod, 0); -#else - event.kbd.keycode = Common::KEYCODE_0; - event.kbd.ascii = mapKey(SDLK_0, ev.key.keysym.mod, 0); -#endif - } else { - event.kbd.keycode = Common::KEYCODE_RETURN; - event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0); - } - break; - case BUTTON_SELECT: - case BUTTON_HOME: - event.type = Common::EVENT_KEYDOWN; - if (BUTTON_STATE_L == true) { - event.type = Common::EVENT_QUIT; - } else { - event.kbd.keycode = Common::KEYCODE_ESCAPE; - event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0); - } - break; - case BUTTON_A: - event.type = Common::EVENT_KEYDOWN; - if (BUTTON_STATE_L == true) { - event.type = Common::EVENT_PREDICTIVE_DIALOG; - } else { - event.kbd.keycode = Common::KEYCODE_PERIOD; - event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0); - } - break; - case BUTTON_Y: - event.type = Common::EVENT_KEYDOWN; - if (BUTTON_STATE_L == true) { - GPH::ToggleTapMode(); - if (GPH::tapmodeLevel == TAPMODE_LEFT) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode' - Left Click"); - } else if (GPH::tapmodeLevel == TAPMODE_RIGHT) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode' - Right Click"); - } else if (GPH::tapmodeLevel == TAPMODE_HOVER) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode' - Hover (No Click)"); - } - } else { - event.kbd.keycode = Common::KEYCODE_SPACE; - event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0); - } - break; - case BUTTON_MENU: - case BUTTON_HELP: - event.type = Common::EVENT_KEYDOWN; - if (BUTTON_STATE_L == true) { - event.type = Common::EVENT_MAINMENU; - } else { - event.kbd.keycode = Common::KEYCODE_F5; - event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0); - } - break; - case BUTTON_VOLUP: - GP2X_HW::mixerMoveVolume(2); - if (GP2X_HW::volumeLevel == 100) { - g_system->displayMessageOnOSD("Maximum Volume"); - } else { - g_system->displayMessageOnOSD("Increasing Volume"); - } - break; - - case BUTTON_VOLDOWN: - GP2X_HW::mixerMoveVolume(1); - if (GP2X_HW::volumeLevel == 0) { - g_system->displayMessageOnOSD("Minimal Volume"); - } else { - g_system->displayMessageOnOSD("Decreasing Volume"); - } - break; - case BUTTON_HOLD: - event.type = Common::EVENT_QUIT; - break; - case BUTTON_HELP2: - GPH::ToggleTapMode(); - if (GPH::tapmodeLevel == TAPMODE_LEFT) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode': Left Click"); - } else if (GPH::tapmodeLevel == TAPMODE_RIGHT) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode': Right Click"); - } else if (GPH::tapmodeLevel == TAPMODE_HOVER) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode': Hover (No Click)"); - } - break; - } - return true; -} - -bool GP2XSdlEventSource::handleJoyButtonUp(SDL_Event &ev, Common::Event &event) { - _stickBtn[ev.jbutton.button] = 0; - event.kbd.flags = 0; - - switch (ev.jbutton.button) { - case BUTTON_UP: - case BUTTON_UPLEFT: - case BUTTON_LEFT: - case BUTTON_DOWNLEFT: - case BUTTON_DOWN: - case BUTTON_DOWNRIGHT: - case BUTTON_RIGHT: - case BUTTON_UPRIGHT: - moveStick(); - event.type = Common::EVENT_MOUSEMOVE; - fillMouseEvent(event, _km.x, _km.y); - break; - case BUTTON_B: - case BUTTON_CLICK: - if (BUTTON_STATE_L == true) { - break; - } else { - event.type = Common::EVENT_LBUTTONUP; - fillMouseEvent(event, _km.x, _km.y); - } - break; - case BUTTON_X: - event.type = Common::EVENT_RBUTTONUP; - fillMouseEvent(event, _km.x, _km.y); - break; - case BUTTON_L: - BUTTON_STATE_L = false; - break; - case BUTTON_SELECT: - case BUTTON_HOME: - event.type = Common::EVENT_KEYUP; - event.kbd.keycode = Common::KEYCODE_ESCAPE; - event.kbd.ascii = mapKey(SDLK_ESCAPE, ev.key.keysym.mod, 0); - break; - case BUTTON_A: - event.type = Common::EVENT_KEYUP; - event.kbd.keycode = Common::KEYCODE_PERIOD; - event.kbd.ascii = mapKey(SDLK_PERIOD, ev.key.keysym.mod, 0); - break; - case BUTTON_Y: - event.type = Common::EVENT_KEYUP; - event.kbd.keycode = Common::KEYCODE_SPACE; - event.kbd.ascii = mapKey(SDLK_SPACE, ev.key.keysym.mod, 0); - break; - case BUTTON_MENU: - case BUTTON_HELP: - event.type = Common::EVENT_KEYUP; - if (BUTTON_STATE_L == true) { - event.type = Common::EVENT_MAINMENU; - } else { - event.kbd.keycode = Common::KEYCODE_F5; - event.kbd.ascii = mapKey(SDLK_F5, ev.key.keysym.mod, 0); - } - break; - case BUTTON_R: - event.type = Common::EVENT_KEYUP; - if (BUTTON_STATE_L == true) { -#ifdef ENABLE_VKEYBD - event.kbd.keycode = Common::KEYCODE_F7; - event.kbd.ascii = mapKey(SDLK_F7, ev.key.keysym.mod, 0); -#else - event.kbd.keycode = Common::KEYCODE_0; - event.kbd.ascii = mapKey(SDLK_0, ev.key.keysym.mod, 0); -#endif - } else { - event.kbd.keycode = Common::KEYCODE_RETURN; - event.kbd.ascii = mapKey(SDLK_RETURN, ev.key.keysym.mod, 0); - } - break; - case BUTTON_VOLUP: - break; - case BUTTON_VOLDOWN: - break; - case BUTTON_HOLD: - break; - case BUTTON_HELP2: - break; - } - return true; -} - -bool GP2XSdlEventSource::handleJoyAxisMotion(SDL_Event &ev, Common::Event &event) { - int axis = ev.jaxis.value; - if ( axis > JOY_DEADZONE) { - axis -= JOY_DEADZONE; - event.type = Common::EVENT_MOUSEMOVE; - } else if ( axis < -JOY_DEADZONE ) { - axis += JOY_DEADZONE; - event.type = Common::EVENT_MOUSEMOVE; - } else - axis = 0; - - if ( ev.jaxis.axis == JOY_XAXIS) { -#ifdef JOY_ANALOG - _km.x_vel = axis/2000; - _km.x_down_count = 0; -#else - if (axis != 0) { - _km.x_vel = (axis > 0) ? 1:-1; - _km.x_down_count = 1; - } else { - _km.x_vel = 0; - _km.x_down_count = 0; - } -#endif - - } else if (ev.jaxis.axis == JOY_YAXIS) { -#ifndef JOY_INVERT_Y - axis = -axis; -#endif -#ifdef JOY_ANALOG - _km.y_vel = -axis / 2000; - _km.y_down_count = 0; -#else - if (axis != 0) { - _km.y_vel = (-axis > 0) ? 1: -1; - _km.y_down_count = 1; - } else { - _km.y_vel = 0; - _km.y_down_count = 0; - } -#endif - } - - fillMouseEvent(event, _km.x, _km.y); - return true; -} - -bool GP2XSdlEventSource::remapKey(SDL_Event &ev, Common::Event &event) { - return false; -} - -#endif diff --git a/backends/events/gp2xsdl/gp2xsdl-events.h b/backends/events/gp2xsdl/gp2xsdl-events.h deleted file mode 100644 index 0d74c1bcac..0000000000 --- a/backends/events/gp2xsdl/gp2xsdl-events.h +++ /dev/null @@ -1,56 +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. - * - */ - -#if !defined(BACKEND_EVENTS_SDL_GP2X_H) && !defined(DISABLE_DEFAULT_EVENTMANAGER) -#define BACKEND_EVENTS_SDL_GP2X_H - -#include "backends/events/sdl/sdl-events.h" - -/** - * SDL events manager for GP2X - */ -class GP2XSdlEventSource : public SdlEventSource { -public: - GP2XSdlEventSource(); - -protected: - bool _stickBtn[32]; - - /** Button state for L button modifier */ - bool _buttonStateL; - - /** - * Handles the stick movement - */ - void moveStick(); - - virtual bool handleKeyDown(SDL_Event &ev, Common::Event &event); - virtual bool handleJoyButtonDown(SDL_Event &ev, Common::Event &event); - virtual bool handleJoyButtonUp(SDL_Event &ev, Common::Event &event); - virtual bool handleJoyAxisMotion(SDL_Event &ev, Common::Event &event); - - virtual void SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event); - - virtual bool remapKey(SDL_Event &ev, Common::Event &event); -}; - -#endif diff --git a/backends/events/gph/gph-events.cpp b/backends/events/gph/gph-events.cpp index d2b3483f84..b461f85fbb 100644 --- a/backends/events/gph/gph-events.cpp +++ b/backends/events/gph/gph-events.cpp @@ -34,6 +34,7 @@ #include "common/util.h" #include "common/events.h" +#include "common/translation.h" #define JOY_DEADZONE 2200 @@ -186,7 +187,6 @@ GPHEventSource::GPHEventSource() // } //} - void GPHEventSource::moveStick() { bool stickBtn[32]; @@ -363,11 +363,11 @@ bool GPHEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) { if (BUTTON_STATE_L == true) { GPH::ToggleTapMode(); if (GPH::tapmodeLevel == TAPMODE_LEFT) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode' - Left Click"); + g_system->displayMessageOnOSD(_("Touchscreen 'Tap Mode' - Left Click")); } else if (GPH::tapmodeLevel == TAPMODE_RIGHT) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode' - Right Click"); + g_system->displayMessageOnOSD(_("Touchscreen 'Tap Mode' - Right Click")); } else if (GPH::tapmodeLevel == TAPMODE_HOVER) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode' - Hover (No Click)"); + g_system->displayMessageOnOSD(_("Touchscreen 'Tap Mode' - Hover (No Click)")); } } else { event.kbd.keycode = Common::KEYCODE_SPACE; @@ -387,17 +387,17 @@ bool GPHEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) { case BUTTON_VOLUP: WIZ_HW::mixerMoveVolume(2); if (WIZ_HW::volumeLevel == 100) { - g_system->displayMessageOnOSD("Maximum Volume"); + g_system->displayMessageOnOSD(_("Maximum Volume")); } else { - g_system->displayMessageOnOSD("Increasing Volume"); + g_system->displayMessageOnOSD(_("Increasing Volume")); } break; case BUTTON_VOLDOWN: WIZ_HW::mixerMoveVolume(1); if (WIZ_HW::volumeLevel == 0) { - g_system->displayMessageOnOSD("Minimal Volume"); + g_system->displayMessageOnOSD(_("Minimal Volume")); } else { - g_system->displayMessageOnOSD("Decreasing Volume"); + g_system->displayMessageOnOSD(_("Decreasing Volume")); } break; case BUTTON_HOLD: @@ -406,11 +406,11 @@ bool GPHEventSource::handleJoyButtonDown(SDL_Event &ev, Common::Event &event) { case BUTTON_HELP2: GPH::ToggleTapMode(); if (GPH::tapmodeLevel == TAPMODE_LEFT) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode': Left Click"); + g_system->displayMessageOnOSD(_("Touchscreen 'Tap Mode' - Left Click")); } else if (GPH::tapmodeLevel == TAPMODE_RIGHT) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode': Right Click"); + g_system->displayMessageOnOSD(_("Touchscreen 'Tap Mode' - Right Click")); } else if (GPH::tapmodeLevel == TAPMODE_HOVER) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode': Hover (No Click)"); + g_system->displayMessageOnOSD(_("Touchscreen 'Tap Mode' - Hover (No Click)")); } break; } diff --git a/backends/events/openpandora/op-events.cpp b/backends/events/openpandora/op-events.cpp index 381cbf89e9..72bc56c95d 100644 --- a/backends/events/openpandora/op-events.cpp +++ b/backends/events/openpandora/op-events.cpp @@ -24,7 +24,6 @@ /* * OpenPandora: Device Specific Event Handling. - * */ #if defined(OPENPANDORA) @@ -34,6 +33,10 @@ #include "backends/platform/openpandora/op-sdl.h" #include "backends/platform/openpandora/op-options.h" +#include "common/translation.h" +#include "common/util.h" +#include "common/events.h" + /* Quick default button states for modifiers. */ int BUTTON_STATE_L = false; @@ -48,6 +51,68 @@ OPEventSource::OPEventSource() : _buttonStateL(false){ } +/* Custom handleMouseButtonDown/handleMouseButtonUp to deal with 'Tap Mode' for the touchscreen */ + +bool OPEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) { + if (ev.button.button == SDL_BUTTON_LEFT){ + if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */ + event.type = Common::EVENT_RBUTTONDOWN; + else if (OP::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */ + event.type = Common::EVENT_LBUTTONDOWN; + else if (OP::tapmodeLevel == TAPMODE_RIGHT) /* TAPMODE_RIGHT = Right Click Tap Mode */ + event.type = Common::EVENT_RBUTTONDOWN; + else if (OP::tapmodeLevel == TAPMODE_HOVER) /* TAPMODE_HOVER = Hover (No Click) Tap Mode */ + event.type = Common::EVENT_MOUSEMOVE; + else + event.type = Common::EVENT_LBUTTONDOWN; /* For normal mice etc. */ + } + else if (ev.button.button == SDL_BUTTON_RIGHT) + event.type = Common::EVENT_RBUTTONDOWN; +#if defined(SDL_BUTTON_WHEELUP) && defined(SDL_BUTTON_WHEELDOWN) + else if (ev.button.button == SDL_BUTTON_WHEELUP) + event.type = Common::EVENT_WHEELUP; + else if (ev.button.button == SDL_BUTTON_WHEELDOWN) + event.type = Common::EVENT_WHEELDOWN; +#endif +#if defined(SDL_BUTTON_MIDDLE) + else if (ev.button.button == SDL_BUTTON_MIDDLE) + event.type = Common::EVENT_MBUTTONDOWN; +#endif + else + return false; + + fillMouseEvent(event, ev.button.x, ev.button.y); + + return true; +} + +bool OPEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) { + if (ev.button.button == SDL_BUTTON_LEFT){ + if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */ + event.type = Common::EVENT_RBUTTONUP; + else if (OP::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */ + event.type = Common::EVENT_LBUTTONUP; + else if (OP::tapmodeLevel == TAPMODE_RIGHT) /* TAPMODE_RIGHT = Right Click Tap Mode */ + event.type = Common::EVENT_RBUTTONUP; + else if (OP::tapmodeLevel == TAPMODE_HOVER) /* TAPMODE_HOVER = Hover (No Click) Tap Mode */ + event.type = Common::EVENT_MOUSEMOVE; + else + event.type = Common::EVENT_LBUTTONUP; /* For normal mice etc. */ + } + else if (ev.button.button == SDL_BUTTON_RIGHT) + event.type = Common::EVENT_RBUTTONUP; +#if defined(SDL_BUTTON_MIDDLE) + else if (ev.button.button == SDL_BUTTON_MIDDLE) + event.type = Common::EVENT_MBUTTONUP; +#endif + else + return false; + + fillMouseEvent(event, ev.button.x, ev.button.y); + + return true; +} + /* On the OpenPandora by default the ABXY and L/R Trigger buttons are returned by SDL as (A): SDLK_HOME (B): SDLK_END (X): SDLK_PAGEDOWN (Y): SDLK_PAGEUP (L): SDLK_RSHIFT (R): SDLK_RCTRL */ @@ -73,11 +138,11 @@ bool OPEventSource::remapKey(SDL_Event &ev, Common::Event &event) { case SDLK_PAGEUP: OP::ToggleTapMode(); if (OP::tapmodeLevel == TAPMODE_LEFT) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode' - Left Click"); + g_system->displayMessageOnOSD(_("Touchscreen 'Tap Mode' - Left Click")); } else if (OP::tapmodeLevel == TAPMODE_RIGHT) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode' - Right Click"); + g_system->displayMessageOnOSD(_("Touchscreen 'Tap Mode' - Right Click")); } else if (OP::tapmodeLevel == TAPMODE_HOVER) { - g_system->displayMessageOnOSD("Touchscreen 'Tap Mode' - Hover (No Click)"); + g_system->displayMessageOnOSD(_("Touchscreen 'Tap Mode' - Hover (No Click)")); } break; case SDLK_RSHIFT: @@ -122,65 +187,4 @@ bool OPEventSource::remapKey(SDL_Event &ev, Common::Event &event) { return false; } -/* Custom handleMouseButtonDown/handleMouseButtonUp to deal with 'Tap Mode' for the touchscreen */ - -bool OPEventSource::handleMouseButtonDown(SDL_Event &ev, Common::Event &event) { - if (ev.button.button == SDL_BUTTON_LEFT){ - if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */ - event.type = Common::EVENT_RBUTTONDOWN; - else if (OP::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */ - event.type = Common::EVENT_LBUTTONDOWN; - else if (OP::tapmodeLevel == TAPMODE_RIGHT) /* TAPMODE_RIGHT = Right Click Tap Mode */ - event.type = Common::EVENT_RBUTTONDOWN; - else if (OP::tapmodeLevel == TAPMODE_HOVER) /* TAPMODE_HOVER = Hover (No Click) Tap Mode */ - event.type = Common::EVENT_MOUSEMOVE; - else - event.type = Common::EVENT_LBUTTONDOWN; /* For normal mice etc. */ - } - else if (ev.button.button == SDL_BUTTON_RIGHT) - event.type = Common::EVENT_RBUTTONDOWN; -#if defined(SDL_BUTTON_WHEELUP) && defined(SDL_BUTTON_WHEELDOWN) - else if (ev.button.button == SDL_BUTTON_WHEELUP) - event.type = Common::EVENT_WHEELUP; - else if (ev.button.button == SDL_BUTTON_WHEELDOWN) - event.type = Common::EVENT_WHEELDOWN; -#endif -#if defined(SDL_BUTTON_MIDDLE) - else if (ev.button.button == SDL_BUTTON_MIDDLE) - event.type = Common::EVENT_MBUTTONDOWN; -#endif - else - return false; - - fillMouseEvent(event, ev.button.x, ev.button.y); - - return true; -} - -bool OPEventSource::handleMouseButtonUp(SDL_Event &ev, Common::Event &event) { - if (ev.button.button == SDL_BUTTON_LEFT){ - if (BUTTON_STATE_L == true) /* BUTTON_STATE_L = Left Trigger Held, force Right Click */ - event.type = Common::EVENT_RBUTTONUP; - else if (OP::tapmodeLevel == TAPMODE_LEFT) /* TAPMODE_LEFT = Left Click Tap Mode */ - event.type = Common::EVENT_LBUTTONUP; - else if (OP::tapmodeLevel == TAPMODE_RIGHT) /* TAPMODE_RIGHT = Right Click Tap Mode */ - event.type = Common::EVENT_RBUTTONUP; - else if (OP::tapmodeLevel == TAPMODE_HOVER) /* TAPMODE_HOVER = Hover (No Click) Tap Mode */ - event.type = Common::EVENT_MOUSEMOVE; - else - event.type = Common::EVENT_LBUTTONUP; /* For normal mice etc. */ - } - else if (ev.button.button == SDL_BUTTON_RIGHT) - event.type = Common::EVENT_RBUTTONUP; -#if defined(SDL_BUTTON_MIDDLE) - else if (ev.button.button == SDL_BUTTON_MIDDLE) - event.type = Common::EVENT_MBUTTONUP; -#endif - else - return false; - - fillMouseEvent(event, ev.button.x, ev.button.y); - - return true; -} #endif diff --git a/backends/events/openpandora/op-events.h b/backends/events/openpandora/op-events.h index 9aa637992a..25f79e68d7 100644 --- a/backends/events/openpandora/op-events.h +++ b/backends/events/openpandora/op-events.h @@ -28,17 +28,22 @@ /** * Events manager for the OpenPandora. */ + class OPEventSource : public SdlEventSource { public: OPEventSource(); protected: - /** Button state for L button modifier */ + + /** + * Button state for L button modifier + */ bool _buttonStateL; - bool remapKey(SDL_Event &ev, Common::Event &event); + bool handleMouseButtonDown(SDL_Event &ev, Common::Event &event); bool handleMouseButtonUp(SDL_Event &ev, Common::Event &event); + bool remapKey(SDL_Event &ev, Common::Event &event); }; #endif /* BACKEND_EVENTS_OP_H */ diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp index cadb10a954..835d98e718 100644 --- a/backends/events/sdl/sdl-events.cpp +++ b/backends/events/sdl/sdl-events.cpp @@ -279,7 +279,7 @@ bool SdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) { event.type = Common::EVENT_QUIT; return true; } -#elif defined(UNIX) +#elif defined(POSIX) // On other *nix systems, Control-Q quits if ((ev.key.keysym.mod & KMOD_CTRL) && ev.key.keysym.sym == 'q') { event.type = Common::EVENT_QUIT; @@ -323,7 +323,7 @@ bool SdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) { if (ev.key.keysym.sym == 'm' || // Ctrl-m toggles mouse capture #if defined(MACOSX) // Meta - Q, handled below -#elif defined(UNIX) +#elif defined(POSIX) ev.key.keysym.sym == 'q' || // On other *nix systems, Control-Q quits #else ev.key.keysym.sym == 'z' || // Ctrl-z quit @@ -336,7 +336,7 @@ bool SdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) { #if defined(MACOSX) if ((mod & KMOD_META) && ev.key.keysym.sym == 'q') return false; // On Macintosh, Cmd-Q quits -#elif defined(UNIX) +#elif defined(POSIX) // Control Q has already been handled above #else if ((mod & KMOD_ALT) && ev.key.keysym.sym == 'x') diff --git a/backends/events/wincesdl/wincesdl-events.cpp b/backends/events/wincesdl/wincesdl-events.cpp index f15a416b76..4fab47a58e 100644 --- a/backends/events/wincesdl/wincesdl-events.cpp +++ b/backends/events/wincesdl/wincesdl-events.cpp @@ -35,7 +35,7 @@ WINCESdlEventSource::WINCESdlEventSource() : _tapTime(0), _closeClick(false), _rbutton(false), - _freeLook(false), _graphicsMan(0) { + _graphicsMan(0) { } void WINCESdlEventSource::init(WINCESdlGraphicsManager *graphicsMan) { @@ -64,6 +64,7 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) { ev.type = SDL_NOEVENT; DWORD currentTime; bool keyEvent = false; + bool freeLookActive = _graphicsMan->getFreeLookState(); int deltaX, deltaY; memset(&event, 0, sizeof(Common::Event)); @@ -199,7 +200,7 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) { } } - if (_freeLook && !_closeClick) { + if (freeLookActive && !_closeClick) { _rbutton = false; _tapTime = 0; _tapX = event.mouse.x; @@ -241,7 +242,7 @@ bool WINCESdlEventSource::pollEvent(Common::Event &event) { fillMouseEvent(event, ev.button.x, ev.button.y); - if (_freeLook && !_closeClick) { + if (freeLookActive && !_closeClick) { _tapX = event.mouse.x; _tapY = event.mouse.y; event.type = Common::EVENT_MOUSEMOVE; @@ -322,8 +323,4 @@ int WINCESdlEventSource::mapKeyCE(SDLKey key, SDLMod mod, Uint16 unicode, bool u return key; } -void WINCESdlEventSource::swap_freeLook() { - _freeLook = !_freeLook; -} - #endif /* _WIN32_WCE */ diff --git a/backends/events/wincesdl/wincesdl-events.h b/backends/events/wincesdl/wincesdl-events.h index 734cc899c0..deeee6196c 100644 --- a/backends/events/wincesdl/wincesdl-events.h +++ b/backends/events/wincesdl/wincesdl-events.h @@ -45,8 +45,6 @@ public: // Overloaded from SDL backend (mouse and new scaler handling) void fillMouseEvent(Common::Event &event, int x, int y); - void swap_freeLook(); - protected: private: @@ -61,8 +59,6 @@ private: bool _closeClick; // flag when taps are spatially close together bool _rbutton; // double tap -> right button simulation - bool _freeLook; // freeLook mode (do not send mouse button events) - }; #endif diff --git a/backends/fs/ds/ds-fs.cpp b/backends/fs/ds/ds-fs.cpp index 6c11ddc605..e3f282df05 100644 --- a/backends/fs/ds/ds-fs.cpp +++ b/backends/fs/ds/ds-fs.cpp @@ -602,35 +602,11 @@ size_t std_fread(void *ptr, size_t size, size_t numItems, FILE *handle) { } size_t std_fwrite(const void *ptr, size_t size, size_t numItems, FILE *handle) { - if ((handle == stdin)) - return 0; - - if ((handle == stderr) || (handle == stdout)) { -#ifndef DISABLE_TEXT_CONSOLE - nocashMessage((char *) ptr); -// consolePrintf((char *) ptr); -#endif - return size; - } - //consolePrintf("fwrite size=%d\n", size * numItems); if (DS::isGBAMPAvailable()) { FAT_fwrite(ptr, size, numItems, (FAT_FILE *) handle); return numItems; - - int length = size * numItems; - int pos = 0; - - while (pos < length) { - int amount = length > 512? 512: length; - - FAT_fwrite(((char *) (ptr)) + pos, 1, amount, (FAT_FILE *) handle); - length -= amount; - pos += amount; - } - - return numItems; } return 0; diff --git a/backends/fs/posix/posix-fs-factory.cpp b/backends/fs/posix/posix-fs-factory.cpp index c94e90ccde..829355be84 100644 --- a/backends/fs/posix/posix-fs-factory.cpp +++ b/backends/fs/posix/posix-fs-factory.cpp @@ -19,13 +19,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#if defined(UNIX) +#if defined(POSIX) // Re-enable some forbidden symbols to avoid clashes with stat.h and unistd.h. // Also with clock() in sys/time.h in some Mac OS X SDKs. #define FORBIDDEN_SYMBOL_EXCEPTION_time_h #define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h #define FORBIDDEN_SYMBOL_EXCEPTION_mkdir +#define FORBIDDEN_SYMBOL_EXCEPTION_exit //Needed for IRIX's unistd.h #include "backends/fs/posix/posix-fs-factory.h" #include "backends/fs/posix/posix-fs.h" diff --git a/backends/fs/posix/posix-fs.cpp b/backends/fs/posix/posix-fs.cpp index 7f2ca695c5..0b94c37b16 100644 --- a/backends/fs/posix/posix-fs.cpp +++ b/backends/fs/posix/posix-fs.cpp @@ -19,7 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#if defined(UNIX) +#if defined(POSIX) // Re-enable some forbidden symbols to avoid clashes with stat.h and unistd.h. // Also with clock() in sys/time.h in some Mac OS X SDKs. @@ -27,6 +27,7 @@ #define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h #define FORBIDDEN_SYMBOL_EXCEPTION_mkdir #define FORBIDDEN_SYMBOL_EXCEPTION_getenv +#define FORBIDDEN_SYMBOL_EXCEPTION_exit //Needed for IRIX's unistd.h #include "backends/fs/posix/posix-fs.h" #include "backends/fs/stdiostream.h" @@ -249,4 +250,4 @@ Common::WriteStream *POSIXFilesystemNode::createWriteStream() { return StdioStream::makeFromPath(getPath(), true); } -#endif //#if defined(UNIX) +#endif //#if defined(POSIX) diff --git a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp index 6690244fb7..8a141e97a5 100644 --- a/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp +++ b/backends/graphics/dinguxsdl/dinguxsdl-graphics.cpp @@ -468,7 +468,7 @@ bool DINGUXSdlGraphicsManager::loadGFXMode() { bool DINGUXSdlGraphicsManager::hasFeature(OSystem::Feature f) { return (f == OSystem::kFeatureAspectRatioCorrection) || - (f == OSystem::kFeatureCursorHasPalette); + (f == OSystem::kFeatureCursorPalette); } void DINGUXSdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) { diff --git a/backends/graphics/gp2xsdl/gp2xsdl-graphics.cpp b/backends/graphics/gp2xsdl/gp2xsdl-graphics.cpp deleted file mode 100644 index 6e5a35a1b1..0000000000 --- a/backends/graphics/gp2xsdl/gp2xsdl-graphics.cpp +++ /dev/null @@ -1,180 +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 "common/scummsys.h" - -#if defined(GP2X_OLD) - -#include "backends/graphics/gp2xsdl/gp2xsdl-graphics.h" -#include "graphics/scaler/aspect.h" -#include <SDL_gp2x.h> - -static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { - {"Fullscreen", "1x", GFX_NORMAL}, - {0, 0, 0} -}; - -GP2XSdlGraphicsManager::GP2XSdlGraphicsManager(SdlEventSource *sdlEventSource) - : SdlGraphicsManager(sdlEventSource), _adjustZoomOnMouse(false) { -} - -const OSystem::GraphicsMode *GP2XSdlGraphicsManager::getSupportedGraphicsModes() const { - return s_supportedGraphicsModes; -} - -int GP2XSdlGraphicsManager::getDefaultGraphicsMode() const { - return GFX_NORMAL; -} - - -bool GP2XSdlGraphicsManager::hasFeature(OSystem::Feature f) { - if (f == OSystem::kFeatureIconifyWindow) - return false; - - return SdlGraphicsManager::hasFeature(f); -} - -void GP2XSdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) { - if (f != OSystem::kFeatureIconifyWindow) - SdlGraphicsManager::setFeatureState(f, enable); -} - -void GP2XSdlGraphicsManager::drawMouse() { - if (!_mouseVisible || !_mouseSurface) { - _mouseBackup.x = _mouseBackup.y = _mouseBackup.w = _mouseBackup.h = 0; - return; - } - - SDL_Rect zoomdst; - SDL_Rect dst; - int scale; - int hotX, hotY; - int tmpScreenWidth, tmpScreenHeight; - - // Temp vars to ensure we zoom to the LCD resolution or greater. - tmpScreenWidth = _videoMode.screenWidth; - tmpScreenHeight = _videoMode.screenHeight; - - if (_videoMode.screenHeight <= 240) { - tmpScreenHeight = 240; - } - - if (_videoMode.screenWidth <= 320) { - tmpScreenWidth = 320; - } - - dst.x = _mouseCurState.x; - dst.y = _mouseCurState.y; - - if (!_overlayVisible) { - scale = _videoMode.scaleFactor; - dst.w = _mouseCurState.vW; - dst.h = _mouseCurState.vH; - hotX = _mouseCurState.vHotX; - hotY = _mouseCurState.vHotY; - } else { - scale = 1; - dst.w = _mouseCurState.rW; - dst.h = _mouseCurState.rH; - hotX = _mouseCurState.rHotX; - hotY = _mouseCurState.rHotY; - } - - // The mouse is undrawn using virtual coordinates, i.e. they may be - // scaled and aspect-ratio corrected. - - _mouseBackup.x = dst.x - hotX; - _mouseBackup.y = dst.y - hotY; - _mouseBackup.w = dst.w; - _mouseBackup.h = dst.h; - - // We draw the pre-scaled cursor image, so now we need to adjust for - // scaling, shake position and aspect ratio correction manually. - - if (!_overlayVisible) { - dst.y += _currentShakePos; - } - - if (_videoMode.aspectRatioCorrection && !_overlayVisible) - dst.y = real2Aspect(dst.y); - - dst.x = scale * dst.x - _mouseCurState.rHotX; - dst.y = scale * dst.y - _mouseCurState.rHotY; - dst.w = _mouseCurState.rW; - dst.h = _mouseCurState.rH; - - // Hacking about with the zoom around mouse pointer stuff. - if (_adjustZoomOnMouse){ - - zoomdst.w = (tmpScreenWidth / 2); - zoomdst.h = (tmpScreenHeight / 2); - - // Create a zoomed rect centered on the mouse pointer. - // Will pan 1/4 of the screen. - - if (dst.x > ((tmpScreenWidth / 4) * 3)) { - zoomdst.x = (tmpScreenWidth / 2); - } else { - zoomdst.x = (dst.x - (tmpScreenWidth / 4)); - if (zoomdst.x < 0) { - zoomdst.x = 0; - } - } - - if (dst.y > ((tmpScreenHeight / 4) * 3)) { - zoomdst.y = (tmpScreenHeight / 2); - } else { - zoomdst.y = (dst.y - (tmpScreenHeight / 4)); - if (zoomdst.y < 0) { - zoomdst.y = 0; - } - } - SDL_GP2X_Display(&zoomdst); - } else { - - // Make sure we are looking at the whole screen otherwise. - - zoomdst.x = 0; - zoomdst.y = 0; - zoomdst.w = (tmpScreenWidth); - zoomdst.h = (tmpScreenHeight); - - SDL_GP2X_Display(&zoomdst); - }; - - // Note that SDL_BlitSurface() and addDirtyRect() will both perform any - // clipping necessary - - if (SDL_BlitSurface(_mouseSurface, NULL, _hwscreen, &dst) != 0) - error("SDL_BlitSurface failed: %s", SDL_GetError()); - - // The screen will be updated using real surface coordinates, i.e. - // they will not be scaled or aspect-ratio corrected. - - addDirtyRect(dst.x, dst.y, dst.w, dst.h, true); -} - -void GP2XSdlGraphicsManager::toggleZoomOnMouse() { - _adjustZoomOnMouse = !_adjustZoomOnMouse; -} - -#endif diff --git a/backends/graphics/gp2xsdl/gp2xsdl-graphics.h b/backends/graphics/gp2xsdl/gp2xsdl-graphics.h deleted file mode 100644 index 341b913acd..0000000000 --- a/backends/graphics/gp2xsdl/gp2xsdl-graphics.h +++ /dev/null @@ -1,46 +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. - * - */ - -#ifndef BACKENDS_GRAPHICS_SDL_GP2X_H -#define BACKENDS_GRAPHICS_SDL_GP2X_H - -#include "backends/graphics/sdl/sdl-graphics.h" - -class GP2XSdlGraphicsManager : public SdlGraphicsManager { -public: - GP2XSdlGraphicsManager(SdlEventSource *sdlEventSource); - - virtual const OSystem::GraphicsMode *getSupportedGraphicsModes() const; - virtual int getDefaultGraphicsMode() const; - virtual void drawMouse(); - - virtual bool hasFeature(OSystem::Feature f); - virtual void setFeatureState(OSystem::Feature f, bool enable); - - // Toggles zoom adjust on mouse - void toggleZoomOnMouse(); - -protected: - bool _adjustZoomOnMouse; -}; - -#endif diff --git a/backends/graphics/gph/gph-graphics.cpp b/backends/graphics/gph/gph-graphics.cpp index b407bf1faf..eb748f2fc2 100644 --- a/backends/graphics/gph/gph-graphics.cpp +++ b/backends/graphics/gph/gph-graphics.cpp @@ -35,8 +35,8 @@ static const OSystem::GraphicsMode s_supportedGraphicsModes[] = { {0, 0, 0} }; -GPHGraphicsManager::GPHGraphicsManager(SdlEventSource *boss) - : SdlGraphicsManager(boss) { +GPHGraphicsManager::GPHGraphicsManager(SdlEventSource *sdlEventSource) + : SdlGraphicsManager(sdlEventSource) { } const OSystem::GraphicsMode *GPHGraphicsManager::getSupportedGraphicsModes() const { @@ -110,21 +110,43 @@ void GPHGraphicsManager::setGraphicsModeIntern() { blitCursor(); } -void GPHGraphicsManager::initSize(uint w, uint h) { +void GPHGraphicsManager::initSize(uint w, uint h, const Graphics::PixelFormat *format) { assert(_transactionMode == kTransactionActive); +#ifdef USE_RGB_COLOR + // Avoid redundant format changes + Graphics::PixelFormat newFormat; + if (!format) + newFormat = Graphics::PixelFormat::createFormatCLUT8(); + else + newFormat = *format; + + assert(newFormat.bytesPerPixel > 0); + + if (newFormat != _videoMode.format) { + _videoMode.format = newFormat; + _transactionDetails.formatChanged = true; + _screenFormat = newFormat; + } +#endif + + // Avoid redundant res changes if ((int)w == _videoMode.screenWidth && (int)h == _videoMode.screenHeight) return; _videoMode.screenWidth = w; _videoMode.screenHeight = h; + if (w > 320 || h > 240){ setGraphicsMode(GFX_HALF); setGraphicsModeIntern(); _sdlEventSource->toggleMouseGrab(); } + _videoMode.overlayWidth = 320; + _videoMode.overlayHeight = 240; + _transactionDetails.sizeChanged = true; } @@ -433,26 +455,65 @@ void GPHGraphicsManager::hideOverlay() { } -bool GPHGraphicsManager::loadGFXMode() { - - /* Forcefully disable aspect ratio correction for games - that start with a native 240px height resolution - This corrects games with non-standard resolutions - such as MM Nes (256x240). - */ +//bool GPHGraphicsManager::loadGFXMode() { + + +// _videoMode.overlayWidth = 320; +// _videoMode.overlayHeight = 240; +// _videoMode.fullscreen = true; +// +// /* Forcefully disable aspect ratio correction for games +// that start with a native 240px height resolution +// This corrects games with non-standard resolutions +// such as MM Nes (256x240). +// */ +// if(_videoMode.screenHeight == 240) { +// _videoMode.aspectRatioCorrection = false; +// } + +// debug("Game ScreenMode = %d*%d", _videoMode.screenWidth, _videoMode.screenHeight); +// if (_videoMode.screenWidth > 320 || _videoMode.screenHeight > 240) { +// _videoMode.aspectRatioCorrection = false; +// setGraphicsMode(GFX_HALF); +// debug("GraphicsMode set to HALF"); +// } else { +// setGraphicsMode(GFX_NORMAL); +// debug("GraphicsMode set to NORMAL"); +// } + + +// if ((_videoMode.mode == GFX_HALF) && !_overlayVisible) { +// //_videoMode.overlayWidth = _videoMode.screenWidth / 2; +// //_videoMode.overlayHeight = _videoMode.screenHeight / 2; +// _videoMode.overlayWidth = 320; +// _videoMode.overlayHeight = 240; +// _videoMode.fullscreen = true; +// } else { +// +// _videoMode.overlayWidth = _videoMode.screenWidth * _videoMode.scaleFactor; +// _videoMode.overlayHeight = _videoMode.screenHeight * _videoMode.scaleFactor; +// +// if (_videoMode.aspectRatioCorrection) +// _videoMode.overlayHeight = real2Aspect(_videoMode.overlayHeight); +// +// //_videoMode.hardwareWidth = _videoMode.screenWidth * _videoMode.scaleFactor; +// //_videoMode.hardwareHeight = effectiveScreenHeight(); +// _videoMode.hardwareWidth = 320; +// _videoMode.hardwareHeight = 240; +// +// } + +// return SdlGraphicsManager::loadGFXMode(); +//} - if(_videoMode.screenHeight == 240) { - _videoMode.aspectRatioCorrection = false; - } - - debug("Game ScreenMode = %d*%d", _videoMode.screenWidth, _videoMode.screenHeight); +bool GPHGraphicsManager::loadGFXMode() { if (_videoMode.screenWidth > 320 || _videoMode.screenHeight > 240) { _videoMode.aspectRatioCorrection = false; setGraphicsMode(GFX_HALF); - debug("GraphicsMode set to HALF"); +// printf("GFX_HALF\n"); } else { setGraphicsMode(GFX_NORMAL); - debug("GraphicsMode set to NORMAL"); +// printf("GFX_NORMAL\n"); } if ((_videoMode.mode == GFX_HALF) && !_overlayVisible) { @@ -476,7 +537,7 @@ bool GPHGraphicsManager::loadGFXMode() { bool GPHGraphicsManager::hasFeature(OSystem::Feature f) { return (f == OSystem::kFeatureAspectRatioCorrection) || - (f == OSystem::kFeatureCursorHasPalette); + (f == OSystem::kFeatureCursorPalette); } void GPHGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) { diff --git a/backends/graphics/gph/gph-graphics.h b/backends/graphics/gph/gph-graphics.h index 6ba2b344a6..fc3dc5730d 100644 --- a/backends/graphics/gph/gph-graphics.h +++ b/backends/graphics/gph/gph-graphics.h @@ -24,7 +24,7 @@ #define BACKENDS_GRAPHICS_GPH_H #include "backends/graphics/sdl/sdl-graphics.h" -#include "graphics/scaler/aspect.h" // for aspect2Real +#include "graphics/scaler/aspect.h" // for aspect2Real #include "graphics/scaler/downscaler.h" enum { @@ -40,7 +40,7 @@ public: bool getFeatureState(OSystem::Feature f); int getDefaultGraphicsMode() const; - void initSize(uint w, uint h); + void initSize(uint w, uint h, const Graphics::PixelFormat *format = NULL); const OSystem::GraphicsMode *getSupportedGraphicsModes() const; bool setGraphicsMode(const char *name); bool setGraphicsMode(int mode); diff --git a/backends/graphics/graphics.h b/backends/graphics/graphics.h index 4e681eb155..20924ed581 100644 --- a/backends/graphics/graphics.h +++ b/backends/graphics/graphics.h @@ -82,7 +82,6 @@ public: virtual void warpMouse(int x, int y) = 0; virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, int cursorTargetScale = 1, const Graphics::PixelFormat *format = NULL) = 0; virtual void setCursorPalette(const byte *colors, uint start, uint num) = 0; - virtual void disableCursorPalette(bool disable) = 0; virtual void displayMessageOnOSD(const char *msg) {} }; diff --git a/backends/graphics/null/null-graphics.h b/backends/graphics/null/null-graphics.h index 673d59814e..28b24f6aca 100644 --- a/backends/graphics/null/null-graphics.h +++ b/backends/graphics/null/null-graphics.h @@ -79,7 +79,6 @@ public: void warpMouse(int x, int y) {} void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, int cursorTargetScale = 1, const Graphics::PixelFormat *format = NULL) {} void setCursorPalette(const byte *colors, uint start, uint num) {} - void disableCursorPalette(bool disable) {} }; #endif diff --git a/backends/graphics/opengl/gltexture.h b/backends/graphics/opengl/gltexture.h index 63d5e3a733..f0cd7aed56 100644 --- a/backends/graphics/opengl/gltexture.h +++ b/backends/graphics/opengl/gltexture.h @@ -20,6 +20,8 @@ * */ +#include "common/scummsys.h" + #ifdef WIN32 #if defined(ARRAYSIZE) && !defined(_WINDOWS_) #undef ARRAYSIZE diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index 32c0fbca6f..c0551de386 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -91,7 +91,7 @@ void OpenGLGraphicsManager::initEventObserver() { bool OpenGLGraphicsManager::hasFeature(OSystem::Feature f) { return (f == OSystem::kFeatureAspectRatioCorrection) || - (f == OSystem::kFeatureCursorHasPalette); + (f == OSystem::kFeatureCursorPalette); } void OpenGLGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) { @@ -105,6 +105,11 @@ void OpenGLGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) { _transactionDetails.needRefresh = true; break; + case OSystem::kFeatureCursorPalette: + _cursorPaletteDisabled = !enable; + _cursorNeedsRedraw = true; + break; + default: break; } @@ -118,6 +123,9 @@ bool OpenGLGraphicsManager::getFeatureState(OSystem::Feature f) { case OSystem::kFeatureAspectRatioCorrection: return _videoMode.aspectRatioCorrection; + case OSystem::kFeatureCursorPalette: + return !_cursorPaletteDisabled; + default: return false; } @@ -642,11 +650,6 @@ void OpenGLGraphicsManager::setCursorPalette(const byte *colors, uint start, uin _cursorNeedsRedraw = true; } -void OpenGLGraphicsManager::disableCursorPalette(bool disable) { - _cursorPaletteDisabled = disable; - _cursorNeedsRedraw = true; -} - // // Misc // @@ -1382,7 +1385,7 @@ const char *OpenGLGraphicsManager::getCurrentModeName() { #ifdef USE_OSD void OpenGLGraphicsManager::updateOSD() { // The font we are going to use: - const Graphics::Font *font = FontMan.getFontByUsage(Graphics::FontManager::kOSDFont); + const Graphics::Font *font = FontMan.getFontByUsage(Graphics::FontManager::kLocalizedFont); if (_osdSurface.w != _osdTexture->getWidth() || _osdSurface.h != _osdTexture->getHeight()) _osdSurface.create(_osdTexture->getWidth(), _osdTexture->getHeight(), _overlayFormat); diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h index daba7748bc..463715aad8 100644 --- a/backends/graphics/opengl/opengl-graphics.h +++ b/backends/graphics/opengl/opengl-graphics.h @@ -107,7 +107,6 @@ public: virtual void warpMouse(int x, int y); virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, int cursorTargetScale = 1, const Graphics::PixelFormat *format = NULL); virtual void setCursorPalette(const byte *colors, uint start, uint num); - virtual void disableCursorPalette(bool disable); virtual void displayMessageOnOSD(const char *msg); diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp index 3f9ffc9f3e..87457c3c08 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.cpp +++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp @@ -28,6 +28,7 @@ #include "backends/platform/sdl/sdl.h" #include "common/config-manager.h" #include "common/textconsole.h" +#include "common/translation.h" OpenGLSdlGraphicsManager::OpenGLSdlGraphicsManager() : @@ -394,7 +395,8 @@ void OpenGLSdlGraphicsManager::displayModeChangedMsg() { const int scaleFactor = getScale(); char buffer[128]; - sprintf(buffer, "Current display mode: %s\n%d x %d -> %d x %d", + sprintf(buffer, "%s: %s\n%d x %d -> %d x %d", + _("Current display mode"), newModeName, _videoMode.screenWidth * scaleFactor, _videoMode.screenHeight * scaleFactor, @@ -406,7 +408,8 @@ void OpenGLSdlGraphicsManager::displayModeChangedMsg() { void OpenGLSdlGraphicsManager::displayScaleChangedMsg() { char buffer[128]; const int scaleFactor = getScale(); - sprintf(buffer, "Current scale: x%d\n%d x %d -> %d x %d", + sprintf(buffer, "%s: x%d\n%d x %d -> %d x %d", + _("Current scale"), scaleFactor, _videoMode.screenWidth, _videoMode.screenHeight, _videoMode.overlayWidth, _videoMode.overlayHeight @@ -449,11 +452,13 @@ void OpenGLSdlGraphicsManager::toggleFullScreen(int loop) { #ifdef USE_OSD char buffer[128]; if (getFullscreenMode()) - sprintf(buffer, "Fullscreen mode\n%d x %d", + sprintf(buffer, "%s\n%d x %d", + _("Fullscreen mode"), _hwscreen->w, _hwscreen->h ); else - sprintf(buffer, "Windowed mode\n%d x %d", + sprintf(buffer, "%s\n%d x %d", + _("Windowed mode"), _hwscreen->w, _hwscreen->h ); displayMessageOnOSD(buffer); @@ -508,11 +513,13 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) { #ifdef USE_OSD char buffer[128]; if (getFeatureState(OSystem::kFeatureAspectRatioCorrection)) - sprintf(buffer, "Enabled aspect ratio correction\n%d x %d -> %d x %d", + sprintf(buffer, "%s\n%d x %d -> %d x %d", + _("Enabled aspect ratio correction"), _videoMode.screenWidth, _videoMode.screenHeight, _hwscreen->w, _hwscreen->h); else - sprintf(buffer, "Disabled aspect ratio correction\n%d x %d -> %d x %d", + sprintf(buffer, "%s\n%d x %d -> %d x %d", + _("Disabled aspect ratio correction"), _videoMode.screenWidth, _videoMode.screenHeight, _hwscreen->w, _hwscreen->h); displayMessageOnOSD(buffer); @@ -532,9 +539,9 @@ bool OpenGLSdlGraphicsManager::notifyEvent(const Common::Event &event) { // modes we use, we might want to consider a better way of // displaying information to the user. if (getAntialiasingState()) - displayMessageOnOSD("Active filter mode: Linear"); + displayMessageOnOSD(_("Active filter mode: Linear")); else - displayMessageOnOSD("Active filter mode: Nearest"); + displayMessageOnOSD(_("Active filter mode: Nearest")); #endif return true; } diff --git a/backends/graphics/openpandora/op-graphics.cpp b/backends/graphics/openpandora/op-graphics.cpp index 20ee5dfc36..c8617635a5 100644 --- a/backends/graphics/openpandora/op-graphics.cpp +++ b/backends/graphics/openpandora/op-graphics.cpp @@ -26,15 +26,13 @@ #include "backends/graphics/openpandora/op-graphics.h" #include "backends/events/openpandora/op-events.h" -#include "backends/platform/openpandora/op-sdl.h" -#include "common/mutex.h" -#include "common/util.h" - +//#include "backends/platform/openpandora/op-sdl.h" #include "graphics/scaler/aspect.h" -#include "graphics/surface.h" +#include "common/mutex.h" +#include "common/textconsole.h" -OPGraphicsManager::OPGraphicsManager(SdlEventSource *boss) - : SdlGraphicsManager(boss) { +OPGraphicsManager::OPGraphicsManager(SdlEventSource *sdlEventSource) + : SdlGraphicsManager(sdlEventSource) { } bool OPGraphicsManager::loadGFXMode() { diff --git a/backends/graphics/openpandora/op-graphics.h b/backends/graphics/openpandora/op-graphics.h index b0d4298620..4bb89ca1e6 100644 --- a/backends/graphics/openpandora/op-graphics.h +++ b/backends/graphics/openpandora/op-graphics.h @@ -33,30 +33,30 @@ enum { class OPGraphicsManager : public SdlGraphicsManager { public: - OPGraphicsManager(SdlEventSource *boss); - - bool hasFeature(OSystem::Feature f); - void setFeatureState(OSystem::Feature f, bool enable); - bool getFeatureState(OSystem::Feature f); - int getDefaultGraphicsMode() const; - - void initSize(uint w, uint h); - const OSystem::GraphicsMode *getSupportedGraphicsModes() const; - bool setGraphicsMode(const char *name); - bool setGraphicsMode(int mode); - void setGraphicsModeIntern(); - void internUpdateScreen(); - void showOverlay(); - void hideOverlay(); + OPGraphicsManager(SdlEventSource *sdlEventSource); + +// bool hasFeature(OSystem::Feature f); +// void setFeatureState(OSystem::Feature f, bool enable); +// bool getFeatureState(OSystem::Feature f); +// int getDefaultGraphicsMode() const; + +// void initSize(uint w, uint h, const Graphics::PixelFormat *format = NULL); +// const OSystem::GraphicsMode *getSupportedGraphicsModes() const; +// bool setGraphicsMode(const char *name); +// bool setGraphicsMode(int mode); +// void setGraphicsModeIntern(); +// void internUpdateScreen(); +// void showOverlay(); +// void hideOverlay(); bool loadGFXMode(); - void drawMouse(); - void undrawMouse(); - virtual void warpMouse(int x, int y); +// void drawMouse(); +// void undrawMouse(); +// virtual void warpMouse(int x, int y); - SdlGraphicsManager::MousePos *getMouseCurState(); - SdlGraphicsManager::VideoState *getVideoMode(); +// SdlGraphicsManager::MousePos *getMouseCurState(); +// SdlGraphicsManager::VideoState *getVideoMode(); - virtual void adjustMouseEvent(const Common::Event &event); +// virtual void adjustMouseEvent(const Common::Event &event); }; #endif /* BACKENDS_GRAPHICS_OP_H */ diff --git a/backends/graphics/samsungtvsdl/samsungtvsdl-graphics.cpp b/backends/graphics/samsungtvsdl/samsungtvsdl-graphics.cpp index b929b5fe27..f6832978a8 100644 --- a/backends/graphics/samsungtvsdl/samsungtvsdl-graphics.cpp +++ b/backends/graphics/samsungtvsdl/samsungtvsdl-graphics.cpp @@ -20,12 +20,14 @@ * */ +#include "common/scummsys.h" + +#if defined(SAMSUNGTV) + #include "backends/platform/samsungtv/samsungtv.h" #include "backends/events/samsungtvsdl/samsungtvsdl-events.h" #include "backends/graphics/samsungtvsdl/samsungtvsdl-graphics.h" -#if defined(SAMSUNGTV) - SamsungTVSdlGraphicsManager::SamsungTVSdlGraphicsManager(SdlEventSource *sdlEventSource) : SdlGraphicsManager(sdlEventSource) { } @@ -33,7 +35,7 @@ SamsungTVSdlGraphicsManager::SamsungTVSdlGraphicsManager(SdlEventSource *sdlEven bool SamsungTVSdlGraphicsManager::hasFeature(OSystem::Feature f) { return (f == OSystem::kFeatureAspectRatioCorrection) || - (f == OSystem::kFeatureCursorHasPalette); + (f == OSystem::kFeatureCursorPalette); } void SamsungTVSdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) { diff --git a/backends/graphics/sdl/sdl-graphics.cpp b/backends/graphics/sdl/sdl-graphics.cpp index 7a5b777032..9063f55744 100644 --- a/backends/graphics/sdl/sdl-graphics.cpp +++ b/backends/graphics/sdl/sdl-graphics.cpp @@ -223,7 +223,7 @@ bool SdlGraphicsManager::hasFeature(OSystem::Feature f) { return (f == OSystem::kFeatureFullscreenMode) || (f == OSystem::kFeatureAspectRatioCorrection) || - (f == OSystem::kFeatureCursorHasPalette) || + (f == OSystem::kFeatureCursorPalette) || (f == OSystem::kFeatureIconifyWindow); } @@ -235,6 +235,10 @@ void SdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) { case OSystem::kFeatureAspectRatioCorrection: setAspectRatioCorrection(enable); break; + case OSystem::kFeatureCursorPalette: + _cursorPaletteDisabled = !enable; + blitCursor(); + break; case OSystem::kFeatureIconifyWindow: if (enable) SDL_WM_IconifyWindow(); @@ -245,13 +249,15 @@ void SdlGraphicsManager::setFeatureState(OSystem::Feature f, bool enable) { } bool SdlGraphicsManager::getFeatureState(OSystem::Feature f) { - assert (_transactionMode == kTransactionNone); + assert(_transactionMode == kTransactionNone); switch (f) { case OSystem::kFeatureFullscreenMode: return _videoMode.fullscreen; case OSystem::kFeatureAspectRatioCorrection: return _videoMode.aspectRatioCorrection; + case OSystem::kFeatureCursorPalette: + return !_cursorPaletteDisabled; default: return false; } @@ -1458,11 +1464,6 @@ void SdlGraphicsManager::setCursorPalette(const byte *colors, uint start, uint n blitCursor(); } -void SdlGraphicsManager::disableCursorPalette(bool disable) { - _cursorPaletteDisabled = disable; - blitCursor(); -} - void SdlGraphicsManager::setShakePos(int shake_pos) { assert (_transactionMode == kTransactionNone); @@ -2059,7 +2060,7 @@ void SdlGraphicsManager::displayMessageOnOSD(const char *msg) { _osdSurface->format->Bshift, _osdSurface->format->Ashift); // The font we are going to use: - const Graphics::Font *font = FontMan.getFontByUsage(Graphics::FontManager::kOSDFont); + const Graphics::Font *font = FontMan.getFontByUsage(Graphics::FontManager::kLocalizedFont); // Clear everything with the "transparent" color, i.e. the colorkey SDL_FillRect(_osdSurface, 0, kOSDColorKey); @@ -2132,12 +2133,14 @@ bool SdlGraphicsManager::handleScalerHotkeys(Common::KeyCode key) { #ifdef USE_OSD char buffer[128]; if (_videoMode.aspectRatioCorrection) - sprintf(buffer, "Enabled aspect ratio correction\n%d x %d -> %d x %d", + sprintf(buffer, "%s\n%d x %d -> %d x %d", + _("Enabled aspect ratio correction"), _videoMode.screenWidth, _videoMode.screenHeight, _hwscreen->w, _hwscreen->h ); else - sprintf(buffer, "Disabled aspect ratio correction\n%d x %d -> %d x %d", + sprintf(buffer, "%s\n%d x %d -> %d x %d", + _("Disabled aspect ratio correction"), _videoMode.screenWidth, _videoMode.screenHeight, _hwscreen->w, _hwscreen->h ); @@ -2191,7 +2194,8 @@ bool SdlGraphicsManager::handleScalerHotkeys(Common::KeyCode key) { } if (newScalerName) { char buffer[128]; - sprintf(buffer, "Active graphics filter: %s\n%d x %d -> %d x %d", + sprintf(buffer, "%s %s\n%d x %d -> %d x %d", + _("Active graphics filter:"), newScalerName, _videoMode.screenWidth, _videoMode.screenHeight, _hwscreen->w, _hwscreen->h @@ -2245,9 +2249,9 @@ void SdlGraphicsManager::toggleFullScreen() { endGFXTransaction(); #ifdef USE_OSD if (_videoMode.fullscreen) - displayMessageOnOSD("Fullscreen mode"); + displayMessageOnOSD(_("Fullscreen mode")); else - displayMessageOnOSD("Windowed mode"); + displayMessageOnOSD(_("Windowed mode")); #endif } diff --git a/backends/graphics/sdl/sdl-graphics.h b/backends/graphics/sdl/sdl-graphics.h index 86e52a0bf6..9627ab23a3 100644 --- a/backends/graphics/sdl/sdl-graphics.h +++ b/backends/graphics/sdl/sdl-graphics.h @@ -132,7 +132,6 @@ public: virtual void warpMouse(int x, int y); virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, int cursorTargetScale = 1, const Graphics::PixelFormat *format = NULL); virtual void setCursorPalette(const byte *colors, uint start, uint num); - virtual void disableCursorPalette(bool disable); #ifdef USE_OSD virtual void displayMessageOnOSD(const char *msg); diff --git a/backends/graphics/symbiansdl/symbiansdl-graphics.cpp b/backends/graphics/symbiansdl/symbiansdl-graphics.cpp index 4d656cd7cd..a88c8a8ffe 100644 --- a/backends/graphics/symbiansdl/symbiansdl-graphics.cpp +++ b/backends/graphics/symbiansdl/symbiansdl-graphics.cpp @@ -54,7 +54,7 @@ bool SymbianSdlGraphicsManager::hasFeature(OSystem::Feature f) { switch (f) { case OSystem::kFeatureFullscreenMode: case OSystem::kFeatureAspectRatioCorrection: - case OSystem::kFeatureCursorHasPalette: + case OSystem::kFeatureCursorPalette: #ifdef USE_VIBRA_SE_PXXX case OSystem::kFeatureVibration: #endif diff --git a/backends/graphics/wincesdl/wincesdl-graphics.cpp b/backends/graphics/wincesdl/wincesdl-graphics.cpp index 80b04ca56d..8ba7b5821d 100644 --- a/backends/graphics/wincesdl/wincesdl-graphics.cpp +++ b/backends/graphics/wincesdl/wincesdl-graphics.cpp @@ -49,8 +49,8 @@ WINCESdlGraphicsManager::WINCESdlGraphicsManager(SdlEventSource *sdlEventSource) _panelVisible(true), _saveActiveToolbar(NAME_MAIN_PANEL), _panelStateForced(false), _canBeAspectScaled(false), _scalersChanged(false), _saveToolbarState(false), _mouseBackupOld(NULL), _mouseBackupDim(0), _mouseBackupToolbar(NULL), - _usesEmulatedMouse(false), _forceHideMouse(false), _hasfocus(true), - _zoomUp(false), _zoomDown(false) { + _usesEmulatedMouse(false), _forceHideMouse(false), _freeLook(false), + _hasfocus(true), _zoomUp(false), _zoomDown(false) { memset(&_mouseCurState, 0, sizeof(_mouseCurState)); if (_isSmartphone) { _mouseCurState.x = 20; @@ -444,7 +444,6 @@ void WINCESdlGraphicsManager::update_game_settings() { // Skip panel->add(NAME_ITEM_SKIP, new CEGUI::ItemAction(ITEM_SKIP, POCKET_ACTION_SKIP)); // sound -//__XXX__ panel->add(NAME_ITEM_SOUND, new CEGUI::ItemSwitch(ITEM_SOUND_OFF, ITEM_SOUND_ON, &_soundMaster)); panel->add(NAME_ITEM_SOUND, new CEGUI::ItemSwitch(ITEM_SOUND_OFF, ITEM_SOUND_ON, &OSystem_WINCE3::_soundMaster)); // bind keys @@ -1627,6 +1626,14 @@ void WINCESdlGraphicsManager::create_toolbar() { _toolbarHandler.setVisible(false); } +void WINCESdlGraphicsManager::swap_freeLook() { + _freeLook = !_freeLook; +} + +bool WINCESdlGraphicsManager::getFreeLookState() { + return _freeLook; +} + WINCESdlGraphicsManager::zoneDesc WINCESdlGraphicsManager::_zones[TOTAL_ZONES] = { { 0, 0, 320, 145 }, { 0, 145, 150, 55 }, diff --git a/backends/graphics/wincesdl/wincesdl-graphics.h b/backends/graphics/wincesdl/wincesdl-graphics.h index b3a8d66f51..2727bc0d27 100644 --- a/backends/graphics/wincesdl/wincesdl-graphics.h +++ b/backends/graphics/wincesdl/wincesdl-graphics.h @@ -56,6 +56,8 @@ public: void unloadGFXMode(); bool hotswapGFXMode(); + void update_game_settings(); + // Overloaded from SDL backend (toolbar handling) void drawMouse(); // Overloaded from SDL backend (new scaler handling) @@ -88,7 +90,8 @@ public: void swap_zoom_up(); void swap_zoom_down(); void swap_mouse_visibility(); - + void swap_freeLook(); + bool getFreeLookState(); //#ifdef WIN32_PLATFORM_WFSP void move_cursor_up(); @@ -96,7 +99,6 @@ public: void move_cursor_left(); void move_cursor_right(); - void retrieve_mouse_location(int &x, int &y); void switch_zone(); void add_right_click(bool pushed); @@ -106,6 +108,11 @@ public: void smartphone_rotate_display(); //#endif + bool hasPocketPCResolution(); + bool hasDesktopResolution(); + bool hasSquareQVGAResolution(); + bool hasWideResolution() const; + bool _panelInitialized; // only initialize the toolbar once bool _noDoubleTapRMB; // disable double tap -> rmb click @@ -122,11 +129,6 @@ public: bool _hasfocus; // scummvm has the top window - bool hasPocketPCResolution(); - bool hasDesktopResolution(); - bool hasSquareQVGAResolution(); - bool hasWideResolution() const; - MousePos _mouseCurState; bool _zoomUp; // zooming up mode @@ -158,8 +160,8 @@ protected: private: bool update_scalers(); - void update_game_settings(); void drawToolbarMouse(SDL_Surface *surf, bool draw); + void retrieve_mouse_location(int &x, int &y); void create_toolbar(); bool _panelVisible; // panel visibility @@ -186,6 +188,7 @@ private: uint16 _mouseBackupDim; bool _forceHideMouse; // force invisible mouse cursor + bool _freeLook; // freeLook mode (do not send mouse button events) // Smartphone specific variables void loadDeviceConfigurationElement(Common::String element, int &value, int defaultValue); diff --git a/backends/midi/alsa.cpp b/backends/midi/alsa.cpp index 28e44b445a..c006b6b6bf 100644 --- a/backends/midi/alsa.cpp +++ b/backends/midi/alsa.cpp @@ -164,7 +164,7 @@ int MidiDriver_ALSA::open() { } printf("Connected to Alsa sequencer client [%d:%d]\n", seq_client, seq_port); - printf("ALSA client initialised [%d:0]\n", my_client); + printf("ALSA client initialized [%d:0]\n", my_client); return 0; } @@ -382,7 +382,7 @@ MusicDevices AlsaMusicPlugin::getDevices() const { AlsaDevices alsaDevices = getAlsaDevices(); - // Since the default behaviour is to use the first device in the list, + // Since the default behavior is to use the first device in the list, // try to put something sensible there. We used to have 17:0 and 65:0 // as defaults. diff --git a/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp b/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp index 526a01d1bf..001389b1c0 100644 --- a/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp +++ b/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp @@ -45,7 +45,7 @@ void DoubleBufferSDLMixerManager::startAudio() { // Create two sound buffers _activeSoundBuf = 0; - uint bufSize = _obtainedRate.samples * 4; + uint bufSize = _obtained.samples * 4; _soundBufSize = bufSize; _soundBuffers[0] = (byte *)calloc(1, bufSize); _soundBuffers[1] = (byte *)calloc(1, bufSize); diff --git a/backends/mixer/sdl/sdl-mixer.cpp b/backends/mixer/sdl/sdl-mixer.cpp index 61e7f051e5..979b18e264 100644 --- a/backends/mixer/sdl/sdl-mixer.cpp +++ b/backends/mixer/sdl/sdl-mixer.cpp @@ -20,6 +20,8 @@ * */ +#include "common/scummsys.h" + #if defined(SDL_BACKEND) #include "backends/mixer/sdl/sdl-mixer.h" @@ -59,18 +61,38 @@ void SdlMixerManager::init() { // Get the desired audio specs SDL_AudioSpec desired = getAudioSpec(SAMPLES_PER_SEC); + // Needed as SDL_OpenAudio as of SDL-1.2.14 mutates fields in + // "desired" if used directly. + SDL_AudioSpec fmt = desired; + // Start SDL audio with the desired specs - if (SDL_OpenAudio(&desired, &_obtainedRate) != 0) { + if (SDL_OpenAudio(&fmt, &_obtained) != 0) { warning("Could not open audio device: %s", SDL_GetError()); _mixer = new Audio::MixerImpl(g_system, desired.freq); assert(_mixer); _mixer->setReady(false); } else { - debug(1, "Output sample rate: %d Hz", _obtainedRate.freq); + debug(1, "Output sample rate: %d Hz", _obtained.freq); + if (_obtained.freq != desired.freq) + warning("SDL mixer output sample rate: %d differs from desired: %d", _obtained.freq, desired.freq); + + debug(1, "Output buffer size: %d samples", _obtained.samples); + if (_obtained.samples != desired.samples) + warning("SDL mixer output buffer size: %d differs from desired: %d", _obtained.samples, desired.samples); + + if (_obtained.format != desired.format) + warning("SDL mixer sound format: %d differs from desired: %d", _obtained.format, desired.format); + +#ifndef __SYMBIAN32__ + // The SymbianSdlMixerManager does stereo->mono downmixing, + // but otherwise we require stereo output. + if (_obtained.channels != 2) + error("SDL mixer output requires stereo output device"); +#endif - _mixer = new Audio::MixerImpl(g_system, _obtainedRate.freq); - assert(_mixer); + _mixer = new Audio::MixerImpl(g_system, _obtained.freq); + assert(_mixer); _mixer->setReady(true); startAudio(); @@ -131,7 +153,7 @@ void SdlMixerManager::suspendAudio() { int SdlMixerManager::resumeAudio() { if (!_audioSuspended) return -2; - if (SDL_OpenAudio(&_obtainedRate, NULL) < 0){ + if (SDL_OpenAudio(&_obtained, NULL) < 0){ return -1; } SDL_PauseAudio(0); diff --git a/backends/mixer/sdl/sdl-mixer.h b/backends/mixer/sdl/sdl-mixer.h index 5590c90ab3..82ffa4f901 100644 --- a/backends/mixer/sdl/sdl-mixer.h +++ b/backends/mixer/sdl/sdl-mixer.h @@ -67,7 +67,7 @@ protected: * The obtained audio specification after opening the * audio system. */ - SDL_AudioSpec _obtainedRate; + SDL_AudioSpec _obtained; /** State of the audio system */ bool _audioSuspended; diff --git a/backends/mixer/symbiansdl/symbiansdl-mixer.cpp b/backends/mixer/symbiansdl/symbiansdl-mixer.cpp index b2462a1cdf..c911a99b61 100644 --- a/backends/mixer/symbiansdl/symbiansdl-mixer.cpp +++ b/backends/mixer/symbiansdl/symbiansdl-mixer.cpp @@ -43,8 +43,8 @@ SymbianSdlMixerManager::~SymbianSdlMixerManager() { void SymbianSdlMixerManager::startAudio() { // Need to create mixbuffer for stereo mix to downmix - if (_obtainedRate.channels != 2) { - _stereoMixBuffer = new byte [_obtainedRate.size * 2]; // * 2 for stereo values + if (_obtained.channels != 2) { + _stereoMixBuffer = new byte [_obtained.size * 2]; // * 2 for stereo values } SdlMixerManager::startAudio(); @@ -54,7 +54,7 @@ void SymbianSdlMixerManager::callbackHandler(byte *samples, int len) { assert(_mixer); #if defined (S60) && !defined(S60V3) // If not stereo then we need to downmix - if (_obtainedRate.channels != 2) { + if (_obtained.channels != 2) { _mixer->mixCallback(_stereoMixBuffer, len * 2); int16 *bitmixDst = (int16 *)samples; diff --git a/backends/modular-backend.cpp b/backends/modular-backend.cpp index c5f147ffe1..525170d685 100644 --- a/backends/modular-backend.cpp +++ b/backends/modular-backend.cpp @@ -24,44 +24,25 @@ #include "backends/modular-backend.h" -#include "backends/fs/fs-factory.h" -#include "backends/audiocd/audiocd.h" #include "backends/graphics/graphics.h" #include "backends/mutex/mutex.h" #include "audio/mixer.h" -#include "common/events.h" -#include "gui/message.h" #include "graphics/pixelformat.h" ModularBackend::ModularBackend() : - _fsFactory(0), - _eventManager(0), - _savefileManager(0), - _timerManager(0), _mutexManager(0), _graphicsManager(0), - _mixer(0), - _audiocdManager(0) { + _mixer(0) { } ModularBackend::~ModularBackend() { - delete _fsFactory; - _fsFactory = 0; delete _graphicsManager; _graphicsManager = 0; - delete _eventManager; - _eventManager = 0; delete _mixer; _mixer = 0; - delete _audiocdManager; - _audiocdManager = 0; - delete _savefileManager; - _savefileManager = 0; - delete _timerManager; - _timerManager = 0; delete _mutexManager; _mutexManager = 0; } @@ -222,20 +203,6 @@ void ModularBackend::setCursorPalette(const byte *colors, uint start, uint num) _graphicsManager->setCursorPalette(colors, start, num); } -void ModularBackend::disableCursorPalette(bool disable) { - _graphicsManager->disableCursorPalette(disable); -} - -Common::TimerManager *ModularBackend::getTimerManager() { - assert(_timerManager); - return _timerManager; -} - -Common::EventManager *ModularBackend::getEventManager() { - assert(_eventManager); - return _eventManager; -} - OSystem::MutexRef ModularBackend::createMutex() { assert(_mutexManager); return _mutexManager->createMutex(); @@ -261,25 +228,10 @@ Audio::Mixer *ModularBackend::getMixer() { return (Audio::Mixer *)_mixer; } -AudioCDManager *ModularBackend::getAudioCDManager() { - assert(_audiocdManager); - return _audiocdManager; -} - void ModularBackend::displayMessageOnOSD(const char *msg) { _graphicsManager->displayMessageOnOSD(msg); } -Common::SaveFileManager *ModularBackend::getSavefileManager() { - assert(_savefileManager); - return _savefileManager; -} - -FilesystemFactory *ModularBackend::getFilesystemFactory() { - assert(_fsFactory); - return _fsFactory; -} - void ModularBackend::quit() { exit(0); } diff --git a/backends/modular-backend.h b/backends/modular-backend.h index e46fbfdd21..3593130bf5 100644 --- a/backends/modular-backend.h +++ b/backends/modular-backend.h @@ -23,9 +23,7 @@ #ifndef BACKENDS_MODULAR_BACKEND_H #define BACKENDS_MODULAR_BACKEND_H -#include "common/system.h" -#include "common/timer.h" -#include "common/savefile.h" +#include "backends/base-backend.h" class GraphicsManager; class MutexManager; @@ -39,8 +37,6 @@ class MutexManager; * A backend derivated from this class, will need to implement * these functions on its own: * OSystem::pollEvent() - * OSystem::createConfigReadStream() - * OSystem::createConfigWriteStream() * OSystem::getMillis() * OSystem::delayMillis() * OSystem::getTimeAndDate() @@ -48,7 +44,7 @@ class MutexManager; * And, it should also initialize all the managers variables * declared in this class, or override their related functions. */ -class ModularBackend : public OSystem { +class ModularBackend : public BaseBackend { public: ModularBackend(); virtual ~ModularBackend(); @@ -106,15 +102,12 @@ public: virtual void warpMouse(int x, int y); virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, int cursorTargetScale = 1, const Graphics::PixelFormat *format = NULL); virtual void setCursorPalette(const byte *colors, uint start, uint num); - virtual void disableCursorPalette(bool disable); //@} /** @name Events and Time */ //@{ - virtual Common::TimerManager *getTimerManager(); - virtual Common::EventManager *getEventManager(); virtual Common::HardwareKeySet *getHardwareKeySet() { return 0; } //@} @@ -136,18 +129,9 @@ public: //@} - /** @name Audio CD */ - //@{ - - virtual AudioCDManager *getAudioCDManager(); - - //@} - /** @name Miscellaneous */ //@{ - virtual Common::SaveFileManager *getSavefileManager(); - virtual FilesystemFactory *getFilesystemFactory(); virtual void quit(); virtual void displayMessageOnOSD(const char *msg); @@ -157,14 +141,9 @@ protected: /** @name Managers variables */ //@{ - FilesystemFactory *_fsFactory; - Common::EventManager *_eventManager; - Common::SaveFileManager *_savefileManager; - Common::TimerManager *_timerManager; MutexManager *_mutexManager; GraphicsManager *_graphicsManager; Audio::Mixer *_mixer; - AudioCDManager *_audiocdManager; //@} }; diff --git a/backends/module.mk b/backends/module.mk index adef8a2c0a..d1feae4317 100644 --- a/backends/module.mk +++ b/backends/module.mk @@ -7,20 +7,19 @@ MODULE_OBJS := \ events/default/default-events.o \ fs/abstract-fs.o \ fs/stdiostream.o \ - graphics/opengl/glerrorcheck.o \ - graphics/opengl/gltexture.o \ - graphics/opengl/opengl-graphics.o \ - graphics/openglsdl/openglsdl-graphics.o \ - keymapper/action.o \ - keymapper/keymap.o \ - keymapper/keymapper.o \ - keymapper/remap-dialog.o \ log/log.o \ midi/alsa.o \ midi/dmedia.o \ midi/seq.o \ midi/stmidi.o \ midi/timidity.o \ + saves/savefile.o \ + saves/default/default-saves.o \ + timer/default/default-timer.o + + +ifdef USE_ELF_LOADER +MODULE_OBJS += \ plugins/elf/arm-loader.o \ plugins/elf/elf-loader.o \ plugins/elf/elf-provider.o \ @@ -28,23 +27,38 @@ MODULE_OBJS := \ plugins/elf/mips-loader.o \ plugins/elf/ppc-loader.o \ plugins/elf/shorts-segment-manager.o \ - plugins/elf/version.o \ - saves/savefile.o \ - saves/default/default-saves.o \ - timer/default/default-timer.o \ + plugins/elf/version.o +endif + +ifdef ENABLE_KEYMAPPER +MODULE_OBJS += \ + keymapper/action.o \ + keymapper/keymap.o \ + keymapper/keymapper.o \ + keymapper/remap-dialog.o +endif + +ifdef USE_OPENGL +MODULE_OBJS += \ + graphics/opengl/glerrorcheck.o \ + graphics/opengl/gltexture.o \ + graphics/opengl/opengl-graphics.o \ + graphics/openglsdl/openglsdl-graphics.o +endif + +ifdef ENABLE_VKEYBD +MODULE_OBJS += \ vkeybd/image-map.o \ vkeybd/polygon.o \ vkeybd/virtual-keyboard.o \ vkeybd/virtual-keyboard-gui.o \ vkeybd/virtual-keyboard-parser.o +endif # SDL specific source files. # We cannot just check $BACKEND = sdl, as various other backends # derive from the SDL backend, and they all need the following files. -# TODO: Add SDL_BACKEND to config.mk; this would match the fact that -# we also add -DSDL_BACKEND to the DEFINES. -# However, the latter is only done for *most* SDL based stuff, not always -# so we really should unify the relevant code in configure. +ifdef SDL_BACKEND MODULE_OBJS += \ audiocd/sdl/sdl-audiocd.o \ events/sdl/sdl-events.o \ @@ -54,8 +68,9 @@ MODULE_OBJS += \ mutex/sdl/sdl-mutex.o \ plugins/sdl/sdl-provider.o \ timer/sdl/sdl-timer.o +endif -ifdef UNIX +ifdef POSIX MODULE_OBJS += \ fs/posix/posix-fs.o \ fs/posix/posix-fs-factory.o \ @@ -103,14 +118,6 @@ MODULE_OBJS += \ graphics/gph/gph-graphics.o endif -# TODO/FIXME: The gp2xsdl files are only compiled if GP2X_OLD is defined, -# which currently is never the case (unless the user manually requests it). -# ifeq ($(BACKEND),gp2x) -# MODULE_OBJS += \ -# events/gp2xsdl/gp2xsdl-events.o \ -# graphics/gp2xsdl/gp2xsdl-graphics.o -# endif - ifeq ($(BACKEND),linuxmoto) MODULE_OBJS += \ events/linuxmotosdl/linuxmotosdl-events.o \ @@ -147,7 +154,7 @@ MODULE_OBJS += \ timer/psp/timer.o endif -ifeq ($(BACKEND),samsungstv) +ifeq ($(BACKEND),samsungtv) MODULE_OBJS += \ events/samsungtvsdl/samsungtvsdl-events.o \ graphics/samsungtvsdl/samsungtvsdl-graphics.o diff --git a/backends/platform/android/android.cpp b/backends/platform/android/android.cpp index eeeddb4c77..17c7d4f9cb 100644 --- a/backends/platform/android/android.cpp +++ b/backends/platform/android/android.cpp @@ -132,10 +132,7 @@ OSystem_Android::OSystem_Android(int audio_sample_rate, int audio_buffer_size) : _show_mouse(false), _show_overlay(false), _enable_zoning(false), - _savefile(0), _mixer(0), - _timer(0), - _fsFactory(new POSIXFilesystemFactory()), _shake_offset(0), _event_queue_lock(createMutex()), _touch_pt_down(), @@ -149,6 +146,9 @@ OSystem_Android::OSystem_Android(int audio_sample_rate, int audio_buffer_size) : _dpad_scale(4), _fingersDown(0), _trackball_scale(2) { + + _fsFactory = new POSIXFilesystemFactory(); + Common::String mf = getSystemProperty("ro.product.manufacturer"); LOGI("Running on: [%s] [%s] [%s] [%s] [%s] SDK:%s ABI:%s", @@ -170,17 +170,17 @@ OSystem_Android::OSystem_Android(int audio_sample_rate, int audio_buffer_size) : OSystem_Android::~OSystem_Android() { ENTER(); - delete _savefile; - delete _timer; delete _mixer; + _mixer = 0; delete _fsFactory; + _fsFactory = 0; deleteMutex(_event_queue_lock); } void *OSystem_Android::timerThreadFunc(void *arg) { OSystem_Android *system = (OSystem_Android *)arg; - DefaultTimerManager *timer = (DefaultTimerManager *)(system->_timer); + DefaultTimerManager *timer = (DefaultTimerManager *)(system->_timerManager); // renice this thread to boost the audio thread if (setpriority(PRIO_PROCESS, 0, 19) < 0) @@ -359,8 +359,8 @@ void OSystem_Android::initBackend() { // BUG: "transient" ConfMan settings get nuked by the options // screen. Passing the savepath in this way makes it stick // (via ConfMan.registerDefault) - _savefile = new DefaultSaveFileManager(ConfMan.get("savepath")); - _timer = new DefaultTimerManager(); + _savefileManager = new DefaultSaveFileManager(ConfMan.get("savepath")); + _timerManager = new DefaultTimerManager(); gettimeofday(&_startTime, 0); @@ -388,6 +388,8 @@ void OSystem_Android::initBackend() { warning("couldn't renice the main thread"); JNI::setReadyForEvents(true); + + EventsBaseBackend::initBackend(); } void OSystem_Android::addPluginDirectories(Common::FSList &dirs) const { @@ -399,7 +401,7 @@ void OSystem_Android::addPluginDirectories(Common::FSList &dirs) const { bool OSystem_Android::hasFeature(Feature f) { return (f == kFeatureFullscreenMode || f == kFeatureAspectRatioCorrection || - f == kFeatureCursorHasPalette || + f == kFeatureCursorPalette || f == kFeatureVirtualKeyboard || f == kFeatureOverlaySupportsAlpha); } @@ -420,6 +422,11 @@ void OSystem_Android::setFeatureState(Feature f, bool enable) { _virtkeybd_on = enable; showVirtualKeyboard(enable); break; + case kFeatureCursorPalette: + _use_mouse_palette = enable; + if (!enable) + disableCursorPalette(); + break; default: break; } @@ -433,6 +440,8 @@ bool OSystem_Android::getFeatureState(Feature f) { return _ar_correction; case kFeatureVirtualKeyboard: return _virtkeybd_on; + case kFeatureCursorPalette: + return _use_mouse_palette; default: return false; } @@ -526,21 +535,11 @@ void OSystem_Android::showVirtualKeyboard(bool enable) { JNI::showVirtualKeyboard(enable); } -Common::SaveFileManager *OSystem_Android::getSavefileManager() { - assert(_savefile); - return _savefile; -} - Audio::Mixer *OSystem_Android::getMixer() { assert(_mixer); return _mixer; } -Common::TimerManager *OSystem_Android::getTimerManager() { - assert(_timer); - return _timer; -} - void OSystem_Android::getTimeAndDate(TimeDate &td) const { struct tm tm; const time_t curTime = time(0); @@ -554,10 +553,6 @@ void OSystem_Android::getTimeAndDate(TimeDate &td) const { td.tm_year = tm.tm_year; } -FilesystemFactory *OSystem_Android::getFilesystemFactory() { - return _fsFactory; -} - void OSystem_Android::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) { ENTER(""); @@ -568,6 +563,10 @@ void OSystem_Android::addSysArchivesToSearchSet(Common::SearchSet &s, void OSystem_Android::logMessage(LogMessageType::Type type, const char *message) { switch (type) { + case LogMessageType::kInfo: + __android_log_write(ANDROID_LOG_INFO, android_log_tag, message); + break; + case LogMessageType::kDebug: __android_log_write(ANDROID_LOG_DEBUG, android_log_tag, message); break; diff --git a/backends/platform/android/android.h b/backends/platform/android/android.h index 752a31a4db..c2ada2ab77 100644 --- a/backends/platform/android/android.h +++ b/backends/platform/android/android.h @@ -103,7 +103,7 @@ protected: }; #endif -class OSystem_Android : public BaseBackend, public PaletteManager { +class OSystem_Android : public EventsBaseBackend, public PaletteManager { private: // passed from the dark side int _audio_sample_rate; @@ -152,10 +152,7 @@ private: bool _enable_zoning; bool _virtkeybd_on; - Common::SaveFileManager *_savefile; Audio::MixerImpl *_mixer; - Common::TimerManager *_timer; - FilesystemFactory *_fsFactory; timeval _startTime; Common::String getSystemProperty(const char *name) const; @@ -237,6 +234,7 @@ private: void clipMouse(Common::Point &p); void scaleMouse(Common::Point &p, int x, int y, bool deductDrawRect = true); void updateEventScale(); + void disableCursorPalette(); protected: // PaletteManager API @@ -272,7 +270,6 @@ public: int cursorTargetScale, const Graphics::PixelFormat *format); virtual void setCursorPalette(const byte *colors, uint start, uint num); - virtual void disableCursorPalette(bool disable); virtual bool pollEvent(Common::Event &event); virtual uint32 getMillis(); @@ -289,11 +286,8 @@ public: virtual void displayMessageOnOSD(const char *msg); virtual void showVirtualKeyboard(bool enable); - virtual Common::SaveFileManager *getSavefileManager(); virtual Audio::Mixer *getMixer(); virtual void getTimeAndDate(TimeDate &t) const; - virtual Common::TimerManager *getTimerManager(); - virtual FilesystemFactory *getFilesystemFactory(); virtual void logMessage(LogMessageType::Type type, const char *message); virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0); diff --git a/backends/platform/android/gfx.cpp b/backends/platform/android/gfx.cpp index 62226eb8b1..b8a9e74437 100644 --- a/backends/platform/android/gfx.cpp +++ b/backends/platform/android/gfx.cpp @@ -179,7 +179,7 @@ void OSystem_Android::initSurface() { JNI::initSurface(); - // Initialise OpenGLES context. + // Initialize OpenGLES context. GLESTexture::initGLExtensions(); if (_game_texture) @@ -801,12 +801,10 @@ void OSystem_Android::setCursorPalette(const byte *colors, _use_mouse_palette = true; } -void OSystem_Android::disableCursorPalette(bool disable) { - ENTER("%d", disable); - +void OSystem_Android::disableCursorPalette() { // when disabling the cursor palette, and we're running a clut8 game, // it expects the game palette to be used for the cursor - if (disable && _game_texture->hasPalette()) { + if (_game_texture->hasPalette()) { const byte *src = _game_texture->palette_const(); byte *dst = _mouse_texture_palette->palette(); @@ -825,8 +823,6 @@ void OSystem_Android::disableCursorPalette(bool disable) { byte *p = _mouse_texture_palette->palette() + _mouse_keycolor * 2; WRITE_UINT16(p, READ_UINT16(p) & ~1); } - - _use_mouse_palette = !disable; } #endif diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java index c4de6d62f8..ef9f4cc1e0 100644 --- a/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java +++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java @@ -260,7 +260,7 @@ public abstract class ScummVM implements SurfaceHolder.Callback, Runnable { if (_audio_track.getState() != AudioTrack.STATE_INITIALIZED) throw new Exception( - String.format("Error initialising AudioTrack: %d", + String.format("Error initializing AudioTrack: %d", _audio_track.getState())); } diff --git a/backends/platform/dc/Makefile b/backends/platform/dc/Makefile index 0133ffd9e9..6da32a9049 100644 --- a/backends/platform/dc/Makefile +++ b/backends/platform/dc/Makefile @@ -11,9 +11,13 @@ CXX = sh-elf-g++ -ml -m4-single-only LD = $(CXX) CXXFLAGS= -O3 -Wno-multichar -funroll-loops -fschedule-insns2 -fomit-frame-pointer -fdelete-null-pointer-checks -fno-exceptions DEFINES = -D__DC__ -DNONSTANDARD_PORT -DUSE_MAD -DUSE_ZLIB -DDISABLE_DEFAULT_SAVEFILEMANAGER -DDISABLE_TEXT_CONSOLE -DDISABLE_COMMAND_LINE -DUSE_RGB_COLOR +# For release builds: +#DEFINES += -DNOSERIAL LDFLAGS = -Wl,-Ttext,0x8c010000 -nostartfiles $(ronindir)/lib/crt0.o INCLUDES= -I./ -I$(srcdir) -I$(ronindir)/include/ -I$(srcdir)/engines LIBS = -L$(ronindir)/lib -lmad -lronin -lz -lm +# For release builds: +#LIBS = -L$(ronindir)/lib -lmad -lronin-noserial -lz -lm EXECUTABLE = scummvm.elf DEPDIR = .deps CXX_UPDATE_DEP_FLAG = -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP diff --git a/backends/platform/dc/dc-fs.cpp b/backends/platform/dc/dc-fs.cpp index 16547456c3..ac709f62b9 100644 --- a/backends/platform/dc/dc-fs.cpp +++ b/backends/platform/dc/dc-fs.cpp @@ -19,7 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h +#define FORBIDDEN_SYMBOL_ALLOW_ALL #include "dc.h" #include "backends/fs/abstract-fs.h" diff --git a/backends/platform/dc/dc.h b/backends/platform/dc/dc.h index 81f93a077e..bde50daa2d 100644 --- a/backends/platform/dc/dc.h +++ b/backends/platform/dc/dc.h @@ -53,7 +53,7 @@ class DCHardware { }; class DCCDManager : public DefaultAudioCDManager { - // Initialise the specified CD drive for audio playback. + // Initialize the specified CD drive for audio playback. bool openCD(int drive); // Poll cdrom status @@ -70,7 +70,7 @@ class DCCDManager : public DefaultAudioCDManager { void updateCD(); }; -class OSystem_Dreamcast : private DCHardware, public BaseBackend, public PaletteManager, public FilesystemFactory +class OSystem_Dreamcast : private DCHardware, public EventsBaseBackend, public PaletteManager, public FilesystemFactory #ifdef DYNAMIC_MODULES , public FilePluginProvider #endif @@ -145,9 +145,6 @@ public: // Replace the specified range of cursor the palette with new colors. void setCursorPalette(const byte *colors, uint start, uint num); - // Disable or enable cursor palette. - void disableCursorPalette(bool disable); - // Shaking is used in SCUMM. Set current shake position. void setShakePos(int shake_pos); @@ -164,8 +161,6 @@ public: // Returns true if an event was retrieved. bool pollEvent(Common::Event &event); - AudioCDManager *getAudioCDManager() { return _cdManager; } - // Quit void quit(); @@ -190,26 +185,20 @@ public: void setWindowCaption(const char *caption); // Modulatized backend - Common::SaveFileManager *getSavefileManager() { return _savefile; } Audio::Mixer *getMixer() { return _mixer; } - Common::TimerManager *getTimerManager() { return _timer; } // Extra SoftKbd support void mouseToSoftKbd(int x, int y, int &rx, int &ry) const; // Filesystem - FilesystemFactory *getFilesystemFactory() { return this; } AbstractFSNode *makeRootFileNode() const; AbstractFSNode *makeCurrentDirectoryFileNode() const; AbstractFSNode *makeFileNodePath(const Common::String &path) const; private: - Common::SaveFileManager *_savefile; Audio::MixerImpl *_mixer; - DefaultTimerManager *_timer; SoftKeyboard _softkbd; - DCCDManager *_cdManager; int _ms_cur_x, _ms_cur_y, _ms_cur_w, _ms_cur_h, _ms_old_x, _ms_old_y; int _ms_hotspot_x, _ms_hotspot_y, _ms_visible, _devpoll, _last_screen_refresh; diff --git a/backends/platform/dc/dcmain.cpp b/backends/platform/dc/dcmain.cpp index dfce176e90..3faf0185ad 100644 --- a/backends/platform/dc/dcmain.cpp +++ b/backends/platform/dc/dcmain.cpp @@ -20,10 +20,7 @@ * */ -// Allow use of stuff in <time.h> -#define FORBIDDEN_SYMBOL_EXCEPTION_time_h - -#define FORBIDDEN_SYMBOL_EXCEPTION_printf +#define FORBIDDEN_SYMBOL_ALLOW_ALL #include <common/scummsys.h> #include <engines/engine.h> @@ -44,26 +41,29 @@ const char *gGameName; OSystem_Dreamcast::OSystem_Dreamcast() : _devpoll(0), screen(NULL), mouse(NULL), overlay(NULL), _softkbd(this), - _ms_buf(NULL), _timer(NULL), _mixer(NULL), _savefile(NULL), + _ms_buf(NULL), _mixer(NULL), _current_shake_pos(0), _aspect_stretch(false), _softkbd_on(false), _softkbd_motion(0), _enable_cursor_palette(false), _screenFormat(0) { memset(screen_tx, 0, sizeof(screen_tx)); memset(mouse_tx, 0, sizeof(mouse_tx)); memset(ovl_tx, 0, sizeof(ovl_tx)); + _fsFactory = this; } void OSystem_Dreamcast::initBackend() { ConfMan.setInt("autosave_period", 0); - _savefile = createSavefileManager(); - _timer = new DefaultTimerManager(); + _savefileManager = createSavefileManager(); + _timerManager = new DefaultTimerManager(); uint sampleRate = initSound(); _mixer = new Audio::MixerImpl(this, sampleRate); _mixer->setReady(true); - _cdManager = new DCCDManager(); + _audiocdManager = new DCCDManager(); + + EventsBaseBackend::initBackend(); } @@ -163,7 +163,7 @@ bool OSystem_Dreamcast::hasFeature(Feature f) case kFeatureAspectRatioCorrection: case kFeatureVirtualKeyboard: case kFeatureOverlaySupportsAlpha: - case kFeatureCursorHasPalette: + case kFeatureCursorPalette: return true; default: return false; @@ -181,6 +181,9 @@ void OSystem_Dreamcast::setFeatureState(Feature f, bool enable) case kFeatureVirtualKeyboard: _softkbd_on = enable; break; + case kFeatureCursorPalette: + _enable_cursor_palette = enable; + break; default: break; } @@ -193,6 +196,8 @@ bool OSystem_Dreamcast::getFeatureState(Feature f) return _aspect_stretch; case kFeatureVirtualKeyboard: return _softkbd_on; + case kFeatureCursorPalette: + return _enable_cursor_palette; default: return false; } diff --git a/backends/platform/dc/display.cpp b/backends/platform/dc/display.cpp index 56eef870c0..a11e329df3 100644 --- a/backends/platform/dc/display.cpp +++ b/backends/platform/dc/display.cpp @@ -171,11 +171,6 @@ void OSystem_Dreamcast::setCursorPalette(const byte *colors, uint start, uint nu _enable_cursor_palette = true; } -void OSystem_Dreamcast::disableCursorPalette(bool disable) -{ - _enable_cursor_palette = !disable; -} - void OSystem_Dreamcast::grabPalette(byte *colors, uint start, uint num) { const unsigned short *src = palette + start; diff --git a/backends/platform/dc/input.cpp b/backends/platform/dc/input.cpp index 7054ad196e..3759eec6df 100644 --- a/backends/platform/dc/input.cpp +++ b/backends/platform/dc/input.cpp @@ -192,8 +192,8 @@ bool OSystem_Dreamcast::pollEvent(Common::Event &event) { unsigned int t = Timer(); - if (_timer != NULL) - _timer->handler(); + if (_timerManager != NULL) + ((DefaultTimerManager *)_timerManager)->handler(); if (((int)(t-_devpoll))<0) return false; diff --git a/backends/platform/dc/time.cpp b/backends/platform/dc/time.cpp index c343852321..8cc3a71e8d 100644 --- a/backends/platform/dc/time.cpp +++ b/backends/platform/dc/time.cpp @@ -48,8 +48,8 @@ void OSystem_Dreamcast::delayMillis(uint msecs) unsigned int t, start = Timer(); int time = (((unsigned int)msecs)*3125U)>>6; while (((int)((t = Timer())-start))<time) { - if (_timer != NULL) - _timer->handler(); + if (_timerManager != NULL) + ((DefaultTimerManager *)_timerManager)->handler(); checkSound(); } getMillis(); diff --git a/backends/platform/dc/vmsave.cpp b/backends/platform/dc/vmsave.cpp index f18f69efa6..e06dd7fa43 100644 --- a/backends/platform/dc/vmsave.cpp +++ b/backends/platform/dc/vmsave.cpp @@ -20,10 +20,7 @@ * */ -// Allow use of stuff in <time.h> -#define FORBIDDEN_SYMBOL_EXCEPTION_time_h - -#define FORBIDDEN_SYMBOL_EXCEPTION_fprintf +#define FORBIDDEN_SYMBOL_ALLOW_ALL #include <common/scummsys.h> #include "engines/engine.h" diff --git a/backends/platform/dingux/module.mk b/backends/platform/dingux/module.mk index 2247625a04..b924fec1cf 100644 --- a/backends/platform/dingux/module.mk +++ b/backends/platform/dingux/module.mk @@ -4,8 +4,10 @@ MODULE_OBJS := \ main.o \ dingux.o -MODULE_DIRS += \ - backends/platform/dingux/ +# We don't use rules.mk but rather manually update OBJS and MODULE_DIRS. +MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) +OBJS := $(MODULE_OBJS) $(OBJS) +MODULE_DIRS += $(sort $(dir $(MODULE_OBJS))) -# We don't use the rules.mk here on purpose -OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) $(OBJS) +# Hack to ensure the SDL backend is built so we can use OSystem_SDL. +-include $(srcdir)/backends/platform/sdl/module.mk diff --git a/backends/platform/ds/arm9/dist/readme_ds.txt b/backends/platform/ds/arm9/dist/readme_ds.txt index ee1db719f4..24c85ad556 100644 --- a/backends/platform/ds/arm9/dist/readme_ds.txt +++ b/backends/platform/ds/arm9/dist/readme_ds.txt @@ -679,7 +679,7 @@ not supported. Cdex can do the conversion very well and I recommend using it to convert your audio files, although any CD ripping software can be used, so feel -free to use your favourite program. The format you need to use is +free to use your favorite program. The format you need to use is IMA-ADPCM 4-bit Mono. You may use any sample rate. All other formats will be rejected, including uncompressed WAV files. diff --git a/backends/platform/ds/arm9/makefile b/backends/platform/ds/arm9/makefile index 781738265c..1b21b41a9b 100644 --- a/backends/platform/ds/arm9/makefile +++ b/backends/platform/ds/arm9/makefile @@ -75,7 +75,7 @@ else ifdef DS_BUILD_K else - # USE_MAD = 1 + USE_MAD = 1 endif endif endif @@ -245,7 +245,9 @@ ifdef USE_MAD DEFINES += -DUSE_MAD endif -DEFINES += -DREDUCE_MEMORY_USAGE -DDISABLE_DEBUGGER -DUSE_TEXT_CONSOLE -DDISABLE_MASS_ADD -DDISABLE_NES_APU +DEFINES += -DREDUCE_MEMORY_USAGE -DDISABLE_DEBUGGER -DUSE_TEXT_CONSOLE_FOR_DEBUGGER -DDISABLE_MASS_ADD -DDISABLE_NES_APU +# for release builds: +#DEFINES += -DNDEBUG LDFLAGS = -specs=ds_arm9.specs -mthumb-interwork -mno-fpu -Wl,-Map,map.txt -Wl,--gc-sections @@ -259,7 +261,7 @@ BACKEND := ds INCLUDES= -I$(portdir)/$(BUILD) -I$(srcdir) -I$(srcdir)/engines \ -I$(portdir)/data -I$(portdir)/../commoninclude \ -I$(portdir)/source -I$(portdir)/source/mad \ - -I$(libndsdir)/include -include $(srcdir)/common/scummsys.h + -I$(libndsdir)/include -include $(portdir)/source/portdefs.h LIBS = -lm -L$(libndsdir)/lib -L$(portdir)/lib -lnds9 diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index b3146cc16f..dfd906d816 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -575,7 +575,7 @@ void initGame() { for (int r = 0; r < NUM_SUPPORTED_GAMES; r++) { if (!stricmp(gameName, gameList[r].gameId)) { s_currentGame = &gameList[r]; - // consolePrintf("Game list num: %d\n", s_currentGame); + // consolePrintf("Game list num: %d\n", r); } } } @@ -1668,8 +1668,7 @@ void addEventsToQueue() { if (!keyboardEnable) { - - if ((isScrollingWithDPad() || (indyFightState)) && (displayModeIs8Bit)) { + if ((!isScrollingWithDPad() || (indyFightState)) && (displayModeIs8Bit)) { // Controls specific to the control method if (s_currentGame->control == CONT_SKY) { diff --git a/backends/platform/ds/arm9/source/fat/gba_nds_fat.c b/backends/platform/ds/arm9/source/fat/gba_nds_fat.c index 698590418c..76508a1664 100644 --- a/backends/platform/ds/arm9/source/fat/gba_nds_fat.c +++ b/backends/platform/ds/arm9/source/fat/gba_nds_fat.c @@ -1010,7 +1010,7 @@ DIR_ENT FAT_GetDirEntry ( u32 dirCluster, int entry, int origin) dir.name[0] = FILE_FREE; // default to no file found dir.attrib = 0x00; - // Check if fat has been initialised + // Check if fat has been initialized if (filesysBytePerSec == 0) { return (dir); diff --git a/backends/platform/ds/arm9/source/osystem_ds.cpp b/backends/platform/ds/arm9/source/osystem_ds.cpp index 462990cb32..b157a3a87a 100644 --- a/backends/platform/ds/arm9/source/osystem_ds.cpp +++ b/backends/platform/ds/arm9/source/osystem_ds.cpp @@ -41,6 +41,9 @@ #include "touchkeyboard.h" #include "backends/fs/ds/ds-fs-factory.h" +#include "backends/audiocd/default/default-audiocd.h" +#include "backends/timer/default/default-timer.h" + #ifdef ENABLE_AGI #include "wordcompletion.h" #endif @@ -79,7 +82,7 @@ OSystem_DS *OSystem_DS::_instance = NULL; OSystem_DS::OSystem_DS() - : eventNum(0), lastPenFrame(0), queuePos(0), _mixer(NULL), _timer(NULL), _frameBufferExists(false), + : eventNum(0), lastPenFrame(0), queuePos(0), _mixer(NULL), _frameBufferExists(false), _disableCursorPalette(true), _graphicsEnable(true), _gammaValue(0) { // eventNum = 0; @@ -87,13 +90,17 @@ OSystem_DS::OSystem_DS() // queuePos = 0; _instance = this; // _mixer = NULL; - // _timer = NULL; //_frameBufferExists = false; } OSystem_DS::~OSystem_DS() { delete _mixer; - delete _timer; + _mixer = 0; + + // If _savefileManager is not 0, then it points to the OSystem_DS + // member variable mpSaveManager. Hence we set _savefileManager to + // 0, to prevent the OSystem destructor from trying to delete it. + _savefileManager = 0; } int OSystem_DS::timerHandler(int t) { @@ -106,7 +113,11 @@ void OSystem_DS::initBackend() { ConfMan.setInt("autosave_period", 0); ConfMan.setBool("FM_medium_quality", true); - _timer = new DefaultTimerManager(); + if (DS::isGBAMPAvailable()) { + _savefileManager = &mpSaveManager; + } + + _timerManager = new DefaultTimerManager(); DS::setTimerCallback(&OSystem_DS::timerHandler, 10); if (ConfMan.hasKey("22khzaudio", "ds") && ConfMan.getBool("22khzaudio", "ds")) { @@ -118,21 +129,32 @@ void OSystem_DS::initBackend() { _mixer = new Audio::MixerImpl(this, DS::getSoundFrequency()); _mixer->setReady(true); - OSystem::initBackend(); + /* TODO/FIXME: The NDS should use a custom AudioCD manager instance! + if (!_audiocdManager) + _audiocdManager = new DSAudioCDManager(); + */ + + EventsBaseBackend::initBackend(); } bool OSystem_DS::hasFeature(Feature f) { - return (f == kFeatureVirtualKeyboard) || (f == kFeatureCursorHasPalette); + return (f == kFeatureVirtualKeyboard) || (f == kFeatureCursorPalette); } void OSystem_DS::setFeatureState(Feature f, bool enable) { if (f == kFeatureVirtualKeyboard) DS::setKeyboardIcon(enable); + else if (f == kFeatureCursorPalette) { + _disableCursorPalette = !enable; + refreshCursor(); + } } bool OSystem_DS::getFeatureState(Feature f) { if (f == kFeatureVirtualKeyboard) return DS::getKeyboardIcon(); + if (f == kFeatureCursorPalette) + return !_disableCursorPalette; return false; } @@ -734,14 +756,6 @@ void OSystem_DS::quit() { swiSoftReset();*/ } -Common::SaveFileManager *OSystem_DS::getSavefileManager() { - if (DS::isGBAMPAvailable()) { - return &mpSaveManager; - } - return NULL; -} - - Graphics::Surface *OSystem_DS::createTempFrameBuffer() { // Ensure we copy using 16 bit quantities due to limitation of VRAM addressing @@ -840,16 +854,15 @@ void OSystem_DS::setCharactersEntered(int count) { DS::setCharactersEntered(count); } -Common::SeekableReadStream *OSystem_DS::createConfigReadStream() { - Common::FSNode file(DEFAULT_CONFIG_FILE); -// consolePrintf("R %s", DEFAULT_CONFIG_FILE); - return file.createReadStream(); +Common::String OSystem_DS::getDefaultConfigFileName() { + return DEFAULT_CONFIG_FILE; } -Common::WriteStream *OSystem_DS::createConfigWriteStream() { - Common::FSNode file(DEFAULT_CONFIG_FILE); -// consolePrintf("W %s", DEFAULT_CONFIG_FILE); - return file.createWriteStream(); +void OSystem_DS::logMessage(LogMessageType::Type type, const char *message) { +#ifndef DISABLE_TEXT_CONSOLE + nocashMessage((char *)message); +// consolePrintf((char *)message); +#endif } u16 OSystem_DS::applyGamma(u16 color) { diff --git a/backends/platform/ds/arm9/source/osystem_ds.h b/backends/platform/ds/arm9/source/osystem_ds.h index 4ab2e36322..b1222a152d 100644 --- a/backends/platform/ds/arm9/source/osystem_ds.h +++ b/backends/platform/ds/arm9/source/osystem_ds.h @@ -29,13 +29,12 @@ #include "nds.h" #include "gbampsave.h" #include "backends/saves/default/default-saves.h" -#include "backends/timer/default/default-timer.h" #include "audio/mixer_intern.h" #include "graphics/surface.h" #include "graphics/colormasks.h" #include "graphics/palette.h" -class OSystem_DS : public BaseBackend, public PaletteManager { +class OSystem_DS : public EventsBaseBackend, public PaletteManager { protected: int eventNum; @@ -46,7 +45,6 @@ protected: GBAMPSaveFileManager mpSaveManager; Audio::MixerImpl *_mixer; - DefaultTimerManager *_timer; Graphics::Surface _framebuffer; bool _frameBufferExists; bool _graphicsEnable; @@ -140,8 +138,6 @@ public: virtual void quit(); - virtual Common::SaveFileManager *getSavefileManager(); - void addEvent(const Common::Event& e); bool isEventQueueEmpty() const { return queuePos == 0; } @@ -159,7 +155,6 @@ public: virtual Audio::Mixer *getMixer() { return _mixer; } Audio::MixerImpl *getMixerImpl() { return _mixer; } - virtual Common::TimerManager *getTimerManager() { return _timer; } static int timerHandler(int t); @@ -172,14 +167,13 @@ public: virtual void setCursorPalette(const byte *colors, uint start, uint num); - virtual void disableCursorPalette(bool dis) { _disableCursorPalette = dis; refreshCursor(); } - - FilesystemFactory *getFilesystemFactory(); + virtual FilesystemFactory *getFilesystemFactory(); void refreshCursor(); - Common::WriteStream *createConfigWriteStream(); - Common::SeekableReadStream *createConfigReadStream(); + virtual Common::String getDefaultConfigFileName(); + + virtual void logMessage(LogMessageType::Type type, const char *message); u16 applyGamma(u16 color); void setGammaValue(int gamma) { _gammaValue = gamma; } diff --git a/backends/platform/ds/arm9/source/portdefs.h b/backends/platform/ds/arm9/source/portdefs.h index 580eb680eb..f512ce3ea2 100644 --- a/backends/platform/ds/arm9/source/portdefs.h +++ b/backends/platform/ds/arm9/source/portdefs.h @@ -26,8 +26,11 @@ // Include ndstypes.h for uint16 etc. typedefs #include "nds/ndstypes.h" -// Somebody removed these from scummsys.h, but they're still required, so I'm -// adding them here in the hope that they'll stay. +// Define SCUMMVM_DONT_DEFINE_TYPES to prevent scummsys.h from trying to +// re-define those data types. +#define SCUMMVM_DONT_DEFINE_TYPES + +// Include required headers #include <stdio.h> #include <stdlib.h> #include <string.h> diff --git a/backends/platform/gp2x/build/clean.sh b/backends/platform/gp2x/build/clean.sh deleted file mode 100755 index 0979f6c7d6..0000000000 --- a/backends/platform/gp2x/build/clean.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -echo Quick script to make building all the time less painful. - -# Set the paths up here to support the build. - -export PATH=/opt/open2x/gcc-4.1.1-glibc-2.3.6/arm-open2x-linux/bin:$PATH -export PATH=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin:$PATH -export CXX=arm-open2x-linux-g++ -export CC=arm-open2x-linux-gcc -export CXXFLAGS=-march=armv4t -export LDFLAGS=-static - -cd ../../../.. - -echo Cleaning ScummVM for GP2X. -make clean diff --git a/backends/platform/gp2x/gp2x-hw.cpp b/backends/platform/gp2x/gp2x-hw.cpp deleted file mode 100644 index 074c668b5f..0000000000 --- a/backends/platform/gp2x/gp2x-hw.cpp +++ /dev/null @@ -1,228 +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. - * - */ - -/* - * GP2X: Hardware Stuff. - * Thanks to Rlyeh, Snaff, Squidge, Hermes, PS2Reality and RobBrown - * for there help with us all getting to grips with this. - * - */ - -// Disable symbol overrides so that we can use system headers. -#define FORBIDDEN_SYMBOL_ALLOW_ALL - -#include "gp2x-common.h" - -#include "gp2x-hw.h" -#include "gp2x-mem.h" - -// Linux includes to let us goof about with the system in a 'standard' way. -#include <fcntl.h> -#include <pthread.h> -#include <signal.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <sys/mman.h> -#include <sys/ioctl.h> -#include <sys/soundcard.h> -#include <sys/time.h> -#include <unistd.h> - -extern "C" { -static unsigned long gp2x_dev[8]={0,0,0,0,0,0,0,0};//, gp2x_ticks_per_second; -} - -namespace GP2X_HW { - -enum { - VOLUME_NOCHG = 0, - VOLUME_DOWN = 1, - VOLUME_UP = 2, - VOLUME_CHANGE_RATE = 8, - VOLUME_MIN = 0, - VOLUME_INITIAL = 60, - VOLUME_MAX = 100 -}; - -int volumeLevel = VOLUME_INITIAL; - -/* system registers */ -static struct -{ - unsigned short SYSCLKENREG,SYSCSETREG,FPLLVSETREG,DUALINT920,DUALINT940,DUALCTRL940; -} -system_reg; - -static unsigned short dispclockdiv; - -static volatile unsigned short *MEM_REG; - -#define SYS_CLK_FREQ 7372800 - -void deviceInit() { - // Open devices - if (!gp2x_dev[0]) gp2x_dev[0] = open("/dev/mixer", O_RDWR); - if (!gp2x_dev[1]) gp2x_dev[1] = open("/dev/batt", O_RDONLY); - if (!gp2x_dev[2]) gp2x_dev[2] = open("/dev/mem", O_RDWR); -} - -void deviceDeinit() { - // Close devices - { - int i; - for (i=0;i<8;i++) - { - if (gp2x_dev[i]) - { - close(gp2x_dev[i]); - } - } - } - - MEM_REG[0x91c>>1] = system_reg.SYSCSETREG; - MEM_REG[0x910>>1] = system_reg.FPLLVSETREG; - MEM_REG[0x3B40>>1] = system_reg.DUALINT920; - MEM_REG[0x3B42>>1] = system_reg.DUALINT940; - MEM_REG[0x3B48>>1] = system_reg.DUALCTRL940; - MEM_REG[0x904>>1] = system_reg.SYSCLKENREG; - MEM_REG[0x924>>1] = dispclockdiv; - - unpatchMMU(); -} - -void mixerMoveVolume(int direction) { - if (volumeLevel <= 10) { - if (direction == VOLUME_UP) volumeLevel += VOLUME_CHANGE_RATE/2; - if (direction == VOLUME_DOWN) volumeLevel -= VOLUME_CHANGE_RATE/2; - } else { - if(direction == VOLUME_UP) volumeLevel += VOLUME_CHANGE_RATE; - if(direction == VOLUME_DOWN) volumeLevel -= VOLUME_CHANGE_RATE; - } - - if (volumeLevel < VOLUME_MIN) volumeLevel = VOLUME_MIN; - if (volumeLevel > VOLUME_MAX) volumeLevel = VOLUME_MAX; - - unsigned long soundDev = open("/dev/mixer", O_RDWR); - - if(soundDev) { - int vol = ((volumeLevel << 8) | volumeLevel); - ioctl(soundDev, SOUND_MIXER_WRITE_PCM, &vol); - close(soundDev); - } -} - -void setCpuspeed(unsigned int mhz) -{ - set_FCLK(mhz); - set_DCLK_Div(0); - set_920_Div(0); -} - -int getBattLevel() { - int devbatt; - unsigned short currentval=0; - devbatt = open("/dev/batt", O_RDONLY); - read (devbatt, ¤tval, 2); - close (devbatt); - return (currentval); -} - -void set_display_clock_div(unsigned div) -{ - div=((div & 63) | 64)<<8; - MEM_REG[0x924>>1]=(MEM_REG[0x924>>1] & ~(255<<8)) | div; -} - - -void set_FCLK(unsigned MHZ) -{ - unsigned v; - unsigned mdiv,pdiv=3,scale=0; - MHZ*=1000000; - mdiv=(MHZ*pdiv)/SYS_CLK_FREQ; - mdiv=((mdiv-8)<<8) & 0xff00; - pdiv=((pdiv-2)<<2) & 0xfc; - scale&=3; - v=mdiv | pdiv | scale; - MEM_REG[0x910>>1]=v; -} - - -void set_920_Div(unsigned short div) -{ - unsigned short v; - v = MEM_REG[0x91c>>1] & (~0x3); - MEM_REG[0x91c>>1] = (div & 0x7) | v; -} - - -void set_DCLK_Div( unsigned short div ) -{ - unsigned short v; - v = (unsigned short)( MEM_REG[0x91c>>1] & (~(0x7 << 6)) ); - MEM_REG[0x91c>>1] = ((div & 0x7) << 6) | v; -} - - -void Disable_940(void) -{ - MEM_REG[0x3B42>>1]; - MEM_REG[0x3B42>>1]=0; - MEM_REG[0x3B46>>1]=0xffff; - MEM_REG[0x3B48>>1]|= (1 << 7); - MEM_REG[0x904>>1]&=0xfffe; -} - -void gp2x_video_wait_vsync(void) -{ - MEM_REG[0x2846>>1]=(MEM_REG[0x2846>>1] | 0x20) & ~2; - while (!(MEM_REG[0x2846>>1] & 2)); -} - -} /* namespace GP2X_HW */ - -namespace GPH { - -enum { - /* Touchscreen TapMode */ - TAPMODE_LEFT = 0, - TAPMODE_RIGHT = 1, - TAPMODE_HOVER = 2 -}; - -int tapmodeLevel = TAPMODE_LEFT; - -void ToggleTapMode() { - if (tapmodeLevel == TAPMODE_LEFT) { - tapmodeLevel = TAPMODE_RIGHT; - } else if (tapmodeLevel == TAPMODE_RIGHT) { - tapmodeLevel = TAPMODE_HOVER; - } else if (tapmodeLevel == TAPMODE_HOVER) { - tapmodeLevel = TAPMODE_LEFT; - } else { - tapmodeLevel = TAPMODE_LEFT; - } -} - - -} /* namespace GPH */ diff --git a/backends/platform/gp2x/gp2x-hw.h b/backends/platform/gp2x/gp2x-hw.h deleted file mode 100644 index 3c66400124..0000000000 --- a/backends/platform/gp2x/gp2x-hw.h +++ /dev/null @@ -1,62 +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. - * - */ - -/* - * GP2X: Hardware Stuff. - * - */ - -#ifndef GP2X_HW_H -#define GP2X_HW_H - -namespace GP2X_HW { - -#define GP2X_MAXVOL 100 // Highest level permitted by GP2X's mixer -#define SYS_CLK_FREQ 7372800 // Clock Frequency - -extern int volumeLevel; - -extern void deviceInit(); -extern void deviceDeinit(); -extern void mixerMoveVolume(int); -extern void setCpuspeed(unsigned int cpuspeed); -extern int getBattLevel(); - -extern void save_system_regs(void); /* save some registers */ -extern void set_display_clock_div(unsigned div); -extern void set_FCLK(unsigned MHZ); /* adjust the clock frequency (in Mhz units) */ -extern void set_920_Div(unsigned short div); /* 0 to 7 divider (freq=FCLK/(1+div)) */ -extern void set_DCLK_Div(unsigned short div); /* 0 to 7 divider (freq=FCLK/(1+div)) */ -extern void Disable_940(void); /* 940t down */ -extern void gp2x_video_wait_vsync(void); - -} /* namespace GP2X_HW */ - -namespace GPH { - -extern int tapmodeLevel; - -extern void ToggleTapMode(); - -} /* namespace GPH */ - -#endif //GP2X_HW_H diff --git a/backends/platform/gp2x/gp2x-main.cpp b/backends/platform/gp2x/gp2x-main.cpp deleted file mode 100644 index f1ee5ed5f3..0000000000 --- a/backends/platform/gp2x/gp2x-main.cpp +++ /dev/null @@ -1,50 +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 "backends/platform/gp2x/gp2x-common.h" -#include "backends/plugins/sdl/sdl-provider.h" -#include "base/main.h" - -#if defined(GP2X) -int main(int argc, char *argv[]) { - - // Create our OSystem instance - g_system = new OSystem_GP2X(); - assert(g_system); - - // Pre initialize the backend - ((OSystem_GP2X *)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_GP2X *)g_system; - - return res; -} - -#endif diff --git a/backends/platform/gp2x/gp2x-mem.cpp b/backends/platform/gp2x/gp2x-mem.cpp deleted file mode 100644 index 8d22bf8130..0000000000 --- a/backends/platform/gp2x/gp2x-mem.cpp +++ /dev/null @@ -1,84 +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. - * - */ - -/* - * GP2X: Memory tweaking stuff. - * - */ - -// Disable symbol overrides so that we can use system headers. -#define FORBIDDEN_SYMBOL_ALLOW_ALL - -#include <stdio.h> -#include <signal.h> -#include <setjmp.h> -#include <stdlib.h> -#include <fcntl.h> -#include <sys/mman.h> -#include <unistd.h> -#include <string.h> - -#include "backends/platform/gp2x/gp2x-mem.h" - -extern "C" { -static volatile unsigned short *gp2x_memregs; -} - -void SetClock (unsigned c) { - unsigned v; - unsigned mdiv,pdiv=3,scale=0; - - // Set ARM920t clock - c *= 1000000; - mdiv = (c*pdiv) / SYS_CLK_FREQ; - mdiv = ((mdiv-8)<<8) & 0xff00; - pdiv = ((pdiv-2)<<2) & 0xfc; - scale &= 3; - v = mdiv | pdiv | scale; - gp2x_memregs[0x910>>1] = v; -} - -void patchMMU (void) { - //volatile unsigned int *secbuf = (unsigned int *)malloc (204800); - - printf ("Reconfiguring cached memory regions...\n"); - - //hackpgtable(); - //printf ("Sucess...\n"); - - system("/sbin/rmmod mmuhack"); - system("/sbin/insmod -f mmuhack.o"); - - int mmufd = open("/dev/mmuhack", O_RDWR); - - if(mmufd < 0) { - printf ("Upper memory uncached (attempt failed, access to upper memory will be slower)...\n"); - } else { - printf ("Upper memory cached...\n"); - close(mmufd); - } -} - -void unpatchMMU (void) { - printf ("Restoreing cached memory regions...\n"); - system("/sbin/rmmod mmuhack"); -} diff --git a/backends/platform/gp2x/gp2x.cpp b/backends/platform/gp2x/gp2x.cpp deleted file mode 100644 index 4cdb4cd0d5..0000000000 --- a/backends/platform/gp2x/gp2x.cpp +++ /dev/null @@ -1,208 +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. - * - */ - -/* - * GP2X: Main backend. - * - */ - -// Disable symbol overrides so that we can use system headers. -#define FORBIDDEN_SYMBOL_ALLOW_ALL - -#include "backends/platform/sdl/sdl-sys.h" -#include "backends/platform/gp2x/gp2x-common.h" -#include "backends/platform/gp2x/gp2x-hw.h" -#include "backends/platform/gp2x/gp2x-mem.h" - -#include "backends/saves/default/default-saves.h" - -#include "common/config-manager.h" -#include "common/debug.h" - -// Disable for normal serial logging. -#define DUMP_STDOUT - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <limits.h> -#include <errno.h> -#include <sys/stat.h> - -void OSystem_GP2X::initBackend() { - // Setup default save path to be workingdir/saves - char savePath[PATH_MAX + 1]; - char workDirName[PATH_MAX + 1]; - - if (getcwd(workDirName, PATH_MAX) == NULL) { - error("Could not obtain current working directory"); - } else { - printf("Current working directory: %s\n", workDirName); - } - - strcpy(savePath, workDirName); - strcat(savePath, "/saves"); - printf("Current save directory: %s\n", savePath); - struct stat sb; - if (stat(savePath, &sb) == -1) - if (errno == ENOENT) // Create the dir if it does not exist - if (mkdir(savePath, 0755) != 0) - warning("mkdir for '%s' failed", savePath); - - ConfMan.registerDefault("savepath", savePath); - - #ifdef DUMP_STDOUT - // The GP2X has a serial console but most users do not use this so we - // output all our STDOUT and STDERR to files for debug purposes. - char STDOUT_FILE[PATH_MAX + 1]; - char STDERR_FILE[PATH_MAX + 1]; - - strcpy(STDOUT_FILE, workDirName); - strcpy(STDERR_FILE, workDirName); - strcat(STDOUT_FILE, "/scummvm.stdout.txt"); - strcat(STDERR_FILE, "/scummvm.stderr.txt"); - - /* Flush the output in case anything is queued */ - fclose(stdout); - fclose(stderr); - - /* Redirect standard input and standard output */ - FILE *newfp = freopen(STDOUT_FILE, "w", stdout); - if (newfp == NULL) { - #if !defined(stdout) - stdout = fopen(STDOUT_FILE, "w"); - #else - newfp = fopen(STDOUT_FILE, "w"); - if (newfp) { - *stdout = *newfp; - } - #endif - } - - newfp = freopen(STDERR_FILE, "w", stderr); - if (newfp == NULL) { - #if !defined(stderr) - stderr = fopen(STDERR_FILE, "w"); - #else - newfp = fopen(STDERR_FILE, "w"); - if (newfp) { - *stderr = *newfp; - } - #endif - } - - setbuf(stderr, NULL); - printf("%s\n", "Debug: STDOUT and STDERR redirected to text files."); - #endif /* DUMP_STDOUT */ - - // Setup other defaults. - ConfMan.registerDefault("aspect_ratio", true); - - /* Up default volume values as we use a seperate system level volume anyway. */ - ConfMan.registerDefault("music_volume", 192); - ConfMan.registerDefault("sfx_volume", 192); - ConfMan.registerDefault("speech_volume", 192); - ConfMan.registerDefault("autosave_period", 3 * 60); // Trigger autosave every 3 minutes - On low batts 4 mins is about your warning time. - - ConfMan.setBool("FM_low_quality", true); - - /* Initialise any GP2X specific stuff we may want (Batt Status, scaler etc.) */ - GP2X_HW::deviceInit(); - - /* Set Default hardware mixer volume to a preset level (VOLUME_INITIAL). This is done to 'reset' volume level if set by other apps. */ - GP2X_HW::mixerMoveVolume(0); - - // Create the events manager - if (_eventSource == 0) - _eventSource = new GP2XSdlEventSource(); - - // Create the graphics manager - if (_graphicsManager == 0) - _graphicsManager = new GP2XSdlGraphicsManager(_eventSource); - - /* Pass to POSIX method to do the heavy lifting */ - OSystem_POSIX::initBackend(); -} - -void OSystem_GP2X::initSDL() { - // Check if SDL has not been initialized - if (!_initedSDL) { - uint32 sdlFlags = SDL_INIT_EVENTTHREAD; - if (ConfMan.hasKey("disable_sdl_parachute")) - sdlFlags |= SDL_INIT_NOPARACHUTE; - - // Initialize SDL (SDL Subsystems are initiliazed in the corresponding sdl managers) - if (SDL_Init(sdlFlags) == -1) - error("Could not initialize SDL: %s", SDL_GetError()); - - // Enable unicode support if possible - SDL_EnableUNICODE(1); - - _initedSDL = true; - } -} - -void OSystem_GP2X::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) { - /* Setup default extra data paths for engine data files and plugins */ - char workDirName[PATH_MAX + 1]; - - if (getcwd(workDirName, PATH_MAX) == NULL) { - error("Error: Could not obtain current working directory"); - } - - Common::FSNode workdirNode(workDirName); - if (workdirNode.exists() && workdirNode.isDirectory()) { - s.add("__GP2X_WORKDIR__", new Common::FSDirectory(workDirName), priority); - } - - char enginedataPath[PATH_MAX+1]; - - strcpy(enginedataPath, workDirName); - strcat(enginedataPath, "/engine-data"); - - Common::FSNode engineNode(enginedataPath); - if (engineNode.exists() && engineNode.isDirectory()) { - s.add("__GP2X_ENGDATA__", new Common::FSDirectory(enginedataPath), priority); - } - - char pluginsPath[PATH_MAX+1]; - - strcpy(pluginsPath, workDirName); - strcat(pluginsPath, "/plugins"); - - Common::FSNode pluginsNode(pluginsPath); - if (pluginsNode.exists() && pluginsNode.isDirectory()) { - s.add("__GP2X_PLUGINS__", new Common::FSDirectory(pluginsPath), priority); - } -} - -void OSystem_GP2X::quit() { - GP2X_HW::deviceDeinit(); - - #ifdef DUMP_STDOUT - printf("%s\n", "Debug: STDOUT and STDERR text files closed."); - fclose(stdout); - fclose(stderr); - #endif /* DUMP_STDOUT */ - - OSystem_POSIX::quit(); -} diff --git a/backends/platform/gp2x/module.mk b/backends/platform/gp2x/module.mk deleted file mode 100644 index 837ad99d7b..0000000000 --- a/backends/platform/gp2x/module.mk +++ /dev/null @@ -1,12 +0,0 @@ -MODULE := backends/platform/gp2x - -MODULE_OBJS := \ - gp2x-hw.o \ - gp2x-main.o \ - gp2x-mem.o \ - gp2x.o - -# We don't use rules.mk but rather manually update OBJS and MODULE_DIRS. -MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) -OBJS := $(MODULE_OBJS) $(OBJS) -MODULE_DIRS += $(sort $(dir $(MODULE_OBJS))) diff --git a/backends/platform/gph/build/caanoo-config-alleng.sh b/backends/platform/gph/build/caanoo-config-alleng.sh index 97fed942fa..b7836508ed 100644 --- a/backends/platform/gph/build/caanoo-config-alleng.sh +++ b/backends/platform/gph/build/caanoo-config-alleng.sh @@ -8,10 +8,10 @@ echo and let all the build work be done from the backend/build folder. # Edit the configure line to suit. cd ../../../.. -./configure --backend=caanoo --disable-mt32emu --host=caanoo --disable-alsa --disable-flac \ +./configure --backend=caanoo --disable-mt32emu --host=caanoo \ + --disable-alsa --disable-flac \ --disable-nasm --disable-vorbis --disable-hq-scalers \ --with-sdl-prefix=/opt/arm-caanoo/arm-none-linux-gnueabi/usr/bin \ - --with-mpeg2-prefix=/opt/arm-caanoo/arm-none-linux-gnueabi/usr \ --enable-tremor --with-tremor-prefix=/opt/arm-caanoo/arm-none-linux-gnueabi/usr \ --enable-zlib --with-zlib-prefix=/opt/arm-caanoo/arm-none-linux-gnueabi/usr \ --enable-mad --with-mad-prefix=/opt/arm-caanoo/arm-none-linux-gnueabi/usr \ diff --git a/backends/platform/gph/build/caanoo-config.sh b/backends/platform/gph/build/caanoo-config.sh index 11d597481a..fe191647e6 100644 --- a/backends/platform/gph/build/caanoo-config.sh +++ b/backends/platform/gph/build/caanoo-config.sh @@ -8,10 +8,10 @@ echo and let all the build work be done from the backend/build folder. # Edit the configure line to suit. cd ../../../.. -./configure --backend=caanoo --disable-mt32emu --host=caanoo --disable-alsa --disable-flac \ +./configure --backend=caanoo --disable-mt32emu --host=caanoo \ + --disable-alsa --disable-flac \ --disable-nasm --disable-vorbis --disable-hq-scalers \ --with-sdl-prefix=/opt/arm-caanoo/arm-none-linux-gnueabi/usr/bin \ - --with-mpeg2-prefix=/opt/arm-caanoo/arm-none-linux-gnueabi/usr \ --enable-tremor --with-tremor-prefix=/opt/arm-caanoo/arm-none-linux-gnueabi/usr \ --enable-zlib --with-zlib-prefix=/opt/arm-caanoo/arm-none-linux-gnueabi/usr \ --enable-mad --with-mad-prefix=/opt/arm-caanoo/arm-none-linux-gnueabi/usr \ diff --git a/backends/platform/gph/build/gp2x-config-alleng.sh b/backends/platform/gph/build/gp2x-config-alleng.sh index 4a3526d50c..83a4fe2046 100644 --- a/backends/platform/gph/build/gp2x-config-alleng.sh +++ b/backends/platform/gph/build/gp2x-config-alleng.sh @@ -17,7 +17,13 @@ export DEFINES=-DNDEBUG # Edit the configure line to suit. cd ../../../.. -./configure --backend=gp2x --disable-mt32emu --host=gp2x --disable-flac --disable-nasm --disable-hq-scalers --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-all-engines --enable-vkeybd +./configure --backend=gp2x --disable-mt32emu --host=gp2x \ + --disable-flac --disable-nasm --disable-hq-scalers \ + --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin \ + --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ + --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ + --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ + --enable-all-engines --enable-vkeybd #--enable-plugins --default-dynamic echo Generating config for GP2X complete. Check for errors. diff --git a/backends/platform/gph/build/gp2x-config.sh b/backends/platform/gph/build/gp2x-config.sh index 9092b0b1ea..a9b28b2fd0 100644 --- a/backends/platform/gph/build/gp2x-config.sh +++ b/backends/platform/gph/build/gp2x-config.sh @@ -17,8 +17,15 @@ export DEFINES=-DNDEBUG # Edit the configure line to suit. cd ../../../.. -./configure --backend=gp2x --disable-mt32emu --host=gp2x --disable-flac --disable-nasm --disable-hq-scalers --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 --enable-vkeybd --enable-plugins --default-dynamic -# --disable-release --enable-debug +./configure --backend=gp2x --disable-mt32emu --host=gp2x \ + --disable-flac --disable-nasm --disable-hq-scalers \ + --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin \ + --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ + --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ + --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ + --enable-vkeybd + # --enable-plugins --default-dynamic +# --disable-release --enable-debug echo Generating config for GP2X complete. Check for errors. diff --git a/backends/platform/gph/build/gp2xwiz-config-alleng.sh b/backends/platform/gph/build/gp2xwiz-config-alleng.sh index 9ec8a09cd2..ff905d0585 100644 --- a/backends/platform/gph/build/gp2xwiz-config-alleng.sh +++ b/backends/platform/gph/build/gp2xwiz-config-alleng.sh @@ -16,8 +16,9 @@ export LDFLAGS=-L/opt/open2x/gcc-4.1.1-glibc-2.3.6/lib # Edit the configure line to suit. cd ../../../.. -./configure --backend=gph --disable-mt32emu --host=gp2xwiz --disable-flac --disable-nasm --disable-hq-scalers \ - --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ +./configure --backend=gph --disable-mt32emu --host=gp2xwiz \ + --disable-flac --disable-nasm --disable-hq-scalers \ + --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin \ --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ diff --git a/backends/platform/gph/build/gp2xwiz-config.sh b/backends/platform/gph/build/gp2xwiz-config.sh index ac7c34ad12..7be103602b 100644 --- a/backends/platform/gph/build/gp2xwiz-config.sh +++ b/backends/platform/gph/build/gp2xwiz-config.sh @@ -16,8 +16,9 @@ export LDFLAGS=-L/opt/open2x/gcc-4.1.1-glibc-2.3.6/lib # Edit the configure line to suit. cd ../../../.. -./configure --backend=gph --disable-mt32emu --host=gp2xwiz --disable-flac --disable-nasm --disable-hq-scalers \ - --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin --with-mpeg2-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ +./configure --backend=gph --disable-mt32emu --host=gp2xwiz \ + --disable-flac --disable-nasm --disable-hq-scalers \ + --with-sdl-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6/bin \ --enable-tremor --with-tremor-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ --enable-zlib --with-zlib-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ --enable-mad --with-mad-prefix=/opt/open2x/gcc-4.1.1-glibc-2.3.6 \ diff --git a/backends/platform/gph/devices/gp2x/scummvm.gpe b/backends/platform/gph/devices/gp2x/scummvm.gpe index e8983aa2ce..51a49f7560 100644 --- a/backends/platform/gph/devices/gp2x/scummvm.gpe +++ b/backends/platform/gph/devices/gp2x/scummvm.gpe @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # Remount SD with forced Sync, does this really work? mount -o sync,remount /dev/mmcsd/disc0/part1 /mnt/sd/ @@ -8,7 +8,7 @@ mount -o sync,remount /dev/mmcsd/disc0/part1 /mnt/sd/ export LD_LIBRARY_PATH=`pwd`/lib:$LD_LIBRARY_PATH # Run ScummVM, important this bit. -./scummvm.gph +./scummvm.gph --fullscreen --gfx-mode=1x --config=$(pwd)/.scummvmrc # Sync the SD card to check that everything is written. sync diff --git a/backends/platform/gph/gph-backend.cpp b/backends/platform/gph/gph-backend.cpp index 375ee37378..ae3466b836 100644 --- a/backends/platform/gph/gph-backend.cpp +++ b/backends/platform/gph/gph-backend.cpp @@ -56,8 +56,15 @@ /* Dump console info to files. */ #define DUMP_STDOUT +OSystem_GPH::OSystem_GPH() + : + OSystem_POSIX() { +} + void OSystem_GPH::initBackend() { + assert(!_inited); + // Create the events manager if (_eventSource == 0) _eventSource = new GPHEventSource(); @@ -81,7 +88,7 @@ void OSystem_GPH::initBackend() { char workDirName[PATH_MAX+1]; if (getcwd(workDirName, PATH_MAX) == NULL) { - error("Could not obtain current working directory"); + error("Could not obtain current working directory."); } else { printf("Current working directory: %s\n", workDirName); } @@ -141,7 +148,7 @@ void OSystem_GPH::initBackend() { printf("%s\n", "Debug: STDOUT and STDERR redirected to text files."); #endif /* DUMP_STDOUT */ - /* Initialise any GP2X Wiz specific stuff we may want (Batt Status, scaler etc.) */ + /* Initialize any GP2X Wiz specific stuff we may want (Batt Status, scaler etc.) */ WIZ_HW::deviceInit(); /* Set Default hardware mixer volume to a preset level (VOLUME_INITIAL). This is done to 'reset' volume level if set by other apps. */ @@ -155,7 +162,8 @@ void OSystem_GPH::initBackend() { /* Trigger autosave every 4 minutes - On low batts 5 mins is about your warning time. */ ConfMan.registerDefault("autosave_period", 4 * 60); - /* Make sure that aspect ratio correction is enabled on the 1st run to stop users asking me what the 'wasted space' is ;-). */ + /* Make sure that aspect ratio correction is enabled on the 1st run to stop + users asking me what the 'wasted space' at the bottom is ;-). */ ConfMan.registerDefault("aspect_ratio", true); /* Make sure SDL knows that we have a joystick we want to use. */ @@ -164,10 +172,10 @@ void OSystem_GPH::initBackend() { /* Now setup any device specific user options (Left handed mode, that sort of thing). */ // GPH::setOptions(); - printf("%s\n", "Passing to OSystem::SDL initBackend."); - /* Pass to POSIX method to do the heavy lifting */ OSystem_POSIX::initBackend(); + + _inited = true; } void OSystem_GPH::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) { @@ -176,7 +184,7 @@ void OSystem_GPH::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) char workDirName[PATH_MAX+1]; if (getcwd(workDirName, PATH_MAX) == NULL) { - error("Error: Could not obtain current working directory"); + error("Error: Could not obtain current working directory."); } Common::FSNode workdirNode(workDirName); @@ -215,5 +223,5 @@ void OSystem_GPH::quit() { fclose(stderr); #endif /* DUMP_STDOUT */ - OSystem_SDL::quit(); + OSystem_POSIX::quit(); } diff --git a/backends/platform/gph/gph-main.cpp b/backends/platform/gph/gph-main.cpp index f91ec8f478..1a8c6686ca 100644 --- a/backends/platform/gph/gph-main.cpp +++ b/backends/platform/gph/gph-main.cpp @@ -21,7 +21,7 @@ */ #include "backends/platform/gph/gph-sdl.h" -#include "backends/plugins/sdl/sdl-provider.h" +#include "backends/plugins/posix/posix-provider.h" #include "base/main.h" #if defined(GPH_DEVICE) @@ -36,7 +36,7 @@ int main(int argc, char *argv[]) { ((OSystem_GPH *)g_system)->init(); #ifdef DYNAMIC_MODULES - PluginManager::instance().addPluginProvider(new SDLPluginProvider()); + PluginManager::instance().addPluginProvider(new POSIXPluginProvider()); #endif // Invoke the actual ScummVM main entry point: diff --git a/backends/platform/gph/gph-sdl.h b/backends/platform/gph/gph-sdl.h index 68a641eed7..8b943f98f3 100644 --- a/backends/platform/gph/gph-sdl.h +++ b/backends/platform/gph/gph-sdl.h @@ -28,8 +28,8 @@ #include "backends/base-backend.h" #include "backends/platform/sdl/sdl.h" #include "backends/platform/sdl/posix/posix.h" -#include "backends/graphics/gph/gph-graphics.h" #include "backends/events/gph/gph-events.h" +#include "backends/graphics/gph/gph-graphics.h" #define __GP2XWIZ__ @@ -39,6 +39,8 @@ class OSystem_GPH : public OSystem_POSIX { public: + OSystem_GPH(); + /* Platform Setup Stuff */ void addSysArchivesToSearchSet(Common::SearchSet &s, int priority); void initBackend(); diff --git a/backends/platform/gph/module.mk b/backends/platform/gph/module.mk index a9951494d1..d8a1a6cd8d 100644 --- a/backends/platform/gph/module.mk +++ b/backends/platform/gph/module.mk @@ -11,4 +11,4 @@ OBJS := $(MODULE_OBJS) $(OBJS) MODULE_DIRS += $(sort $(dir $(MODULE_OBJS))) # Hack to ensure the SDL backend is built so we can use OSystem_SDL. --include $(srcdir)/backends/platform/sdl/module.mk
\ No newline at end of file +-include $(srcdir)/backends/platform/sdl/module.mk diff --git a/backends/platform/iphone/iphone_video.h b/backends/platform/iphone/iphone_video.h index 8e0ffc19cb..223f025978 100644 --- a/backends/platform/iphone/iphone_video.h +++ b/backends/platform/iphone/iphone_video.h @@ -67,6 +67,7 @@ - (void)updateMainSurface; - (void)updateOverlaySurface; - (void)updateMouseSurface; +- (void)clearColorBuffer; -(void)updateMouseCursor; diff --git a/backends/platform/iphone/iphone_video.m b/backends/platform/iphone/iphone_video.m index 006603df64..04d25cebf8 100644 --- a/backends/platform/iphone/iphone_video.m +++ b/backends/platform/iphone/iphone_video.m @@ -85,6 +85,8 @@ void iPhone_setMouseCursor(short* buffer, int width, int height) { void iPhone_enableOverlay(int state) { _overlayIsEnabled = state; + + [sharedInstance performSelectorOnMainThread:@selector(clearColorBuffer) withObject:nil waitUntilDone: YES]; } int iPhone_getScreenHeight() { @@ -478,12 +480,7 @@ bool getLocalMouseCoords(CGPoint *point) { glBindRenderbufferOES(GL_RENDERBUFFER_OES, _viewRenderbuffer); printOpenGLError(); - // The color buffer is triple-buffered, so we clear it multiple times right away to avid doing any glClears later. - int clearCount = 5; - while (clearCount-- > 0) { - glClear(GL_COLOR_BUFFER_BIT); printOpenGLError(); - [_context presentRenderbuffer:GL_RENDERBUFFER_OES]; - } + [self clearColorBuffer]; if (_keyboardView != nil) { [_keyboardView removeFromSuperview]; @@ -535,6 +532,15 @@ bool getLocalMouseCoords(CGPoint *point) { } } +- (void)clearColorBuffer { + // The color buffer is triple-buffered, so we clear it multiple times right away to avid doing any glClears later. + int clearCount = 5; + while (clearCount-- > 0) { + glClear(GL_COLOR_BUFFER_BIT); printOpenGLError(); + [_context presentRenderbuffer:GL_RENDERBUFFER_OES]; + } +} + - (id)getEvent { if (_events == nil || [_events count] == 0) { return nil; diff --git a/backends/platform/iphone/osys_events.cpp b/backends/platform/iphone/osys_events.cpp index 6e2a4b7e1e..1ab1db0f27 100644 --- a/backends/platform/iphone/osys_events.cpp +++ b/backends/platform/iphone/osys_events.cpp @@ -335,9 +335,9 @@ bool OSystem_IPHONE::handleEvent_mouseSecondDragged(Common::Event &event, int x, const char *dialogMsg; if (_mouseClickAndDragEnabled) { _touchpadModeEnabled = false; - dialogMsg = "Mouse-click-and-drag mode enabled."; + dialogMsg = _("Mouse-click-and-drag mode enabled."); } else - dialogMsg = "Mouse-click-and-drag mode disabled."; + dialogMsg = _("Mouse-click-and-drag mode disabled."); GUI::TimedMessageDialog dialog(dialogMsg, 1500); dialog.runModal(); return false; diff --git a/backends/platform/iphone/osys_main.cpp b/backends/platform/iphone/osys_main.cpp index 12317ad935..4bc567c39d 100644 --- a/backends/platform/iphone/osys_main.cpp +++ b/backends/platform/iphone/osys_main.cpp @@ -53,7 +53,7 @@ SoundProc OSystem_IPHONE::s_soundCallback = NULL; void *OSystem_IPHONE::s_soundParam = NULL; OSystem_IPHONE::OSystem_IPHONE() : - _savefile(NULL), _mixer(NULL), _timer(NULL), _offscreen(NULL), + _mixer(NULL), _offscreen(NULL), _overlayVisible(false), _fullscreen(NULL), _mouseHeight(0), _mouseWidth(0), _mouseBuf(NULL), _lastMouseTap(0), _queuedEventTime(0), _secondaryTapped(false), _lastSecondaryTap(0), @@ -72,10 +72,7 @@ OSystem_IPHONE::OSystem_IPHONE() : OSystem_IPHONE::~OSystem_IPHONE() { AudioQueueDispose(s_AudioQueue.queue, true); - delete _fsFactory; - delete _savefile; delete _mixer; - delete _timer; delete _offscreen; delete _fullscreen; } @@ -88,12 +85,12 @@ int OSystem_IPHONE::timerHandler(int t) { void OSystem_IPHONE::initBackend() { #ifdef IPHONE_OFFICIAL - _savefile = new DefaultSaveFileManager(iPhone_getDocumentsDir()); + _savefileManager = new DefaultSaveFileManager(iPhone_getDocumentsDir()); #else - _savefile = new DefaultSaveFileManager(SCUMMVM_SAVE_PATH); + _savefileManager = new DefaultSaveFileManager(SCUMMVM_SAVE_PATH); #endif - _timer = new DefaultTimerManager(); + _timerManager = new DefaultTimerManager(); gettimeofday(&_startTime, NULL); @@ -101,7 +98,7 @@ void OSystem_IPHONE::initBackend() { setTimerCallback(&OSystem_IPHONE::timerHandler, 10); - OSystem::initBackend(); + EventsBaseBackend::initBackend(); } bool OSystem_IPHONE::hasFeature(Feature f) { @@ -210,48 +207,25 @@ void OSystem_IPHONE::getTimeAndDate(TimeDate &td) const { td.tm_year = t.tm_year; } -Common::SaveFileManager *OSystem_IPHONE::getSavefileManager() { - assert(_savefile); - return _savefile; -} - Audio::Mixer *OSystem_IPHONE::getMixer() { assert(_mixer); return _mixer; } -Common::TimerManager *OSystem_IPHONE::getTimerManager() { - assert(_timer); - return _timer; -} - OSystem *OSystem_IPHONE_create() { return new OSystem_IPHONE(); } -Common::SeekableReadStream *OSystem_IPHONE::createConfigReadStream() { +Common::String OSystem_IPHONE::getDefaultConfigFileName() { #ifdef IPHONE_OFFICIAL - char buf[256]; - strncpy(buf, iPhone_getDocumentsDir(), 256); - strncat(buf, "/Preferences", 256 - strlen(buf) ); - Common::FSNode file(buf); + Common::String path = iPhone_getDocumentsDir(); + path += "/Preferences"; + return path; #else - Common::FSNode file(SCUMMVM_PREFS_PATH); + return SCUMMVM_PREFS_PATH; #endif - return file.createReadStream(); } -Common::WriteStream *OSystem_IPHONE::createConfigWriteStream() { -#ifdef IPHONE_OFFICIAL - char buf[256]; - strncpy(buf, iPhone_getDocumentsDir(), 256); - strncat(buf, "/Preferences", 256 - strlen(buf) ); - Common::FSNode file(buf); -#else - Common::FSNode file(SCUMMVM_PREFS_PATH); -#endif - return file.createWriteStream(); -} void OSystem_IPHONE::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) { // Get URL of the Resource directory of the .app bundle @@ -268,6 +242,18 @@ void OSystem_IPHONE::addSysArchivesToSearchSet(Common::SearchSet &s, int priorit } } +void OSystem_IPHONE::logMessage(LogMessageType::Type type, const char *message) { + FILE *output = 0; + + if (type == LogMessageType::kInfo || type == LogMessageType::kDebug) + output = stdout; + else + output = stderr; + + fputs(message, output); + fflush(output); +} + void iphone_main(int argc, char *argv[]) { //OSystem_IPHONE::migrateApp(); diff --git a/backends/platform/iphone/osys_main.h b/backends/platform/iphone/osys_main.h index 1ff87967a1..37896cceeb 100644 --- a/backends/platform/iphone/osys_main.h +++ b/backends/platform/iphone/osys_main.h @@ -49,7 +49,7 @@ typedef struct AQCallbackStruct { AudioStreamBasicDescription dataFormat; } AQCallbackStruct; -class OSystem_IPHONE : public BaseBackend, public PaletteManager { +class OSystem_IPHONE : public EventsBaseBackend, public PaletteManager { protected: static const OSystem::GraphicsMode s_supportedGraphicsModes[]; @@ -57,9 +57,7 @@ protected: static SoundProc s_soundCallback; static void *s_soundParam; - Common::SaveFileManager *_savefile; Audio::MixerImpl *_mixer; - Common::TimerManager *_timer; Graphics::Surface _framebuffer; byte *_offscreen; @@ -110,7 +108,6 @@ protected: bool _fullScreenIsDirty; bool _fullScreenOverlayIsDirty; int _screenChangeCount; - FilesystemFactory *_fsFactory; public: @@ -173,19 +170,17 @@ public: virtual int getScreenChangeID() const { return _screenChangeCount; } virtual void quit(); - FilesystemFactory *getFilesystemFactory() { return _fsFactory; } virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0); virtual void getTimeAndDate(TimeDate &t) const; - virtual Common::SaveFileManager *getSavefileManager(); virtual Audio::Mixer *getMixer(); - virtual Common::TimerManager *getTimerManager(); void startSoundsystem(); void stopSoundsystem(); - virtual Common::SeekableReadStream *createConfigReadStream(); - virtual Common::WriteStream *createConfigWriteStream(); + virtual Common::String getDefaultConfigFileName(); + + virtual void logMessage(LogMessageType::Type type, const char *message); protected: void internUpdateScreen(); diff --git a/backends/platform/iphone/osys_video.cpp b/backends/platform/iphone/osys_video.cpp index 263cbd2bcc..fa425b108a 100644 --- a/backends/platform/iphone/osys_video.cpp +++ b/backends/platform/iphone/osys_video.cpp @@ -349,6 +349,7 @@ void OSystem_IPHONE::showOverlay() { //printf("showOverlay()\n"); _overlayVisible = true; dirtyFullOverlayScreen(); + updateScreen(); iPhone_enableOverlay(true); } @@ -368,7 +369,7 @@ void OSystem_IPHONE::clearOverlay() { void OSystem_IPHONE::grabOverlay(OverlayColor *buf, int pitch) { //printf("grabOverlay()\n"); - int h = _screenHeight; + int h = _overlayHeight; OverlayColor *src = _overlayBuffer; do { diff --git a/backends/platform/linuxmoto/module.mk b/backends/platform/linuxmoto/module.mk index c604d69da1..4c81aac3f2 100644 --- a/backends/platform/linuxmoto/module.mk +++ b/backends/platform/linuxmoto/module.mk @@ -10,5 +10,5 @@ MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) OBJS := $(MODULE_OBJS) $(OBJS) MODULE_DIRS += $(sort $(dir $(MODULE_OBJS))) -# HACK: The linuxmoto backend is based on the SDL one, so we load that, too. -include $(srcdir)/backends/platform/sdl/module.mk +# Hack to ensure the SDL backend is built so we can use OSystem_SDL. +-include $(srcdir)/backends/platform/sdl/module.mk diff --git a/backends/platform/n64/osys_n64.h b/backends/platform/n64/osys_n64.h index 8c0b34ce32..285e2afa55 100644 --- a/backends/platform/n64/osys_n64.h +++ b/backends/platform/n64/osys_n64.h @@ -27,8 +27,6 @@ #include "common/config-manager.h" #include "backends/base-backend.h" -#include "backends/saves/default/default-saves.h" -#include "backends/timer/default/default-timer.h" #include "base/main.h" @@ -73,12 +71,9 @@ enum GraphicModeID { OVERS_MPAL_340X240 }; -class OSystem_N64 : public BaseBackend, public PaletteManager { +class OSystem_N64 : public EventsBaseBackend, public PaletteManager { protected: - Common::SaveFileManager *_savefile; Audio::MixerImpl *_mixer; - Common::TimerManager *_timer; - FilesystemFactory *_fsFactory; struct display_context * _dc; // Display context for N64 on screen buffer switching @@ -189,7 +184,6 @@ public: virtual void warpMouse(int x, int y); virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, int cursorTargetScale, const Graphics::PixelFormat *format); virtual void setCursorPalette(const byte *colors, uint start, uint num); - virtual void disableCursorPalette(bool disable); virtual bool pollEvent(Common::Event &event); virtual uint32 getMillis(); @@ -202,12 +196,10 @@ public: virtual void quit(); - virtual Common::SaveFileManager *getSavefileManager(); virtual Audio::Mixer *getMixer(); virtual void getTimeAndDate(TimeDate &t) const; - virtual Common::TimerManager *getTimerManager(); virtual void setTimerCallback(TimerProc callback, int interval); - FilesystemFactory *getFilesystemFactory(); + virtual void logMessage(LogMessageType::Type type, const char *message); void rebuildOffscreenGameBuffer(void); void rebuildOffscreenMouseBuffer(void); diff --git a/backends/platform/n64/osys_n64_base.cpp b/backends/platform/n64/osys_n64_base.cpp index 094bb839d3..4bc3780fe2 100644 --- a/backends/platform/n64/osys_n64_base.cpp +++ b/backends/platform/n64/osys_n64_base.cpp @@ -30,6 +30,8 @@ #include "pakfs_save_manager.h" #include "framfs_save_manager.h" #include "backends/fs/n64/n64-fs-factory.h" +#include "backends/saves/default/default-saves.h" +#include "backends/timer/default/default-timer.h" typedef unsigned long long uint64; @@ -137,9 +139,7 @@ OSystem_N64::OSystem_N64() { _mouseMaxX = _overlayWidth; _mouseMaxY = _overlayHeight; - _savefile = 0; _mixer = 0; - _timer = 0; _dirtyOffscreen = false; @@ -154,10 +154,7 @@ OSystem_N64::OSystem_N64() { } OSystem_N64::~OSystem_N64() { - delete _savefile; delete _mixer; - delete _timer; - delete _fsFactory; } void OSystem_N64::initBackend() { @@ -170,7 +167,7 @@ void OSystem_N64::initBackend() { if (FRAM_Detect()) { // Use FlashRAM initFramFS(); - _savefile = new FRAMSaveManager(); + _savefileManager = new FRAMSaveManager(); } else { // Use PakFS // Init Controller Pak initPakFs(); @@ -185,28 +182,36 @@ void OSystem_N64::initBackend() { } } - _savefile = new PAKSaveManager(); + _savefileManager = new PAKSaveManager(); } - _timer = new DefaultTimerManager(); + _timerManager = new DefaultTimerManager(); setTimerCallback(&timer_handler, 10); setupMixer(); - OSystem::initBackend(); - + EventsBaseBackend::initBackend(); } bool OSystem_N64::hasFeature(Feature f) { - return (f == kFeatureCursorHasPalette); + return (f == kFeatureCursorPalette); } void OSystem_N64::setFeatureState(Feature f, bool enable) { - return; + if (f == kFeatureCursorPalette) { + _cursorPaletteDisabled = !enable; + + // Rebuild cursor hicolor buffer + rebuildOffscreenMouseBuffer(); + + _dirtyOffscreen = true; + } } bool OSystem_N64::getFeatureState(Feature f) { + if (f == kFeatureCursorPalette) + return !_cursorPaletteDisabled; return false; } @@ -437,15 +442,6 @@ void OSystem_N64::setCursorPalette(const byte *colors, uint start, uint num) { _dirtyOffscreen = true; } -void OSystem_N64::disableCursorPalette(bool disable) { - _cursorPaletteDisabled = disable; - - // Rebuild cursor hicolor buffer - rebuildOffscreenMouseBuffer(); - - _dirtyOffscreen = true; -} - void OSystem_N64::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) { //Clip the coordinates if (x < 0) { @@ -852,21 +848,11 @@ void OSystem_N64::quit() { return; } -Common::SaveFileManager *OSystem_N64::getSavefileManager() { - assert(_savefile); - return _savefile; -} - Audio::Mixer *OSystem_N64::getMixer() { assert(_mixer); return _mixer; } -Common::TimerManager *OSystem_N64::getTimerManager() { - assert(_timer); - return _timer; -} - void OSystem_N64::getTimeAndDate(TimeDate &t) const { // No RTC inside the N64, read mips timer to simulate // passing of time, not a perfect solution, but can't think @@ -884,8 +870,16 @@ void OSystem_N64::getTimeAndDate(TimeDate &t) const { return; } -FilesystemFactory *OSystem_N64::getFilesystemFactory() { - return _fsFactory; +void OSystem_N64::logMessage(LogMessageType::Type type, const char *message) { + FILE *output = 0; + + if (type == LogMessageType::kInfo || type == LogMessageType::kDebug) + output = stdout; + else + output = stderr; + + fputs(message, output); + fflush(output); } void OSystem_N64::setTimerCallback(TimerProc callback, int interval) { diff --git a/backends/platform/n64/osys_n64_utilities.cpp b/backends/platform/n64/osys_n64_utilities.cpp index 8d9f0471d3..0622e6423d 100644 --- a/backends/platform/n64/osys_n64_utilities.cpp +++ b/backends/platform/n64/osys_n64_utilities.cpp @@ -21,6 +21,7 @@ */ #include "osys_n64.h" +#include "backends/timer/default/default-timer.h" void checkTimers(void) { OSystem_N64 *osys = (OSystem_N64 *)g_system; diff --git a/backends/platform/n64/portdefs.h b/backends/platform/n64/portdefs.h index e62551355d..35ef3c71db 100644 --- a/backends/platform/n64/portdefs.h +++ b/backends/platform/n64/portdefs.h @@ -35,5 +35,18 @@ #undef assert #define assert(x) ((x) ? 0 : (print_error("ASSERT TRIGGERED:\n\n("#x")\n%s\nline: %d", __FILE__, __LINE__))) +// Typedef basic data types in a way that is compatible with the N64 SDK. +typedef unsigned char byte; +typedef unsigned char uint8; +typedef signed char int8; +typedef unsigned short int uint16; +typedef signed short int int16; +typedef unsigned int uint32; +typedef signed int int32; + +// Define SCUMMVM_DONT_DEFINE_TYPES to prevent scummsys.h from trying to +// re-define those data types. +#define SCUMMVM_DONT_DEFINE_TYPES + #endif diff --git a/backends/platform/null/null.cpp b/backends/platform/null/null.cpp index 7dd127fefa..4690a67c55 100644 --- a/backends/platform/null/null.cpp +++ b/backends/platform/null/null.cpp @@ -34,7 +34,7 @@ */ #if defined(__amigaos4__) #include "backends/fs/amigaos4/amigaos4-fs-factory.h" -#elif defined(UNIX) +#elif defined(POSIX) #include "backends/fs/posix/posix-fs-factory.h" #elif defined(WIN32) #include "backends/fs/windows/windows-fs-factory.h" @@ -53,14 +53,13 @@ public: virtual void delayMillis(uint msecs); virtual void getTimeAndDate(TimeDate &t) const {} - virtual Common::SeekableReadStream *createConfigReadStream(); - virtual Common::WriteStream *createConfigWriteStream(); + virtual void logMessage(LogMessageType::Type type, const char *message); }; OSystem_NULL::OSystem_NULL() { #if defined(__amigaos4__) _fsFactory = new AmigaOSFilesystemFactory(); - #elif defined(UNIX) + #elif defined(POSIX) _fsFactory = new POSIXFilesystemFactory(); #elif defined(WIN32) _fsFactory = new WindowsFilesystemFactory(); @@ -73,12 +72,11 @@ OSystem_NULL::~OSystem_NULL() { } void OSystem_NULL::initBackend() { - _mutexManager = (MutexManager *)new NullMutexManager(); + _mutexManager = new NullMutexManager(); _timerManager = new DefaultTimerManager(); _eventManager = new DefaultEventManager(this); _savefileManager = new DefaultSaveFileManager(); - _graphicsManager = (GraphicsManager *)new NullGraphicsManager(); - _audiocdManager = (AudioCDManager *)new DefaultAudioCDManager(); + _graphicsManager = new NullGraphicsManager(); _mixer = new Audio::MixerImpl(this, 22050); ((Audio::MixerImpl *)_mixer)->setReady(false); @@ -87,7 +85,7 @@ void OSystem_NULL::initBackend() { // this way; they need to be hooked into the system somehow to // be functional. Of course, can't do that in a NULL backend :). - OSystem::initBackend(); + ModularBackend::initBackend(); } bool OSystem_NULL::pollEvent(Common::Event &event) { @@ -101,16 +99,16 @@ uint32 OSystem_NULL::getMillis() { void OSystem_NULL::delayMillis(uint msecs) { } -#define DEFAULT_CONFIG_FILE "scummvm.ini" +void OSystem_NULL::logMessage(LogMessageType::Type type, const char *message) { + FILE *output = 0; -Common::SeekableReadStream *OSystem_NULL::createConfigReadStream() { - Common::FSNode file(DEFAULT_CONFIG_FILE); - return file.createReadStream(); -} + if (type == LogMessageType::kInfo || type == LogMessageType::kDebug) + output = stdout; + else + output = stderr; -Common::WriteStream *OSystem_NULL::createConfigWriteStream() { - Common::FSNode file(DEFAULT_CONFIG_FILE); - return file.createWriteStream(); + fputs(message, output); + fflush(output); } OSystem *OSystem_NULL_create() { diff --git a/backends/platform/openpandora/build/config-alleng.sh b/backends/platform/openpandora/build/config-alleng.sh index f3fa1a0f94..4028f5f4de 100755 --- a/backends/platform/openpandora/build/config-alleng.sh +++ b/backends/platform/openpandora/build/config-alleng.sh @@ -19,7 +19,6 @@ export DEFINES=-DNDEBUG cd ../../../.. ./configure --backend=openpandora --host=openpandora --disable-nasm \ --with-sdl-prefix=/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr/bin \ - --with-mpeg2-prefix=/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr \ --disable-vorbis --enable-tremor --with-tremor-prefix=/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr \ --enable-zlib --with-zlib-prefix=/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr \ --enable-mad --with-mad-prefix=/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr \ diff --git a/backends/platform/openpandora/build/config.sh b/backends/platform/openpandora/build/config.sh index 9bc52a9bc4..92476c5525 100755 --- a/backends/platform/openpandora/build/config.sh +++ b/backends/platform/openpandora/build/config.sh @@ -19,7 +19,6 @@ export DEFINES=-DNDEBUG cd ../../../.. ./configure --backend=openpandora --host=openpandora --disable-nasm \ --with-sdl-prefix=/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr/bin \ - --with-mpeg2-prefix=/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr \ --disable-vorbis --enable-tremor --with-tremor-prefix=/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr \ --enable-zlib --with-zlib-prefix=/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr \ --enable-mad --with-mad-prefix=/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr \ diff --git a/backends/platform/openpandora/module.mk b/backends/platform/openpandora/module.mk index 8e60b87aa6..5bd568e1c4 100755 --- a/backends/platform/openpandora/module.mk +++ b/backends/platform/openpandora/module.mk @@ -5,11 +5,10 @@ MODULE_OBJS := \ op-backend.o \ op-main.o -MODULE_DIRS += \ - backends/platform/openpandora/ - -# We don't use the rules.mk here on purpose -OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) $(OBJS) +# We don't use rules.mk but rather manually update OBJS and MODULE_DIRS. +MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) +OBJS := $(MODULE_OBJS) $(OBJS) +MODULE_DIRS += $(sort $(dir $(MODULE_OBJS))) # Hack to ensure the SDL backend is built so we can use OSystem_SDL. -include $(srcdir)/backends/platform/sdl/module.mk diff --git a/backends/platform/openpandora/op-backend.cpp b/backends/platform/openpandora/op-backend.cpp index 4c29636e40..5231e9790d 100644 --- a/backends/platform/openpandora/op-backend.cpp +++ b/backends/platform/openpandora/op-backend.cpp @@ -20,13 +20,16 @@ * */ +#if defined(OPENPANDORA) + // Disable symbol overrides so that we can use system headers. #define FORBIDDEN_SYMBOL_ALLOW_ALL -#include "backends/platform/openpandora/op-sdl.h" -#include "base/main.h" +#include "backends/platform/sdl/sdl-sys.h" #include "backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h" +#include "backends/platform/openpandora/op-sdl.h" +#include "backends/plugins/posix/posix-provider.h" #include "backends/saves/default/default-saves.h" #include "backends/timer/default/default-timer.h" @@ -35,6 +38,7 @@ #include "common/debug.h" #include "common/events.h" #include "common/file.h" +#include "common/textconsole.h" #include "common/util.h" #include "audio/mixer_intern.h" @@ -52,15 +56,29 @@ static SDL_Cursor *hiddenCursor; -static Uint32 timer_handler(Uint32 interval, void *param) { - ((DefaultTimerManager *)param)->handler(); - return interval; +OSystem_OP::OSystem_OP() + : + OSystem_POSIX() { } +//static Uint32 timer_handler(Uint32 interval, void *param) { +// ((DefaultTimerManager *)param)->handler(); +// return interval; +//} + void OSystem_OP::initBackend() { assert(!_inited); + // Create the events manager + if (_eventSource == 0) + _eventSource = new OPEventSource(); + + // Create the graphics manager + if (_graphicsManager == 0) { + _graphicsManager = new OPGraphicsManager(_eventSource); + } + // int joystick_num = ConfMan.getInt("joystick_num"); // uint32 sdlFlags = SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER; // @@ -76,12 +94,12 @@ void OSystem_OP::initBackend() { // // Create the mixer manager - if (_mixer == 0) { - _mixerManager = new DoubleBufferSDLMixerManager(); +// if (_mixer == 0) { +// _mixerManager = new DoubleBufferSDLMixerManager(); // Setup and start mixer - _mixerManager->init(); - } +// _mixerManager->init(); +// } /* Setup default save path to be workingdir/saves */ @@ -103,7 +121,7 @@ void OSystem_OP::initBackend() { if (mkdir(savePath, 0755) != 0) warning("mkdir for '%s' failed!", savePath); -// _savefileManager = new DefaultSaveFileManager(savePath); + _savefileManager = new DefaultSaveFileManager(savePath); #ifdef DUMP_STDOUT // The OpenPandora has a serial console on the EXT connection but most users do not use this so we @@ -161,24 +179,14 @@ void OSystem_OP::initBackend() { /* Make sure SDL knows that we have a joystick we want to use. */ ConfMan.setInt("joystick_num", 0); - // Create the events manager - if (_eventSource == 0) - _eventSource = new OPEventSource(); - - // Create the graphics manager - if (_graphicsManager == 0) - _graphicsManager = new OPGraphicsManager(_eventSource); - // _graphicsMutex = createMutex(); - // Invoke parent implementation of this method + /* Pass to POSIX method to do the heavy lifting */ OSystem_POSIX::initBackend(); _inited = true; } - - // enable joystick // if (joystick_num > -1 && SDL_NumJoysticks() > 0) { // printf("Using joystick: %s\n", SDL_JoystickName(0)); @@ -239,13 +247,14 @@ void OSystem_OP::initSDL() { // _videoMode.fullscreen = true; _initedSDL = true; + +// OSystem_POSIX::initSDL(); } } void OSystem_OP::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) { /* Setup default extra data paths for engine data files and plugins */ - char workDirName[PATH_MAX+1]; if (getcwd(workDirName, PATH_MAX) == NULL) { @@ -276,3 +285,5 @@ void OSystem_OP::quit() { OSystem_POSIX::quit(); } + +#endif diff --git a/backends/platform/openpandora/op-main.cpp b/backends/platform/openpandora/op-main.cpp index ab777fec8f..bb359e7204 100644 --- a/backends/platform/openpandora/op-main.cpp +++ b/backends/platform/openpandora/op-main.cpp @@ -20,10 +20,8 @@ * */ - -#include "backends/platform/sdl/sdl-sys.h" #include "backends/platform/openpandora/op-sdl.h" -#include "backends/plugins/posix/posix-provider.h" +#include "backends/plugins/sdl/sdl-provider.h" #include "base/main.h" #if defined(OPENPANDORA) @@ -35,10 +33,10 @@ int main(int argc, char *argv[]) { assert(g_system); // Pre initialize the backend - //((OSystem_OP *)g_system)->init(); + ((OSystem_OP *)g_system)->init(); #ifdef DYNAMIC_MODULES - PluginManager::instance().addPluginProvider(new POSIXPluginProvider()); + PluginManager::instance().addPluginProvider(new SDLPluginProvider()); #endif // Invoke the actual ScummVM main entry point: diff --git a/backends/platform/openpandora/op-sdl.h b/backends/platform/openpandora/op-sdl.h index 9d92472b17..d493c3957c 100644 --- a/backends/platform/openpandora/op-sdl.h +++ b/backends/platform/openpandora/op-sdl.h @@ -26,12 +26,12 @@ #if defined(OPENPANDORA) #include "backends/base-backend.h" -#include "backends/platform/sdl/sdl.h" +#include "backends/platform/sdl/sdl-sys.h" #include "backends/platform/sdl/posix/posix.h" #include "backends/events/openpandora/op-events.h" #include "backends/graphics/openpandora/op-graphics.h" -#define __OPENPANDORA__ +//#define MIXER_DOUBLE_BUFFERING 1 #ifndef PATH_MAX #define PATH_MAX 255 @@ -39,16 +39,22 @@ class OSystem_OP : public OSystem_POSIX { public: - OSystem_OP() {} + OSystem_OP(); /* Platform Setup Stuff */ void addSysArchivesToSearchSet(Common::SearchSet &s, int priority); void initBackend(); - void initSDL(); void quit(); protected: - + bool _inited; + bool _initedSDL; + + /** + * Initialse the SDL library + * with an OpenPandora workaround. + */ + virtual void initSDL(); }; #endif #endif //OP_SDL_H diff --git a/backends/platform/ps2/Makefile.gdb b/backends/platform/ps2/Makefile.gdb index 48dcebc1d4..1e2510d3f4 100644 --- a/backends/platform/ps2/Makefile.gdb +++ b/backends/platform/ps2/Makefile.gdb @@ -1,7 +1,7 @@ # $Header: Exp $ include $(PS2SDK)/Defs.make -PS2_EXTRA = /media/disk/nw8240/extras/scummvm/ports +PS2_EXTRA = /works/devel/ps2/sdk-extra PS2_EXTRA_INCS = /zlib/include /libmad/ee/include /SjPcm/ee/src /tremor PS2_EXTRA_LIBS = /zlib/lib /libmad/ee/lib /SjPcm/ee/lib /tremor/tremor @@ -9,31 +9,44 @@ ENABLED=STATIC_PLUGIN ENABLE_SCUMM = $(ENABLED) ENABLE_SCUMM_7_8 = $(ENABLED) -#ENABLE_HE = $(ENABLED) -#ENABLE_AGI = $(ENABLED) -#ENABLE_AGOS = $(ENABLED) -#ENABLE_CINE = $(ENABLED) -#ENABLE_CRUISE = $(ENABLED) -#ENABLE_DRASCULA = $(ENABLED) -#ENABLE_GOB = $(ENABLED) -#ENABLE_KYRA = $(ENABLED) -#ENABLE_LURE = $(ENABLED) - # ENABLE_M4 = $(ENABLED) -#ENABLE_MADE = $(ENABLED) -#ENABLE_PARALLACTION = $(ENABLED) -#ENABLE_QUEEN = $(ENABLED) -#ENABLE_SAGA = $(ENABLED) -#ENABLE_SAGA2 = $(ENABLED) -#ENABLE_IHNM = $(ENABLED) -#ENABLE_SKY = $(ENABLED) -#ENABLE_SWORD1 = $(ENABLED) -#ENABLE_SWORD2 = $(ENABLED) - # ENABLE_TINSEL = $(ENABLED) -#ENABLE_TOUCHE = $(ENABLED) +# ENABLE_HE = $(ENABLED) +# ENABLE_AGI = $(ENABLED) +# ENABLE_AGOS = $(ENABLED) +# ENABLE_AGOS2 = $(ENABLED) +# ENABLE_CINE = $(ENABLED) +# ENABLE_CRUISE = $(ENABLED) +# ENABLE_DRACI = $(ENABLED) +# ENABLE_DRASCULA = $(ENABLED) +# ENABLE_GOB = $(ENABLED) +# ENABLE_GROOVIE = $(ENABLED) +## ENABLE_GROOVIE2 = $(ENABLED) +# ENABLE_HUGO = $(ENABLED) +# ENABLE_IHNM = $(ENABLED) +# ENABLE_KYRA = $(ENABLED) +## ENABLE_LOL = $(ENABLED) +# ENABLE_LURE = $(ENABLED) +## ENABLE_M4 = $(ENABLED) +# ENABLE_MADE = $(ENABLED) +# ENABLE_MOHAWK = $(ENABLED) +# ENABLE_PARALLACTION = $(ENABLED) +# ENABLE_QUEEN = $(ENABLED) +# ENABLE_SAGA = $(ENABLED) +# ENABLE_SAGA2 = $(ENABLED) +# ENABLE_SCI = $(ENABLED) +## ENABLE_SCI32 = $(ENABLED) +# ENABLE_SKY = $(ENABLED) +# ENABLE_SWORD1 = $(ENABLED) +# ENABLE_SWORD2 = $(ENABLED) +# ENABLE_TEENAGENT = $(ENABLED) +# ENABLE_TINSEL = $(ENABLED) +# ENABLE_TOON = $(ENABLED) +# ENABLE_TOUCHE = $(ENABLED) +# ENABLE_TUCKER = $(ENABLED) + HAVE_GCC3 = true -CC = ee-gcc +CC = ee-gcc CXX = ee-g++ AS = ee-gcc LD = ee-gcc @@ -48,35 +61,36 @@ VPATH = $(srcdir) INCDIR = ../../../ # DEPDIR = .deps -DEFINES = -DUSE_VORBIS -DUSE_TREMOR -DUSE_MAD -DUSE_ZLIB -DFORCE_RTL -D_EE -D__PLAYSTATION2__ -D__PS2_DEBUG__ -g -Wall -Wno-multichar - +DEFINES = -DUSE_VORBIS -DUSE_TREMOR -DUSE_MAD -DUSE_ZLIB -DFORCE_RTL -DDISABLE_SAVEGAME_SORTING -D_EE -D__PLAYSTATION2__ -D__PS2_DEBUG__ -g -Wall -Wno-multichar -fno-rtti -fno-exceptions # -DNO_ADAPTOR +# for release builds: +#DEFINES += -DRELEASE_BUILD INCLUDES = $(addprefix -I$(PS2_EXTRA),$(PS2_EXTRA_INCS)) INCLUDES += -I $(PS2GDB)/ee -I $(PS2SDK)/ee/include -I $(PS2SDK)/common/include -I ./common -I . -I $(srcdir) -I $(srcdir)/engines +CXX_UPDATE_DEP_FLAG = -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP + TARGET = elf/scummvm.elf -OBJS := backends/platform/ps2/DmaPipe.o \ - backends/platform/ps2/Gs2dScreen.o \ - backends/platform/ps2/irxboot.o \ - backends/platform/ps2/ps2input.o \ - backends/platform/ps2/ps2pad.o \ - backends/platform/ps2/savefilemgr.o \ - backends/platform/ps2/fileio.o \ - backends/platform/ps2/asyncfio.o \ - backends/platform/ps2/icon.o \ - backends/platform/ps2/cd.o \ - backends/platform/ps2/eecodyvdfs.o \ - backends/platform/ps2/rpckbd.o \ - backends/platform/ps2/systemps2.o \ - backends/platform/ps2/ps2mutex.o \ - backends/platform/ps2/ps2time.o \ - backends/platform/ps2/ps2debug.o +OBJS := $(srcdir)/backends/platform/ps2/DmaPipe.o \ + $(srcdir)/backends/platform/ps2/Gs2dScreen.o \ + $(srcdir)/backends/platform/ps2/irxboot.o \ + $(srcdir)/backends/platform/ps2/ps2input.o \ + $(srcdir)/backends/platform/ps2/ps2pad.o \ + $(srcdir)/backends/platform/ps2/savefilemgr.o \ + $(srcdir)/backends/platform/ps2/fileio.o \ + $(srcdir)/backends/platform/ps2/asyncfio.o \ + $(srcdir)/backends/platform/ps2/icon.o \ + $(srcdir)/backends/platform/ps2/cd.o \ + $(srcdir)/backends/platform/ps2/eecodyvdfs.o \ + $(srcdir)/backends/platform/ps2/rpckbd.o \ + $(srcdir)/backends/platform/ps2/systemps2.o \ + $(srcdir)/backends/platform/ps2/ps2mutex.o \ + $(srcdir)/backends/platform/ps2/ps2time.o \ + $(srcdir)/backends/platform/ps2/ps2debug.o MODULE_DIRS += . -BACKEND := ps2 - include $(srcdir)/Makefile.common LDFLAGS += -mno-crt0 $(PS2SDK)/ee/startup/crt0.o -T $(PS2SDK)/ee/startup/linkfile diff --git a/backends/platform/ps2/Makefile.ps2 b/backends/platform/ps2/Makefile.ps2 index 472ba5ec3a..77cc735c5f 100644 --- a/backends/platform/ps2/Makefile.ps2 +++ b/backends/platform/ps2/Makefile.ps2 @@ -12,28 +12,41 @@ ENABLE_SCUMM_7_8 = $(ENABLED) ENABLE_HE = $(ENABLED) ENABLE_AGI = $(ENABLED) ENABLE_AGOS = $(ENABLED) +ENABLE_AGOS2 = $(ENABLED) ENABLE_CINE = $(ENABLED) ENABLE_CRUISE = $(ENABLED) +ENABLE_DRACI = $(ENABLED) ENABLE_DRASCULA = $(ENABLED) ENABLE_GOB = $(ENABLED) +ENABLE_GROOVIE = $(ENABLED) +# ENABLE_GROOVIE2 = $(ENABLED) +ENABLE_HUGO = $(ENABLED) +ENABLE_IHNM = $(ENABLED) ENABLE_KYRA = $(ENABLED) +# ENABLE_LOL = $(ENABLED) ENABLE_LURE = $(ENABLED) # ENABLE_M4 = $(ENABLED) ENABLE_MADE = $(ENABLED) +ENABLE_MOHAWK = $(ENABLED) ENABLE_PARALLACTION = $(ENABLED) ENABLE_QUEEN = $(ENABLED) ENABLE_SAGA = $(ENABLED) -ENABLE_SAGA2 = $(ENABLED) -ENABLE_IHNM = $(ENABLED) +# ENABLE_SAGA2 = $(ENABLED) +ENABLE_SCI = $(ENABLED) +# ENABLE_SCI32 = $(ENABLED) ENABLE_SKY = $(ENABLED) ENABLE_SWORD1 = $(ENABLED) ENABLE_SWORD2 = $(ENABLED) -# ENABLE_TINSEL = $(ENABLED) +ENABLE_TEENAGENT = $(ENABLED) +ENABLE_TINSEL = $(ENABLED) +ENABLE_TOON = $(ENABLED) ENABLE_TOUCHE = $(ENABLED) +ENABLE_TUCKER = $(ENABLED) + HAVE_GCC3 = true -CC = ee-gcc +CC = ee-gcc CXX = ee-g++ AS = ee-gcc LD = ee-gcc @@ -48,30 +61,33 @@ VPATH = $(srcdir) INCDIR = ../../../ # DEPDIR = .deps -DEFINES = -DUSE_VORBIS -DUSE_TREMOR -DUSE_MAD -DUSE_ZLIB -DFORCE_RTL -D_EE -D__PLAYSTATION2__ -O2 -Wall -Wno-multichar - +DEFINES = -DUSE_VORBIS -DUSE_TREMOR -DUSE_MAD -DUSE_ZLIB -DFORCE_RTL -DDISABLE_SAVEGAME_SORTING -D_EE -D__PLAYSTATION2__ -G2 -O2 -Wall -Wno-multichar -fno-rtti -fno-exceptions # -DNO_ADAPTOR +# for release builds: +#DEFINES += -DRELEASE_BUILD INCLUDES = $(addprefix -I$(PS2_EXTRA),$(PS2_EXTRA_INCS)) INCLUDES += -I $(PS2SDK)/ee/include -I $(PS2SDK)/common/include -I ./common -I . -I $(srcdir) -I $(srcdir)/engines +CXX_UPDATE_DEP_FLAG = -Wp,-MMD,"$(*D)/$(DEPDIR)/$(*F).d",-MQ,"$@",-MP + TARGET = elf/scummvm.elf -OBJS := backends/platform/ps2/DmaPipe.o \ - backends/platform/ps2/Gs2dScreen.o \ - backends/platform/ps2/irxboot.o \ - backends/platform/ps2/ps2input.o \ - backends/platform/ps2/ps2pad.o \ - backends/platform/ps2/savefilemgr.o \ - backends/platform/ps2/fileio.o \ - backends/platform/ps2/asyncfio.o \ - backends/platform/ps2/icon.o \ - backends/platform/ps2/cd.o \ - backends/platform/ps2/eecodyvdfs.o \ - backends/platform/ps2/rpckbd.o \ - backends/platform/ps2/systemps2.o \ - backends/platform/ps2/ps2mutex.o \ - backends/platform/ps2/ps2time.o \ - backends/platform/ps2/ps2debug.o +OBJS := $(srcdir)/backends/platform/ps2/DmaPipe.o \ + $(srcdir)/backends/platform/ps2/Gs2dScreen.o \ + $(srcdir)/backends/platform/ps2/irxboot.o \ + $(srcdir)/backends/platform/ps2/ps2input.o \ + $(srcdir)/backends/platform/ps2/ps2pad.o \ + $(srcdir)/backends/platform/ps2/savefilemgr.o \ + $(srcdir)/backends/platform/ps2/fileio.o \ + $(srcdir)/backends/platform/ps2/asyncfio.o \ + $(srcdir)/backends/platform/ps2/icon.o \ + $(srcdir)/backends/platform/ps2/cd.o \ + $(srcdir)/backends/platform/ps2/eecodyvdfs.o \ + $(srcdir)/backends/platform/ps2/rpckbd.o \ + $(srcdir)/backends/platform/ps2/systemps2.o \ + $(srcdir)/backends/platform/ps2/ps2mutex.o \ + $(srcdir)/backends/platform/ps2/ps2time.o \ + $(srcdir)/backends/platform/ps2/ps2debug.o MODULE_DIRS += . diff --git a/backends/platform/ps2/fileio.cpp b/backends/platform/ps2/fileio.cpp index 038cccd9dd..ef01f3a693 100644 --- a/backends/platform/ps2/fileio.cpp +++ b/backends/platform/ps2/fileio.cpp @@ -535,23 +535,3 @@ size_t ps2_fwrite(const void *buf, size_t r, size_t n, FILE *stream) { assert(r != 0); return ((Ps2File*)stream)->write(buf, r * n) / r; } - -int ps2_fputs(const char *s, FILE *stream) { - int len = strlen(s); - - if (stream == stderr || stream == stdout) { - printf("%s", s); - sioprintf("%s", s); - return len; - } - - if (ps2_fwrite(s, 1, len, stream) == (size_t)len) - return len; - else - return EOF; -} - -int ps2_fflush(FILE *stream) { - // printf("fflush not implemented\n"); - return 0; -} diff --git a/backends/platform/ps2/fileio.h b/backends/platform/ps2/fileio.h index 3fdee5f1dc..afa2ca1f24 100644 --- a/backends/platform/ps2/fileio.h +++ b/backends/platform/ps2/fileio.h @@ -115,10 +115,8 @@ public: // TODO: Get rid of the following, instead use PS2FileStream directly. FILE *ps2_fopen(const char *fname, const char *mode); int ps2_fclose(FILE *stream); -int ps2_fflush(FILE *stream); size_t ps2_fread(void *buf, size_t r, size_t n, FILE *stream); size_t ps2_fwrite(const void *buf, size_t r, size_t n, FILE *stream); -int ps2_fputs(const char *s, FILE *stream); #endif // __PS2FILE_IO__ diff --git a/backends/platform/ps2/systemps2.cpp b/backends/platform/ps2/systemps2.cpp index 210454c9aa..d3acd06089 100644 --- a/backends/platform/ps2/systemps2.cpp +++ b/backends/platform/ps2/systemps2.cpp @@ -33,36 +33,41 @@ #include <assert.h> #include <iopcontrol.h> #include <iopheap.h> -#include "common/scummsys.h" -#include "engines/engine.h" -#include "backends/platform/ps2/systemps2.h" -#include "backends/platform/ps2/Gs2dScreen.h" -#include "backends/platform/ps2/ps2input.h" -#include "backends/platform/ps2/irxboot.h" + #include <sjpcm.h> #include <libhdd.h> -#include "backends/platform/ps2/savefilemgr.h" -#include "common/file.h" -#include "backends/platform/ps2/sysdefs.h" -#include "backends/platform/ps2/fileio.h" #include <libmc.h> #include <libpad.h> -#include "backends/platform/ps2/cd.h" #include <fileXio_rpc.h> -#include "backends/platform/ps2/asyncfio.h" #include "eecodyvdfs.h" -#include "graphics/surface.h" -#include "graphics/font.h" -#include "backends/timer/default/default-timer.h" -#include "audio/mixer_intern.h" + +#include "common/config-manager.h" #include "common/events.h" +#include "common/file.h" +#include "common/scummsys.h" + +#include "backends/platform/ps2/asyncfio.h" +#include "backends/platform/ps2/cd.h" +#include "backends/platform/ps2/fileio.h" +#include "backends/platform/ps2/Gs2dScreen.h" +#include "backends/platform/ps2/irxboot.h" #include "backends/platform/ps2/ps2debug.h" -#include "backends/fs/ps2/ps2-fs-factory.h" +#include "backends/platform/ps2/ps2input.h" +#include "backends/platform/ps2/savefilemgr.h" +#include "backends/platform/ps2/sysdefs.h" +#include "backends/platform/ps2/systemps2.h" +#include "backends/fs/ps2/ps2-fs-factory.h" #include "backends/plugins/ps2/ps2-provider.h" -#include "backends/saves/default/default-saves.h" -#include "common/config-manager.h" +#include "backends/timer/default/default-timer.h" + +#include "audio/mixer_intern.h" + +#include "engines/engine.h" + +#include "graphics/font.h" +#include "graphics/surface.h" #include "icon.h" #include "ps2temp.h" @@ -342,13 +347,14 @@ OSystem_PS2::OSystem_PS2(const char *elfPath) { void OSystem_PS2::init(void) { sioprintf("Timer...\n"); - _scummTimerManager = new DefaultTimerManager(); + _timerManager = new DefaultTimerManager(); _scummMixer = new Audio::MixerImpl(this, 48000); _scummMixer->setReady(true); + initTimer(); sioprintf("Starting SavefileManager\n"); - _saveManager = new Ps2SaveFileManager(this, _screen); + _savefileManager = new Ps2SaveFileManager(this, _screen); sioprintf("Initializing ps2Input\n"); _input = new Ps2Input(this, _useMouse, _useKbd); @@ -423,7 +429,7 @@ void OSystem_PS2::initTimer(void) { void OSystem_PS2::timerThreadCallback(void) { while (!_systemQuit) { WaitSema(g_TimerThreadSema); - _scummTimerManager->handler(); + ((DefaultTimerManager *)_timerManager)->handler(); } ExitThread(); } @@ -593,22 +599,10 @@ void OSystem_PS2::delayMillis(uint msecs) { } } -Common::TimerManager *OSystem_PS2::getTimerManager() { - return _scummTimerManager; -} -/* -Common::EventManager *OSystem_PS2::getEventManager() { - return getEventManager(); -} -*/ Audio::Mixer *OSystem_PS2::getMixer() { return _scummMixer; } -Common::SaveFileManager *OSystem_PS2::getSavefileManager(void) { - return _saveManager; -} - FilesystemFactory *OSystem_PS2::getFilesystemFactory() { return &Ps2FilesystemFactory::instance(); } @@ -767,7 +761,7 @@ void OSystem_PS2::msgPrintf(int millis, const char *format, ...) { void OSystem_PS2::powerOffCallback(void) { sioprintf("powerOffCallback\n"); - // _saveManager->quit(); // romeo + // _savefileManager->quit(); // romeo if (_useHdd) { sioprintf("umount\n"); fio.umount("pfs0:"); @@ -807,7 +801,7 @@ void OSystem_PS2::quit(void) { DisableIntc(INT_TIMER0); RemoveIntcHandler(INT_TIMER0, _intrId); - // _saveManager->quit(); // romeo + // _savefileManager->quit(); // romeo _screen->quit(); padEnd(); // stop pad library @@ -976,12 +970,11 @@ void OSystem_PS2::makeConfigPath() { _configFile = strdup(path); } -Common::SeekableReadStream *OSystem_PS2::createConfigReadStream() { - Common::FSNode file(_configFile); - return file.createReadStream(); +Common::String OSystem_PS2::getDefaultConfigFileName() { + return _configFile; } -Common::WriteStream *OSystem_PS2::createConfigWriteStream() { - Common::FSNode file(_configFile); - return file.createWriteStream(); +void OSystem_PS2::logMessage(LogMessageType::Type type, const char *message) { + printf("%s", message); + sioprintf("%s", message); } diff --git a/backends/platform/ps2/systemps2.h b/backends/platform/ps2/systemps2.h index b21a56c184..35ceaf829e 100644 --- a/backends/platform/ps2/systemps2.h +++ b/backends/platform/ps2/systemps2.h @@ -27,12 +27,8 @@ #include "backends/base-backend.h" #include "graphics/palette.h" -class DefaultTimerManager; -class DefaultSaveFileManager; - class Gs2dScreen; class Ps2Input; -class Ps2SaveFileManager; // class Ps2FilesystemFactory; struct IrxReference; @@ -44,15 +40,11 @@ struct Ps2Mutex { int count; }; -namespace Common { -class TimerManager; -}; - namespace Audio { class MixerImpl; }; -class OSystem_PS2 : public BaseBackend, public PaletteManager { +class OSystem_PS2 : public EventsBaseBackend, public PaletteManager { public: OSystem_PS2(const char *elfPath); virtual ~OSystem_PS2(void); @@ -93,8 +85,6 @@ public: virtual uint32 getMillis(); virtual void delayMillis(uint msecs); - virtual Common::TimerManager *getTimerManager(); -// virtual Common::EventManager *getEventManager(); virtual bool pollEvent(Common::Event &event); virtual Audio::Mixer *getMixer(); @@ -112,11 +102,11 @@ public: virtual void quit(); - virtual Common::SeekableReadStream *createConfigReadStream(); - virtual Common::WriteStream *createConfigWriteStream(); + virtual Common::String getDefaultConfigFileName(); + + virtual void logMessage(LogMessageType::Type type, const char *message); virtual Graphics::PixelFormat getOverlayFormat() const; - virtual Common::SaveFileManager *getSavefileManager(); virtual FilesystemFactory *getFilesystemFactory(); virtual void getTimeAndDate(TimeDate &t) const; @@ -144,15 +134,11 @@ private: void initTimer(void); void readRtcTime(void); - DefaultTimerManager *_scummTimerManager; Audio::MixerImpl *_scummMixer; bool _mouseVisible; bool _useMouse, _useKbd, _useHdd, _usbMassLoaded, _useNet; - Ps2SaveFileManager *_saveManager; - // DefaultSaveFileManager *_saveManager; - Gs2dScreen *_screen; Ps2Input *_input; uint16 _oldMouseX, _oldMouseY; diff --git a/backends/platform/psp/cursor.h b/backends/platform/psp/cursor.h index 9c24d001fb..f79968243b 100644 --- a/backends/platform/psp/cursor.h +++ b/backends/platform/psp/cursor.h @@ -53,6 +53,7 @@ public: Buffer &buffer() { return _buffer; } void setCursorPalette(const byte *colors, uint start, uint num); void enableCursorPalette(bool enable); + bool isCursorPaletteEnabled() const { return _useCursorPalette; } void setLimits(uint32 width, uint32 height); void setXY(int x, int y); int32 getX() const { return _x; } diff --git a/backends/platform/psp/osys_psp.cpp b/backends/platform/psp/osys_psp.cpp index 3db743eff3..8c8180d04e 100644 --- a/backends/platform/psp/osys_psp.cpp +++ b/backends/platform/psp/osys_psp.cpp @@ -20,8 +20,7 @@ * */ -// Allow use of stuff in <time.h> -#define FORBIDDEN_SYMBOL_EXCEPTION_time_h +#define FORBIDDEN_SYMBOL_ALLOW_ALL #include <pspuser.h> #include <pspgu.h> @@ -89,9 +88,9 @@ void OSystem_PSP::initBackend() { _imageViewer.setInputHandler(&_inputHandler); _imageViewer.setDisplayManager(&_displayManager); - _savefile = new PSPSaveFileManager; + _savefileManager = new PSPSaveFileManager; - _timer = new DefaultTimerManager(); + _timerManager = new DefaultTimerManager(); PSP_DEBUG_PRINT("calling keyboard.load()\n"); _keyboard.load(); // Load virtual keyboard files into memory @@ -100,7 +99,7 @@ void OSystem_PSP::initBackend() { setupMixer(); - OSystem::initBackend(); + EventsBaseBackend::initBackend(); } // Let's us know an engine @@ -110,13 +109,20 @@ void OSystem_PSP::engineDone() { } bool OSystem_PSP::hasFeature(Feature f) { - return (f == kFeatureOverlaySupportsAlpha || f == kFeatureCursorHasPalette); + return (f == kFeatureOverlaySupportsAlpha || f == kFeatureCursorPalette); } void OSystem_PSP::setFeatureState(Feature f, bool enable) { + if (f == kFeatureCursorPalette) { + _pendingUpdate = false; + _cursor.enableCursorPalette(enable); + } } bool OSystem_PSP::getFeatureState(Feature f) { + if (f == kFeatureCursorPalette) { + return _cursor.isCursorPaletteEnabled(); + } return false; } @@ -198,12 +204,6 @@ void OSystem_PSP::setCursorPalette(const byte *colors, uint start, uint num) { _cursor.clearKeyColor(); // Do we need this? } -void OSystem_PSP::disableCursorPalette(bool disable) { - DEBUG_ENTER_FUNC(); - _pendingUpdate = false; - _cursor.enableCursorPalette(!disable); -} - void OSystem_PSP::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) { DEBUG_ENTER_FUNC(); _displayManager.waitUntilRenderFinished(); @@ -421,7 +421,15 @@ void OSystem_PSP::quit() { } void OSystem_PSP::logMessage(LogMessageType::Type type, const char *message) { - BaseBackend::logMessage(type, message); + FILE *output = 0; + + if (type == LogMessageType::kInfo || type == LogMessageType::kDebug) + output = stdout; + else + output = stderr; + + fputs(message, output); + fflush(output); if (type == LogMessageType::kError) PspDebugTrace(false, "%s", message); // write to file @@ -438,14 +446,6 @@ void OSystem_PSP::getTimeAndDate(TimeDate &td) const { td.tm_year = t.tm_year; } -#define PSP_CONFIG_FILE "ms0:/scummvm.ini" - -Common::SeekableReadStream *OSystem_PSP::createConfigReadStream() { - Common::FSNode file(PSP_CONFIG_FILE); - return file.createReadStream(); -} - -Common::WriteStream *OSystem_PSP::createConfigWriteStream() { - Common::FSNode file(PSP_CONFIG_FILE); - return file.createWriteStream(); +Common::String OSystem_PSP::getDefaultConfigFileName() { + return "ms0:/scummvm.ini"; } diff --git a/backends/platform/psp/osys_psp.h b/backends/platform/psp/osys_psp.h index 00eec3da90..e6b445e232 100644 --- a/backends/platform/psp/osys_psp.h +++ b/backends/platform/psp/osys_psp.h @@ -42,12 +42,10 @@ #include "backends/timer/psp/timer.h" #include "backends/platform/psp/thread.h" -class OSystem_PSP : public BaseBackend, public PaletteManager { +class OSystem_PSP : public EventsBaseBackend, public PaletteManager { private: - Common::SaveFileManager *_savefile; Audio::MixerImpl *_mixer; - Common::TimerManager *_timer; bool _pendingUpdate; // save an update we couldn't perform uint32 _pendingUpdateCounter; // prevent checking for pending update too often, in a cheap way @@ -63,7 +61,7 @@ private: ImageViewer _imageViewer; public: - OSystem_PSP() : _savefile(0), _mixer(0), _timer(0), _pendingUpdate(false), _pendingUpdateCounter(0) {} + OSystem_PSP() : _mixer(0), _pendingUpdate(false), _pendingUpdateCounter(0) {} ~OSystem_PSP(); static OSystem *instance(); @@ -99,7 +97,6 @@ protected: void grabPalette(byte *colors, uint start, uint num); public: void setCursorPalette(const byte *colors, uint start, uint num); - void disableCursorPalette(bool disable); // Screen related void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); @@ -134,7 +131,6 @@ public: // Timer typedef int (*TimerProc)(int interval); void setTimerCallback(TimerProc callback, int interval); - Common::TimerManager *getTimerManager() { return _timer; } // Mutex MutexRef createMutex(void); @@ -148,7 +144,6 @@ public: Audio::Mixer *getMixer() { return _mixer; } // Misc - Common::SaveFileManager *getSavefileManager() { return _savefile; } FilesystemFactory *getFilesystemFactory() { return &PSPFilesystemFactory::instance(); } void getTimeAndDate(TimeDate &t) const; virtual void engineDone(); @@ -157,9 +152,7 @@ public: void logMessage(LogMessageType::Type type, const char *message); - Common::SeekableReadStream *createConfigReadStream(); - Common::WriteStream *createConfigWriteStream(); - + virtual Common::String getDefaultConfigFileName(); }; #endif /* OSYS_PSP_H */ diff --git a/backends/platform/samsungtv/main.cpp b/backends/platform/samsungtv/main.cpp index 4f3291613d..8274bb00a2 100644 --- a/backends/platform/samsungtv/main.cpp +++ b/backends/platform/samsungtv/main.cpp @@ -22,12 +22,14 @@ #define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h +#include "common/scummsys.h" + +#if defined(SAMSUNGTV) + #include "backends/platform/samsungtv/samsungtv.h" #include "backends/plugins/sdl/sdl-provider.h" #include "base/main.h" -#if defined(SAMSUNGTV) - #include <unistd.h> extern "C" int Game_Main(char *path, char *) { diff --git a/backends/platform/samsungtv/module.mk b/backends/platform/samsungtv/module.mk index 36ad75da6d..cba09db74c 100644 --- a/backends/platform/samsungtv/module.mk +++ b/backends/platform/samsungtv/module.mk @@ -8,3 +8,6 @@ MODULE_OBJS := \ MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS)) OBJS := $(MODULE_OBJS) $(OBJS) MODULE_DIRS += $(sort $(dir $(MODULE_OBJS))) + +# Hack to ensure the SDL backend is built so we can use OSystem_SDL. +-include $(srcdir)/backends/platform/sdl/module.mk diff --git a/backends/platform/samsungtv/samsungtv.cpp b/backends/platform/samsungtv/samsungtv.cpp index cb657a0a22..9718eed1fe 100644 --- a/backends/platform/samsungtv/samsungtv.cpp +++ b/backends/platform/samsungtv/samsungtv.cpp @@ -20,15 +20,18 @@ * */ +#include "common/scummsys.h" + +#if defined(SAMSUNGTV) + #include "backends/platform/samsungtv/samsungtv.h" #include "backends/events/samsungtvsdl/samsungtvsdl-events.h" #include "backends/graphics/samsungtvsdl/samsungtvsdl-graphics.h" - -#if defined(SAMSUNGTV) +#include "common/textconsole.h" OSystem_SDL_SamsungTV::OSystem_SDL_SamsungTV() : - OSystem_POSIX("/mtd_rwarea/scummvm/.scummvmrc") { + OSystem_POSIX("/mtd_rwarea/.scummvmrc") { } void OSystem_SDL_SamsungTV::initBackend() { diff --git a/backends/platform/sdl/macosx/macosx.cpp b/backends/platform/sdl/macosx/macosx.cpp index 0ef16d9a6e..9b11eb2c09 100644 --- a/backends/platform/sdl/macosx/macosx.cpp +++ b/backends/platform/sdl/macosx/macosx.cpp @@ -33,7 +33,9 @@ #include "common/archive.h" #include "common/fs.h" -#include "CoreFoundation/CoreFoundation.h" +#include "ApplicationServices/ApplicationServices.h" // for LSOpenFSRef +#include "CoreFoundation/CoreFoundation.h" // for CF* stuff +#include "CoreServices/CoreServices.h" // for FSPathMakeRef OSystem_MacOSX::OSystem_MacOSX() : @@ -75,4 +77,27 @@ void OSystem_MacOSX::setupIcon() { // Don't set icon on OS X, as we use a nicer external icon there. } +bool OSystem_MacOSX::hasFeature(Feature f) { + if (f == kFeatureDisplayLogFile) + return true; + return OSystem_POSIX::hasFeature(f); +} + +bool OSystem_MacOSX::displayLogFile() { + // Use LaunchServices to open the log file, if possible. + + if (_logFilePath.empty()) + return false; + + FSRef ref; + OSStatus err; + + err = FSPathMakeRef((const UInt8 *)_logFilePath.c_str(), &ref, NULL); + if (err == noErr) { + err = LSOpenFSRef(&ref, NULL); + } + + return err != noErr; +} + #endif diff --git a/backends/platform/sdl/macosx/macosx.h b/backends/platform/sdl/macosx/macosx.h index 6d78427522..86c70297ec 100644 --- a/backends/platform/sdl/macosx/macosx.h +++ b/backends/platform/sdl/macosx/macosx.h @@ -29,6 +29,10 @@ class OSystem_MacOSX : public OSystem_POSIX { public: OSystem_MacOSX(); + virtual bool hasFeature(Feature f); + + virtual bool displayLogFile(); + virtual void initBackend(); virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0); virtual void setupIcon(); diff --git a/backends/platform/sdl/main.cpp b/backends/platform/sdl/main.cpp index a0a64e1155..1992bdd3f2 100644 --- a/backends/platform/sdl/main.cpp +++ b/backends/platform/sdl/main.cpp @@ -24,7 +24,7 @@ // Several SDL based ports use a custom main, and hence do not want to compile // of this file. The following "#if" ensures that. -#if !defined(UNIX) && \ +#if !defined(POSIX) && \ !defined(WIN32) && \ !defined(__MAEMO__) && \ !defined(__SYMBIAN32__) && \ diff --git a/backends/platform/sdl/module.mk b/backends/platform/sdl/module.mk index 87a0e3d658..efc5168d5b 100644 --- a/backends/platform/sdl/module.mk +++ b/backends/platform/sdl/module.mk @@ -5,7 +5,7 @@ MODULE_OBJS := \ main.o \ sdl.o -ifdef UNIX +ifdef POSIX MODULE_OBJS += \ posix/posix-main.o \ posix/posix.o diff --git a/backends/platform/sdl/posix/posix-main.cpp b/backends/platform/sdl/posix/posix-main.cpp index ffc28b354c..f78e001398 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(UNIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) +#if defined(POSIX) && !defined(MACOSX) && !defined(SAMSUNGTV) && !defined(WEBOS) && !defined(LINUXMOTO) && !defined(GPH_DEVICE) && !defined(GP2X) && !defined(DINGUX) && !defined(OPENPANDORA) #include "backends/platform/sdl/posix/posix.h" #include "backends/plugins/sdl/sdl-provider.h" diff --git a/backends/platform/sdl/posix/posix.cpp b/backends/platform/sdl/posix/posix.cpp index 4dd0039c1e..d757186134 100644 --- a/backends/platform/sdl/posix/posix.cpp +++ b/backends/platform/sdl/posix/posix.cpp @@ -22,11 +22,13 @@ #define FORBIDDEN_SYMBOL_EXCEPTION_getenv #define FORBIDDEN_SYMBOL_EXCEPTION_mkdir +#define FORBIDDEN_SYMBOL_EXCEPTION_exit +#define FORBIDDEN_SYMBOL_EXCEPTION_unistd_h #define FORBIDDEN_SYMBOL_EXCEPTION_time_h //On IRIX, sys/stat.h includes sys/time.h #include "common/scummsys.h" -#ifdef UNIX +#ifdef POSIX #include "backends/platform/sdl/posix/posix.h" #include "backends/saves/posix/posix-saves.h" @@ -34,6 +36,8 @@ #include <errno.h> #include <sys/stat.h> +#include <sys/wait.h> +#include <unistd.h> OSystem_POSIX::OSystem_POSIX(Common::String baseConfigName) @@ -58,10 +62,16 @@ void OSystem_POSIX::initBackend() { OSystem_SDL::initBackend(); } +bool OSystem_POSIX::hasFeature(Feature f) { + if (f == kFeatureDisplayLogFile) + return true; + return OSystem_SDL::hasFeature(f); +} + Common::String OSystem_POSIX::getDefaultConfigFileName() { char configFile[MAXPATHLEN]; - // On UNIX type systems, by default we store the config file inside + // On POSIX type systems, by default we store the config file inside // to the HOME directory of the user. const char *home = getenv("HOME"); if (home != NULL && strlen(home) < MAXPATHLEN) @@ -73,6 +83,10 @@ Common::String OSystem_POSIX::getDefaultConfigFileName() { } Common::WriteStream *OSystem_POSIX::createLogFile() { + // Start out by resetting _logFilePath, so that in case + // of a failure, we know that no log file is open. + _logFilePath.clear(); + const char *home = getenv("HOME"); if (home == NULL) return 0; @@ -128,7 +142,62 @@ Common::WriteStream *OSystem_POSIX::createLogFile() { logFile += "/scummvm.log"; Common::FSNode file(logFile); - return file.createWriteStream(); + Common::WriteStream *stream = file.createWriteStream(); + if (stream) + _logFilePath = logFile; + return stream; } +bool OSystem_POSIX::displayLogFile() { + if (_logFilePath.empty()) + return false; + + // FIXME: This may not work perfectly when in fullscreen mode. + // On my system it drops from fullscreen without ScummVM noticing, + // so the next Alt-Enter does nothing, going from windowed to windowed. + // (wjp, 20110604) + + pid_t pid = fork(); + if (pid < 0) { + // failed to fork + return false; + } else if (pid == 0) { + + // Try xdg-open first + execlp("xdg-open", "xdg-open", _logFilePath.c_str(), (char*)0); + + // If we're here, that clearly failed. + + // TODO: We may also want to try detecting the case where + // xdg-open is successfully executed but returns an error code. + + // Try xterm+less next + + execlp("xterm", "xterm", "-e", "less", _logFilePath.c_str(), (char*)0); + + // TODO: If less does not exist we could fall back to 'more'. + // However, we'll have to use 'xterm -hold' for that to prevent the + // terminal from closing immediately (for short log files) or + // unexpectedly. + + exit(127); + } + + int status; + // Wait for viewer to close. + // (But note that xdg-open may have spawned a viewer in the background.) + + // FIXME: We probably want the viewer to always open in the background. + // This may require installing a SIGCHLD handler. + pid = waitpid(pid, &status, 0); + + if (pid < 0) { + // Probably nothing sensible to do in this error situation + return false; + } + + return WIFEXITED(status) && WEXITSTATUS(status) == 0; +} + + #endif diff --git a/backends/platform/sdl/posix/posix.h b/backends/platform/sdl/posix/posix.h index 0a4f38e2c4..59909a958f 100644 --- a/backends/platform/sdl/posix/posix.h +++ b/backends/platform/sdl/posix/posix.h @@ -31,14 +31,31 @@ public: OSystem_POSIX(Common::String baseConfigName = ".scummvmrc"); virtual ~OSystem_POSIX() {} + virtual bool hasFeature(Feature f); + + virtual bool displayLogFile(); + virtual void init(); virtual void initBackend(); protected: - // Base string for creating the default path and filename - // for the configuration file + /** + * Base string for creating the default path and filename for the + * configuration file. This allows the Mac OS X subclass to override + * the config file path and name. + */ Common::String _baseConfigName; + /** + * The path of the currently open log file, if any. + * + * @note This is currently a string and not an FSNode for simplicity; + * e.g. we don't need to include fs.h here, and currently the + * only use of this value is to use it to open the log file in an + * editor; for that, we need it only as a string anyway. + */ + Common::String _logFilePath; + virtual Common::String getDefaultConfigFileName(); virtual Common::WriteStream *createLogFile(); diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index a3fb719ca4..e36878db07 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -20,8 +20,7 @@ * */ -#define FORBIDDEN_SYMBOL_EXCEPTION_time_h -#define FORBIDDEN_SYMBOL_EXCEPTION_exit +#define FORBIDDEN_SYMBOL_ALLOW_ALL #ifdef WIN32 #define WIN32_LEAN_AND_MEAN @@ -206,6 +205,8 @@ void OSystem_SDL::initBackend() { setupIcon(); _inited = true; + + ModularBackend::initBackend(); } void OSystem_SDL::initSDL() { @@ -244,20 +245,6 @@ void OSystem_SDL::addSysArchivesToSearchSet(Common::SearchSet &s, int priority) } -Common::String OSystem_SDL::getDefaultConfigFileName() { - return "scummvm.ini"; -} - -Common::SeekableReadStream *OSystem_SDL::createConfigReadStream() { - Common::FSNode file(getDefaultConfigFileName()); - return file.createReadStream(); -} - -Common::WriteStream *OSystem_SDL::createConfigWriteStream() { - Common::FSNode file(getDefaultConfigFileName()); - return file.createWriteStream(); -} - void OSystem_SDL::setWindowCaption(const char *caption) { Common::String cap; byte c; @@ -288,10 +275,22 @@ void OSystem_SDL::fatalError() { void OSystem_SDL::logMessage(LogMessageType::Type type, const char *message) { - ModularBackend::logMessage(type, message); + // First log to stdout/stderr + FILE *output = 0; + + if (type == LogMessageType::kInfo || type == LogMessageType::kDebug) + output = stdout; + else + output = stderr; + + fputs(message, output); + fflush(output); + + // Then log into file (via the logger) if (_logger) _logger->print(message); + // Finally, some Windows / WinCE specific logging code. #if defined( USE_WINDBG ) #if defined( _WIN32_WCE ) TCHAR buf_unicode[1024]; @@ -314,7 +313,7 @@ void OSystem_SDL::logMessage(LogMessageType::Type type, const char *message) { } Common::String OSystem_SDL::getSystemLanguage() const { -#ifdef USE_DETECTLANG +#if defined(USE_DETECTLANG) && !defined(_WIN32_WCE) #ifdef WIN32 // We can not use "setlocale" (at least not for MSVC builds), since it // will return locales like: "English_USA.1252", thus we need a special diff --git a/backends/platform/sdl/sdl.h b/backends/platform/sdl/sdl.h index e9e9bc5696..9c08752054 100644 --- a/backends/platform/sdl/sdl.h +++ b/backends/platform/sdl/sdl.h @@ -65,8 +65,6 @@ public: virtual void setWindowCaption(const char *caption); virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0); - virtual Common::SeekableReadStream *createConfigReadStream(); - virtual Common::WriteStream *createConfigWriteStream(); virtual uint32 getMillis(); virtual void delayMillis(uint msecs); virtual void getTimeAndDate(TimeDate &td) const; @@ -93,6 +91,8 @@ protected: */ SdlEventSource *_eventSource; + virtual Common::EventSource *getDefaultEventSource() { return _eventSource; } + /** * Initialze the SDL library. */ @@ -103,12 +103,6 @@ protected: */ virtual void setupIcon(); - /** - * Get the file path where the user configuration - * of ScummVM will be saved. - */ - virtual Common::String getDefaultConfigFileName(); - // Logging virtual Common::WriteStream *createLogFile() { return 0; } Backends::Log::Log *_logger; diff --git a/backends/platform/sdl/win32/win32.cpp b/backends/platform/sdl/win32/win32.cpp index 93b76f4188..5b14be4417 100644 --- a/backends/platform/sdl/win32/win32.cpp +++ b/backends/platform/sdl/win32/win32.cpp @@ -32,6 +32,7 @@ #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef ARRAYSIZE // winnt.h defines ARRAYSIZE, but we want our own one... +#include <shellapi.h> #include "backends/platform/sdl/win32/win32.h" #include "backends/fs/windows/windows-fs-factory.h" @@ -87,6 +88,49 @@ void OSystem_Win32::init() { OSystem_SDL::init(); } + +bool OSystem_Win32::hasFeature(Feature f) { + if (f == kFeatureDisplayLogFile) + return true; + + return OSystem_SDL::hasFeature(f); +} + +bool OSystem_Win32::displayLogFile() { + if (_logFilePath.empty()) + return false; + + // Try opening the log file with the default text editor + // log files should be registered as "txtfile" by default and thus open in the default text editor + HINSTANCE shellExec = ShellExecute(NULL, NULL, _logFilePath.c_str(), NULL, NULL, SW_SHOWNORMAL); + if ((intptr_t)shellExec > 32) + return true; + + // ShellExecute with the default verb failed, try the "Open with..." dialog + PROCESS_INFORMATION processInformation; + STARTUPINFO startupInfo; + memset(&processInformation, 0, sizeof(processInformation)); + memset(&startupInfo, 0, sizeof(startupInfo)); + startupInfo.cb = sizeof(startupInfo); + + char cmdLine[MAX_PATH * 2]; // CreateProcess may change the contents of cmdLine + sprintf(cmdLine, "rundll32 shell32.dll,OpenAs_RunDLL %s", _logFilePath.c_str()); + BOOL result = CreateProcess(NULL, + cmdLine, + NULL, + NULL, + FALSE, + NORMAL_PRIORITY_CLASS, + NULL, + NULL, + &startupInfo, + &processInformation); + if (result) + return true; + + return false; +} + Common::String OSystem_Win32::getDefaultConfigFileName() { char configFile[MAXPATHLEN]; @@ -136,6 +180,10 @@ Common::String OSystem_Win32::getDefaultConfigFileName() { } Common::WriteStream *OSystem_Win32::createLogFile() { + // Start out by resetting _logFilePath, so that in case + // of a failure, we know that no log file is open. + _logFilePath.clear(); + char logFile[MAXPATHLEN]; OSVERSIONINFO win32OsVersion; @@ -163,7 +211,11 @@ Common::WriteStream *OSystem_Win32::createLogFile() { strcat(logFile, "\\scummvm.log"); Common::FSNode file(logFile); - return file.createWriteStream(); + Common::WriteStream *stream = file.createWriteStream(); + if (stream) + _logFilePath= logFile; + + return stream; } else { return 0; } diff --git a/backends/platform/sdl/win32/win32.h b/backends/platform/sdl/win32/win32.h index 268449eeff..ef7b6af3f1 100644 --- a/backends/platform/sdl/win32/win32.h +++ b/backends/platform/sdl/win32/win32.h @@ -30,7 +30,22 @@ public: virtual void init(); virtual void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0); + + virtual bool hasFeature(Feature f); + + virtual bool displayLogFile(); + protected: + /** + * The path of the currently open log file, if any. + * + * @note This is currently a string and not an FSNode for simplicity; + * e.g. we don't need to include fs.h here, and currently the + * only use of this value is to use it to open the log file in an + * editor; for that, we need it only as a string anyway. + */ + Common::String _logFilePath; + virtual Common::String getDefaultConfigFileName(); virtual Common::WriteStream *createLogFile(); }; diff --git a/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl b/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl index cb1c508fa1..82c15ec3db 100644 --- a/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl +++ b/backends/platform/symbian/BuildPackageUpload_LocalSettings.pl @@ -104,9 +104,6 @@ #$SDK_LibraryDirs{'S90'}{'esdl.lib'} = "$SdlBase\\S90"; #$SDK_LibraryDirs{'UIQ2'}{'esdl.lib'} = "$SdlBase\\UIQ2" #$SDK_LibraryDirs{'UIQ3'}{'esdl.lib'} = "$SdlBase\\UIQ3"; - - ## HardlySupported(TM) :P - #$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "$DevBase\\mpeg2dec-0.4.0\\epoc"; } # now you can add $VariationSets only built on this PC below this line :) @@ -145,7 +142,6 @@ # $SDK_LibraryDirs{'S60v1'}{'esdl.lib'} = $SDK_LibraryDirs{'S60v2'}{'esdl.lib'} = $SDK_LibraryDirs{'S60v3'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S60"; # $SDK_LibraryDirs{'S80'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S80"; # $SDK_LibraryDirs{'S90'}{'esdl.lib'} = "C:\\S\\ESDL\\epoc\\S90"; - #$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc"; } # now you can add $VariationSets only built on this PC below this line :) @@ -183,7 +179,6 @@ $SDK_LibraryDirs{'S90'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\S90"; $SDK_LibraryDirs{'S60v3'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\S60\\S60V3"; $SDK_LibraryDirs{'UIQ3'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\UIQ\\UIQ3"; - #$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc"; } # now you can add $VariationSets only built on this PC below this line :) @@ -221,7 +216,6 @@ $SDK_LibraryDirs{'S90'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\S90"; $SDK_LibraryDirs{'S60v3'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\S60\\S60V3"; $SDK_LibraryDirs{'UIQ3'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\UIQ\\UIQ3"; - #$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc"; } # now you can add $VariationSets only built on this PC below this line :) @@ -259,7 +253,6 @@ $SDK_LibraryDirs{'S90'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\S90"; $SDK_LibraryDirs{'S60v3'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\S60\\S60V3"; $SDK_LibraryDirs{'UIQ3'}{'esdl.lib'} = "E:\\WICKED\\ESDL\\epoc\\UIQ\\UIQ3"; - #$SDK_LibraryDirs{'ALL'}{'libmpeg2.lib'} = "C:\\S\\mpeg2dec-0.4.0\\epoc"; } # now you can add $VariationSets only built on this PC below this line :) diff --git a/backends/platform/symbian/README b/backends/platform/symbian/README index 140f442fb6..1f49c52f02 100644 --- a/backends/platform/symbian/README +++ b/backends/platform/symbian/README @@ -114,9 +114,6 @@ Building ScummVM - flac, the Free Lossless Audio Codec http://flac.sourceforge.net/ - - libmpeg2, a free MPEG-2 video stream decoder - http://libmpeg2.sourceforge.net - Compiling ScummVM ----------------- diff --git a/backends/platform/symbian/src/portdefs.h b/backends/platform/symbian/src/portdefs.h index ebcd273659..86460e65c5 100644 --- a/backends/platform/symbian/src/portdefs.h +++ b/backends/platform/symbian/src/portdefs.h @@ -18,8 +18,10 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + #ifndef SYMBIAN_PORTDEFS_H #define SYMBIAN_PORTDEFS_H + #include <assert.h> #include <stdarg.h> #include <string.h> @@ -37,6 +39,26 @@ #define M_PI 3.14159265358979323846 #endif /* M_PI */ + +// Enable Symbians own datatypes +// This is done for two reasons +// a) uint is already defined by Symbians libc component +// b) Symbian is using its "own" datatyping, and the Scummvm port +// should follow this to ensure the best compability possible. +typedef unsigned char byte; +typedef unsigned char uint8; +typedef signed char int8; +typedef unsigned short int uint16; +typedef signed short int int16; +typedef unsigned long int uint32; +typedef signed long int int32; + +// Define SCUMMVM_DONT_DEFINE_TYPES to prevent scummsys.h from trying to +// re-define those data types. +#define SCUMMVM_DONT_DEFINE_TYPES + +#define SMALL_SCREEN_DEVICE + #define DISABLE_COMMAND_LINE #if defined(USE_TREMOR) && !defined(USE_VORBIS) diff --git a/backends/platform/wii/options.cpp b/backends/platform/wii/options.cpp index ffabc5ae97..8c12ad9b81 100644 --- a/backends/platform/wii/options.cpp +++ b/backends/platform/wii/options.cpp @@ -175,15 +175,15 @@ void WiiOptionsDialog::handleTickle() { break; case -EBUSY: - label = _("Initialising network"); + label = _("Initializing network"); break; case -ETIMEDOUT: - label = _("Timeout while initialising network"); + label = _("Timeout while initializing network"); break; default: - label = String::format(_("Network not initialised (%d)"), status); + label = String::format(_("Network not initialized (%d)"), status); break; } diff --git a/backends/platform/wii/osystem.cpp b/backends/platform/wii/osystem.cpp index 401b19b0e1..258a782cc4 100644 --- a/backends/platform/wii/osystem.cpp +++ b/backends/platform/wii/osystem.cpp @@ -19,11 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -// Allow use of stuff in <time.h> -#define FORBIDDEN_SYMBOL_EXCEPTION_time_h - -#define FORBIDDEN_SYMBOL_EXCEPTION_printf -#define FORBIDDEN_SYMBOL_EXCEPTION_getcwd +#define FORBIDDEN_SYMBOL_ALLOW_ALL #include <unistd.h> @@ -34,6 +30,8 @@ #include "common/config-manager.h" #include "common/textconsole.h" #include "backends/fs/wii/wii-fs-factory.h" +#include "backends/saves/default/default-saves.h" +#include "backends/timer/default/default-timer.h" #include "osystem.h" #include "options.h" @@ -96,20 +94,12 @@ OSystem_Wii::OSystem_Wii() : _padSensitivity(16), _padAcceleration(4), - _savefile(NULL), - _mixer(NULL), - _timer(NULL) { + _mixer(NULL) { } OSystem_Wii::~OSystem_Wii() { - delete _savefile; - _savefile = NULL; - delete _mixer; _mixer = NULL; - - delete _timer; - _timer = NULL; } void OSystem_Wii::initBackend() { @@ -143,14 +133,14 @@ void OSystem_Wii::initBackend() { if (!getcwd(buf, MAXPATHLEN)) strcpy(buf, "/"); - _savefile = new DefaultSaveFileManager(buf); - _timer = new DefaultTimerManager(); + _savefileManager = new DefaultSaveFileManager(buf); + _timerManager = new DefaultTimerManager(); initGfx(); initSfx(); initEvents(); - OSystem::initBackend(); + EventsBaseBackend::initBackend(); } void OSystem_Wii::quit() { @@ -175,7 +165,7 @@ void OSystem_Wii::engineDone() { bool OSystem_Wii::hasFeature(Feature f) { return (f == kFeatureFullscreenMode) || (f == kFeatureAspectRatioCorrection) || - (f == kFeatureCursorHasPalette) || + (f == kFeatureCursorPalette) || (f == kFeatureOverlaySupportsAlpha); } @@ -188,6 +178,13 @@ void OSystem_Wii::setFeatureState(Feature f, bool enable) { case kFeatureAspectRatioCorrection: _arCorrection = enable; break; + case kFeatureCursorPalette: + _cursorPaletteDisabled = !enable; + if (_texMouse.palette && !enable) { + memcpy(_texMouse.palette, _cursorPalette, 256 * 2); + _cursorPaletteDirty = true; + } + break; default: break; } @@ -199,6 +196,8 @@ bool OSystem_Wii::getFeatureState(Feature f) { return _fullscreen; case kFeatureAspectRatioCorrection: return _arCorrection; + case kFeatureCursorPalette: + return !_cursorPaletteDisabled; default: return false; } @@ -252,21 +251,11 @@ void OSystem_Wii::setWindowCaption(const char *caption) { printf("window caption: %s\n", caption); } -Common::SaveFileManager *OSystem_Wii::getSavefileManager() { - assert(_savefile); - return _savefile; -} - Audio::Mixer *OSystem_Wii::getMixer() { assert(_mixer); return _mixer; } -Common::TimerManager *OSystem_Wii::getTimerManager() { - assert(_timer); - return _timer; -} - FilesystemFactory *OSystem_Wii::getFilesystemFactory() { return &WiiFilesystemFactory::instance(); } @@ -298,6 +287,18 @@ void OSystem_Wii::showOptionsDialog() { _padAcceleration = 9 - ConfMan.getInt("wii_pad_acceleration"); } +void OSystem_Wii::logMessage(LogMessageType::Type type, const char *message) { + FILE *output = 0; + + if (type == LogMessageType::kInfo || type == LogMessageType::kDebug) + output = stdout; + else + output = stderr; + + fputs(message, output); + fflush(output); +} + #ifndef GAMECUBE Common::String OSystem_Wii::getSystemLanguage() const { const char *wiiCountries[] = { @@ -368,7 +369,7 @@ Common::String OSystem_Wii::getSystemLanguage() const { } else { // This will only happen when new languages are added to the API. warning("WII: Unknown system language: %d", langID); - return BaseBackend::getSystemLanguage(); + return EventsBaseBackend::getSystemLanguage(); } } #endif // !GAMECUBE diff --git a/backends/platform/wii/osystem.h b/backends/platform/wii/osystem.h index 0db5f92fff..64197f913a 100644 --- a/backends/platform/wii/osystem.h +++ b/backends/platform/wii/osystem.h @@ -32,8 +32,6 @@ #include "common/rect.h" #include "common/events.h" #include "backends/base-backend.h" -#include "backends/saves/default/default-saves.h" -#include "backends/timer/default/default-timer.h" #include "graphics/colormasks.h" #include "graphics/palette.h" #include "graphics/surface.h" @@ -54,7 +52,7 @@ extern void wii_memstats(void); } #endif -class OSystem_Wii : public BaseBackend, public PaletteManager { +class OSystem_Wii : public EventsBaseBackend, public PaletteManager { private: s64 _startup_time; @@ -130,9 +128,7 @@ private: void showOptionsDialog(); protected: - Common::SaveFileManager *_savefile; Audio::MixerImpl *_mixer; - DefaultTimerManager *_timer; public: enum { @@ -171,7 +167,6 @@ protected: virtual void grabPalette(byte *colors, uint start, uint num); public: virtual void setCursorPalette(const byte *colors, uint start, uint num); - virtual void disableCursorPalette(bool disable); virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); virtual void updateScreen(); @@ -212,12 +207,12 @@ public: virtual void setWindowCaption(const char *caption); - virtual Common::SaveFileManager *getSavefileManager(); virtual Audio::Mixer *getMixer(); - virtual Common::TimerManager *getTimerManager(); virtual FilesystemFactory *getFilesystemFactory(); virtual void getTimeAndDate(TimeDate &t) const; + virtual void logMessage(LogMessageType::Type type, const char *message); + #ifndef GAMECUBE virtual Common::String getSystemLanguage() const; #endif // GAMECUBE diff --git a/backends/platform/wii/osystem_events.cpp b/backends/platform/wii/osystem_events.cpp index 8e51bbc673..389d3823e7 100644 --- a/backends/platform/wii/osystem_events.cpp +++ b/backends/platform/wii/osystem_events.cpp @@ -35,6 +35,7 @@ #endif #include "common/config-manager.h" +#include "backends/timer/default/default-timer.h" #define TIMER_THREAD_STACKSIZE (1024 * 32) #define TIMER_THREAD_PRIO 64 diff --git a/backends/platform/wii/osystem_gfx.cpp b/backends/platform/wii/osystem_gfx.cpp index b44c1270f5..859e3a1395 100644 --- a/backends/platform/wii/osystem_gfx.cpp +++ b/backends/platform/wii/osystem_gfx.cpp @@ -394,15 +394,6 @@ void OSystem_Wii::setCursorPalette(const byte *colors, uint start, uint num) { _cursorPaletteDirty = true; } -void OSystem_Wii::disableCursorPalette(bool disable) { - _cursorPaletteDisabled = disable; - - if (_texMouse.palette && disable) { - memcpy(_texMouse.palette, _cursorPalette, 256 * 2); - _cursorPaletteDirty = true; - } -} - void OSystem_Wii::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) { assert(x >= 0 && x < _gameWidth); diff --git a/backends/platform/wince/CEActionsPocket.cpp b/backends/platform/wince/CEActionsPocket.cpp index f2c461fcf9..a4786d330d 100644 --- a/backends/platform/wince/CEActionsPocket.cpp +++ b/backends/platform/wince/CEActionsPocket.cpp @@ -233,15 +233,15 @@ CEActionsPocket::~CEActionsPocket() { bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) { static bool keydialogrunning = false, quitdialog = false; + _graphicsMan = ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager()); + if (!pushed) { switch (action) { case POCKET_ACTION_RIGHTCLICK: - //_CESystem->add_right_click(false); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->add_right_click(false); + _graphicsMan->add_right_click(false); return true; case POCKET_ACTION_LEFTCLICK: - //_CESystem->add_left_click(false); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->add_left_click(false); + _graphicsMan->add_left_click(false); return true; case POCKET_ACTION_PAUSE: case POCKET_ACTION_SAVE: @@ -249,7 +249,6 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) { case POCKET_ACTION_MULTI: EventsBuffer::simulateKey(&_key_action[action], false); return true; - } return false; } @@ -271,55 +270,43 @@ bool CEActionsPocket::perform(GUI::ActionType action, bool pushed) { EventsBuffer::simulateKey(&_key_action[action], true); return true; case POCKET_ACTION_KEYBOARD: - //_CESystem->swap_panel(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->swap_panel(); + _graphicsMan->swap_panel(); return true; case POCKET_ACTION_HIDE: - //_CESystem->swap_panel_visibility(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->swap_panel_visibility(); + _graphicsMan->swap_panel_visibility(); return true; case POCKET_ACTION_SOUND: _CESystem->swap_sound_master(); return true; case POCKET_ACTION_RIGHTCLICK: - //_CESystem->add_right_click(true); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->add_right_click(true); + _graphicsMan->add_right_click(true); return true; case POCKET_ACTION_CURSOR: - //_CESystem->swap_mouse_visibility(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->swap_mouse_visibility(); + _graphicsMan->swap_mouse_visibility(); return true; case POCKET_ACTION_FREELOOK: - //_CESystem->swap_freeLook(); - ((WINCESdlEventSource *)((OSystem_SDL *)g_system)->getEventManager())->swap_freeLook(); + _graphicsMan->swap_freeLook(); return true; case POCKET_ACTION_ZOOM_UP: - //_CESystem->swap_zoom_up(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->swap_zoom_up(); + _graphicsMan->swap_zoom_up(); return true; case POCKET_ACTION_ZOOM_DOWN: - //_CESystem->swap_zoom_down(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->swap_zoom_down(); + _graphicsMan->swap_zoom_down(); return true; case POCKET_ACTION_LEFTCLICK: - //_CESystem->add_left_click(true); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->add_left_click(true); + _graphicsMan->add_left_click(true); return true; case POCKET_ACTION_UP: - //_CESystem->move_cursor_up(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->move_cursor_up(); + _graphicsMan->move_cursor_up(); return true; case POCKET_ACTION_DOWN: - //_CESystem->move_cursor_down(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->move_cursor_down(); + _graphicsMan->move_cursor_down(); return true; case POCKET_ACTION_LEFT: - //_CESystem->move_cursor_left(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->move_cursor_left(); + _graphicsMan->move_cursor_left(); return true; case POCKET_ACTION_RIGHT: - //_CESystem->move_cursor_right(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->move_cursor_right(); + _graphicsMan->move_cursor_right(); return true; case POCKET_ACTION_QUIT: if (!quitdialog) { diff --git a/backends/platform/wince/CEActionsPocket.h b/backends/platform/wince/CEActionsPocket.h index fd97c0b1df..e1f52b6b88 100644 --- a/backends/platform/wince/CEActionsPocket.h +++ b/backends/platform/wince/CEActionsPocket.h @@ -28,6 +28,7 @@ #include "common/str.h" #include "gui/Key.h" #include "gui/Actions.h" +#include "backends/graphics/wincesdl/wincesdl-graphics.h" #define POCKET_ACTION_VERSION 5 @@ -80,6 +81,7 @@ public: ~CEActionsPocket(); private: CEActionsPocket(const Common::String &gameid); + WINCESdlGraphicsManager *_graphicsMan; bool _right_click_needed; bool _hide_toolbar_needed; bool _zoom_needed; diff --git a/backends/platform/wince/CEActionsSmartphone.cpp b/backends/platform/wince/CEActionsSmartphone.cpp index fdd52cfc26..b12dadabb6 100644 --- a/backends/platform/wince/CEActionsSmartphone.cpp +++ b/backends/platform/wince/CEActionsSmartphone.cpp @@ -199,15 +199,15 @@ CEActionsSmartphone::~CEActionsSmartphone() { bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) { static bool keydialogrunning = false, quitdialog = false; + _graphicsMan = ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager()); + if (!pushed) { switch (action) { case SMARTPHONE_ACTION_RIGHTCLICK: - //_CESystem->add_right_click(false); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->add_right_click(false); + _graphicsMan->add_right_click(false); return true; case SMARTPHONE_ACTION_LEFTCLICK: - //_CESystem->add_left_click(false); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->add_left_click(false); + _graphicsMan->add_left_click(false); return true; case SMARTPHONE_ACTION_SAVE: case SMARTPHONE_ACTION_SKIP: @@ -234,32 +234,25 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) { EventsBuffer::simulateKey(&_key_action[action], true); return true; case SMARTPHONE_ACTION_RIGHTCLICK: - //_CESystem->add_right_click(true); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->add_right_click(true); + _graphicsMan->add_right_click(true); return true; case SMARTPHONE_ACTION_LEFTCLICK: - //_CESystem->add_left_click(true); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->add_left_click(true); + _graphicsMan->add_left_click(true); return true; case SMARTPHONE_ACTION_UP: - //_CESystem->move_cursor_up(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->move_cursor_up(); + _graphicsMan->move_cursor_up(); return true; case SMARTPHONE_ACTION_DOWN: - //_CESystem->move_cursor_down(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->move_cursor_down(); + _graphicsMan->move_cursor_down(); return true; case SMARTPHONE_ACTION_LEFT: - //_CESystem->move_cursor_left(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->move_cursor_left(); + _graphicsMan->move_cursor_left(); return true; case SMARTPHONE_ACTION_RIGHT: - //_CESystem->move_cursor_right(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->move_cursor_right(); + _graphicsMan->move_cursor_right(); return true; case SMARTPHONE_ACTION_ZONE: - //_CESystem->switch_zone(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->switch_zone(); + _graphicsMan->switch_zone(); return true; case SMARTPHONE_ACTION_BINDKEYS: if (!keydialogrunning) { @@ -271,12 +264,10 @@ bool CEActionsSmartphone::perform(GUI::ActionType action, bool pushed) { } return true; case SMARTPHONE_ACTION_KEYBOARD: - //_CESystem->swap_smartphone_keyboard(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->swap_smartphone_keyboard(); + _graphicsMan->swap_smartphone_keyboard(); return true; case SMARTPHONE_ACTION_ROTATE: - //_CESystem->smartphone_rotate_display(); - ((WINCESdlGraphicsManager *)((OSystem_SDL *)g_system)->getGraphicsManager())->smartphone_rotate_display(); + _graphicsMan->smartphone_rotate_display(); return true; case SMARTPHONE_ACTION_QUIT: if (!quitdialog) { diff --git a/backends/platform/wince/CEActionsSmartphone.h b/backends/platform/wince/CEActionsSmartphone.h index 5535ce1350..3da46d3923 100644 --- a/backends/platform/wince/CEActionsSmartphone.h +++ b/backends/platform/wince/CEActionsSmartphone.h @@ -28,6 +28,7 @@ #include "common/str.h" #include "gui/Key.h" #include "gui/Actions.h" +#include "backends/graphics/wincesdl/wincesdl-graphics.h" #define SMARTPHONE_ACTION_VERSION 5 @@ -68,6 +69,7 @@ public: ~CEActionsSmartphone(); private: CEActionsSmartphone(); + WINCESdlGraphicsManager *_graphicsMan; bool _right_click_needed; OSystem_WINCE3 *_CESystem; }; diff --git a/backends/platform/wince/Makefile b/backends/platform/wince/Makefile index a9741f396f..7f8d45b3de 100644 --- a/backends/platform/wince/Makefile +++ b/backends/platform/wince/Makefile @@ -47,7 +47,6 @@ ENABLE_MADE = STATIC_PLUGIN ## Pick which libraries you want to use here USE_MAD = 1 -#USE_MPEG2 = 1 #USE_TREMOR = 1 USE_TREMOLO = 1 #USE_FLAC = 1 @@ -133,11 +132,6 @@ DEFINES += -DUSE_MAD LIBS += -lmad endif -ifdef USE_MPEG2 -DEFINES += -DUSE_MPEG2 -LIBS += -lmpeg2 -endif - ifdef USE_TREMOR DEFINES += -DUSE_TREMOR -DUSE_VORBIS LIBS += -ltremorce diff --git a/backends/platform/wince/README-WinCE.txt b/backends/platform/wince/README-WinCE.txt index 69abd66e69..c48d9ca998 100644 --- a/backends/platform/wince/README-WinCE.txt +++ b/backends/platform/wince/README-WinCE.txt @@ -1,15 +1,49 @@ ScummVM Windows CE FAQ -Last updated: $Date$ -Release version: 1.1.0 +Last updated: 2011-05-27 +Release version: 1.3.0 ------------------------------------------------------------------------ New in this version ------------------- -1.1.1 +1.3.0: +This is the first official Windows CE release since 1.1.1. + +The following new engines are now included (changes since last WinCE release): + - Draci Engine (Dragon History) + - Hugo Engine (Hugo Trilogy) + - Mohawk Engine (Myst, Riven, Living Book games & Where in Time is Carmen + Sandiego?) + - SCI Engine (Sierra SCI games, see main README for a list of supported games) + - Toon Engine (Toonstruck) + +Also, there are now 4 binaries in this distribution, a single executable +which contains all engines (for devices with enough memory) and 3 smaller +binaries which contain only some of the engines. The following lists all +executables and the engines they contain: + +scummvm.exe: + - all supported engines +scummvm1.exe: + - scumm, agi, cruise, draci, lure, queen, sky, sword1, tinsel, touche +scummvm2.exe: + - agos, cine, drascula, gob, groovie, kyra, made, parallaction, saga, + teenagent, tucker +scummvm3.exe: + - hugo, mohawk, sci, sword2, toon + +There are no other port specific changes. + +1.2.1: +(Note: No official 1.2.1 release) + +1.2.0: +(Note: No official 1.2.0 release) + +1.1.1: Fix to the Normal2xAspect scaler that was causing crashes. -1.1.0 +1.1.0: The TeenAgent engine is now included, but there are no other port specific changes since 1.0.0. diff --git a/backends/platform/wince/portdefs.h b/backends/platform/wince/portdefs.h index 64aa80abf2..93df6cd39e 100644 --- a/backends/platform/wince/portdefs.h +++ b/backends/platform/wince/portdefs.h @@ -20,40 +20,47 @@ * */ -// Missing string/stdlib/assert declarations for WinCE 2.xx +#ifndef WINCE_PORTDEFS_H +#define WINCE_PORTDEFS_H + +#ifndef _WIN32_WCE +#error For use on WinCE only +#endif +// Missing string/stdlib/assert declarations for WinCE 2.xx #if _WIN32_WCE < 300 -void *calloc(size_t n, size_t s); -int isalnum(int c); -int isdigit(int c); -int isprint(int c); -int isspace(int c); -char *strrchr(const char *s, int c); -char *strdup(const char *s); -void assert(void *expression); -void assert(int expression); -long int strtol(const char *nptr, char **endptr, int base); -char *_strdup(const char *s); -char *strpbrk(const char *s, const char *accept); + #define SMALL_SCREEN_DEVICE + + void *calloc(size_t n, size_t s); + int isalnum(int c); + int isdigit(int c); + int isprint(int c); + int isspace(int c); + char *strrchr(const char *s, int c); + char *strdup(const char *s); + void assert(void *expression); + void assert(int expression); + long int strtol(const char *nptr, char **endptr, int base); + char *_strdup(const char *s); + char *strpbrk(const char *s, const char *accept); #endif -#ifdef _WIN32_WCE #ifndef __GNUC__ -void *bsearch(const void *, const void *, size_t, size_t, int (*x)(const void *, const void *)); -char *getcwd(char *buf, int size); -typedef int ptrdiff_t; -void GetCurrentDirectory(int len, char *buf); -#define INVALID_FILE_ATTRIBUTES 0xffffffff + void *bsearch(const void *, const void *, size_t, size_t, int (*x)(const void *, const void *)); + char *getcwd(char *buf, int size); + typedef int ptrdiff_t; + void GetCurrentDirectory(int len, char *buf); + #define INVALID_FILE_ATTRIBUTES 0xffffffff #else -#include <math.h> -#undef GetCurrentDirectory -extern "C" void GetCurrentDirectory(int len, char *buf); -#define snprintf _snprintf -#define strdup _strdup -#define fopen wce_fopen + #include <math.h> + #undef GetCurrentDirectory + extern "C" void GetCurrentDirectory(int len, char *buf); + #define snprintf _snprintf + #define strdup _strdup + #define fopen wce_fopen #endif #include <windows.h> @@ -68,7 +75,7 @@ extern "C" void GetCurrentDirectory(int len, char *buf); //#include <direct.h> #ifdef __MINGW32CE__ -void *bsearch(const void *, const void *, size_t, size_t, int (*x)(const void *, const void *)); + void *bsearch(const void *, const void *, size_t, size_t, int (*x)(const void *, const void *)); #endif int remove(const char *path); int _access(const char *path, int mode); @@ -77,4 +84,5 @@ void drawError(char *); #define vsnprintf _vsnprintf + #endif diff --git a/backends/platform/wince/wince-sdl.cpp b/backends/platform/wince/wince-sdl.cpp index a53bc41667..54fa71cfd2 100644 --- a/backends/platform/wince/wince-sdl.cpp +++ b/backends/platform/wince/wince-sdl.cpp @@ -379,10 +379,17 @@ void OSystem_WINCE3::initBackend() { ((WINCESdlEventSource *)_eventSource)->init((WINCESdlGraphicsManager *)_graphicsManager); + + // FIXME: This timer manager is *not accesible* from the outside. + // Instead the timer manager setup by OSystem_SDL is visible on the outside. + // Since the WinCE backend actually seems to work, my guess is that + // SDL_AddTimer works after all and the following code is redundant. + // However it may be, this must be resolved one way or another. + // Create the timer. CE SDL does not support multiple timers (SDL_AddTimer). // We work around this by using the SetTimer function, since we only use // one timer in scummvm (for the time being) - _timer = _int_timer = new DefaultTimerManager(); + _int_timer = new DefaultTimerManager(); //_timerID = NULL; // OSystem_SDL will call removetimer with this, it's ok SDL_SetTimer(10, &timer_handler_wrapper); @@ -443,14 +450,9 @@ OSystem_WINCE3::OSystem_WINCE3() : OSystem_SDL(), } OSystem_WINCE3::~OSystem_WINCE3() { - delete _fsFactory; delete _mixer; } -FilesystemFactory *OSystem_WINCE3::getFilesystemFactory() { - return _fsFactory; -} - void OSystem_WINCE3::swap_sound_master() { _soundMaster = !_soundMaster; @@ -464,7 +466,7 @@ void OSystem_WINCE3::swap_sound_master() { void OSystem_WINCE3::engineInit() { check_mappings(); // called here to initialize virtual keys handling - //update_game_settings(); + ((WINCESdlGraphicsManager *)_graphicsManager)->update_game_settings(); // finalize mixer init _mixerManager->init(); } @@ -576,6 +578,73 @@ void OSystem_WINCE3::getTimeAndDate(TimeDate &t) const { t.tm_sec = systime.wSecond; } +Common::String OSystem_WINCE3::getSystemLanguage() const { +#ifdef USE_DETECTLANG + // We can not use "setlocale" (at least not for MSVC builds), since it + // will return locales like: "English_USA.1252", thus we need a special + // way to determine the locale string for Win32. + char langName[9]; + char ctryName[9]; + TCHAR langNameW[32]; + TCHAR ctryNameW[32]; + int i = 0; + bool localeFound = false; + Common::String localeName; + + // Really not nice, but the only way to map Windows CE language/country codes to posix NLS names, + // because Windows CE doesn't support LOCALE_SISO639LANGNAME and LOCALE_SISO3166CTRYNAME, + // according to this: http://msdn.microsoft.com/en-us/library/aa912934.aspx + // + // See http://msdn.microsoft.com/en-us/goglobal/bb896001.aspx for a translation table + // This table has to be updated manually when new translations are added + const char *posixMappingTable[][3] = { + {"CAT", "ESP", "ca_ES"}, + {"CSY", "CZE", "cs_CZ"}, + {"DAN", "DNK", "da_DA"}, + {"DEU", "DEU", "de_DE"}, + {"ESN", "ESP", "es_ES"}, + {"ESP", "ESP", "es_ES"}, + {"FRA", "FRA", "fr_FR"}, + {"HUN", "HUN", "hu_HU"}, + {"ITA", "ITA", "it_IT"}, + {"NOR", "NOR", "nb_NO"}, + {"NON", "NOR", "nn_NO"}, + {"PLK", "POL", "pl_PL"}, + {"PTB", "BRA", "pt_BR"}, + {"RUS", "RUS", "ru_RU"}, + {"SVE", "SWE", "se_SE"}, + {"UKR", "UKR", "uk_UA"}, + {NULL, NULL, NULL} + }; + + if (GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SABBREVLANGNAME, langNameW, sizeof(langNameW)) != 0 && + GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SABBREVCTRYNAME, ctryNameW, sizeof(ctryNameW)) != 0) { + WideCharToMultiByte(CP_ACP, 0, langNameW, -1, langName, (wcslen(langNameW) + 1), NULL, NULL); + WideCharToMultiByte(CP_ACP, 0, ctryNameW, -1, ctryName, (wcslen(ctryNameW) + 1), NULL, NULL); + + debug(1, "Trying to find posix locale name for %s_%s", langName, ctryName); + while (posixMappingTable[i][0] && !localeFound) { + if ( (!strcmp(posixMappingTable[i][0], langName) || !strcmp(posixMappingTable[i][0], "*")) && + (!strcmp(posixMappingTable[i][1], ctryName) || !strcmp(posixMappingTable[i][0], "*")) ) { + localeFound = true; + localeName = posixMappingTable[i][2]; + } + i++; + } + if (!localeFound) warning("No posix locale name found for %s_%s", langName, ctryName); + } + + if (localeFound) { + debug(1, "Found posix locale name: %s", localeName.c_str()); + return localeName; + } else { + return ModularBackend::getSystemLanguage(); + } +#else // USE_DETECTLANG + return ModularBackend::getSystemLanguage(); +#endif // USE_DETECTLANG +} + int OSystem_WINCE3::_platformScreenWidth; int OSystem_WINCE3::_platformScreenHeight; bool OSystem_WINCE3::_isOzone; diff --git a/backends/platform/wince/wince-sdl.h b/backends/platform/wince/wince-sdl.h index a1e46081f9..481956c19a 100644 --- a/backends/platform/wince/wince-sdl.h +++ b/backends/platform/wince/wince-sdl.h @@ -53,12 +53,13 @@ public: // Overloaded from SDL backend void quit(); + virtual Common::String getSystemLanguage() const; + // Overloaded from OSystem void engineInit(); void getTimeAndDate(TimeDate &t) const; virtual Common::String getDefaultConfigFileName(); - virtual FilesystemFactory *getFilesystemFactory(); void swap_sound_master(); @@ -73,8 +74,6 @@ public: protected: void initSDL(); Audio::MixerImpl *_mixer; - DefaultTimerManager *_timer; - FilesystemFactory *_fsFactory; private: void check_mappings(); diff --git a/backends/plugins/posix/posix-provider.cpp b/backends/plugins/posix/posix-provider.cpp index 39ed247436..a68a792fa4 100644 --- a/backends/plugins/posix/posix-provider.cpp +++ b/backends/plugins/posix/posix-provider.cpp @@ -22,7 +22,7 @@ #include "common/scummsys.h" -#if defined(DYNAMIC_MODULES) && defined(UNIX) +#if defined(DYNAMIC_MODULES) && defined(POSIX) #include "backends/plugins/posix/posix-provider.h" #include "backends/plugins/dynamic-plugin.h" @@ -77,9 +77,9 @@ public: }; -Plugin* POSIXPluginProvider::createPlugin(const Common::FSNode &node) const { +Plugin *POSIXPluginProvider::createPlugin(const Common::FSNode &node) const { return new POSIXPlugin(node.getPath()); } -#endif // defined(DYNAMIC_MODULES) && defined(UNIX) +#endif // defined(DYNAMIC_MODULES) && defined(POSIX) diff --git a/backends/plugins/posix/posix-provider.h b/backends/plugins/posix/posix-provider.h index 7d6d6ada4d..b1186ccf3f 100644 --- a/backends/plugins/posix/posix-provider.h +++ b/backends/plugins/posix/posix-provider.h @@ -25,13 +25,13 @@ #include "base/plugins.h" -#if defined(DYNAMIC_MODULES) && defined(UNIX) +#if defined(DYNAMIC_MODULES) && defined(POSIX) class POSIXPluginProvider : public FilePluginProvider { protected: - Plugin* createPlugin(const Common::FSNode &node) const; + Plugin *createPlugin(const Common::FSNode &node) const; }; -#endif // defined(DYNAMIC_MODULES) && defined(UNIX) +#endif // defined(DYNAMIC_MODULES) && defined(POSIX) #endif diff --git a/backends/saves/posix/posix-saves.cpp b/backends/saves/posix/posix-saves.cpp index 37545c77c2..e04609be5b 100644 --- a/backends/saves/posix/posix-saves.cpp +++ b/backends/saves/posix/posix-saves.cpp @@ -28,7 +28,7 @@ #include "common/scummsys.h" -#if defined(UNIX) && !defined(DISABLE_DEFAULT_SAVEFILEMANAGER) +#if defined(POSIX) && !defined(DISABLE_DEFAULT_SAVEFILEMANAGER) #include "backends/saves/posix/posix-saves.h" @@ -51,7 +51,7 @@ POSIXSaveFileManager::POSIXSaveFileManager() { // Register default savepath based on HOME #if defined(SAMSUNGTV) - ConfMan.registerDefault("savepath", "/mtd_rwarea/scummvm/savegames"); + ConfMan.registerDefault("savepath", "/mtd_wiselink/scummvm savegames"); #else Common::String savePath; const char *home = getenv("HOME"); @@ -83,13 +83,7 @@ POSIXSaveFileManager::POSIXSaveFileManager() { } #endif } -/* -POSIXSaveFileManager::POSIXSaveFileManager(const Common::String &defaultSavepath) - : DefaultSaveFileManager(defaultSavepath) { -} -*/ -#if defined(UNIX) void POSIXSaveFileManager::checkPath(const Common::FSNode &dir) { const Common::String path = dir.getPath(); clearError(); @@ -154,6 +148,5 @@ void POSIXSaveFileManager::checkPath(const Common::FSNode &dir) { } } } -#endif #endif diff --git a/backends/saves/posix/posix-saves.h b/backends/saves/posix/posix-saves.h index b7ee7ff5b8..160075d3db 100644 --- a/backends/saves/posix/posix-saves.h +++ b/backends/saves/posix/posix-saves.h @@ -25,7 +25,7 @@ #include "backends/saves/default/default-saves.h" -#if defined(UNIX) +#if defined(POSIX) && !defined(DISABLE_DEFAULT_SAVEFILEMANAGER) /** * Customization of the DefaultSaveFileManager for POSIX platforms. * The only two differences are that the default constructor sets @@ -35,7 +35,6 @@ class POSIXSaveFileManager : public DefaultSaveFileManager { public: POSIXSaveFileManager(); -// POSIXSaveFileManager(const Common::String &defaultSavepath); protected: /** diff --git a/backends/vkeybd/image-map.h b/backends/vkeybd/image-map.h index 020bf70c67..3bd8cfa0db 100644 --- a/backends/vkeybd/image-map.h +++ b/backends/vkeybd/image-map.h @@ -23,9 +23,10 @@ #ifndef COMMON_IMAGEMAP_H #define COMMON_IMAGEMAP_H +#include "common/scummsys.h" + #ifdef ENABLE_VKEYBD -#include "common/scummsys.h" #include "common/hashmap.h" #include "common/hash-str.h" diff --git a/backends/vkeybd/polygon.h b/backends/vkeybd/polygon.h index bc76dfb4d7..19a12a0409 100644 --- a/backends/vkeybd/polygon.h +++ b/backends/vkeybd/polygon.h @@ -23,9 +23,10 @@ #ifndef COMMON_POLYGON_H #define COMMON_POLYGON_H +#include "common/scummsys.h" + #ifdef ENABLE_VKEYBD -#include "common/scummsys.h" #include "common/array.h" #include "common/rect.h" diff --git a/backends/vkeybd/virtual-keyboard-gui.h b/backends/vkeybd/virtual-keyboard-gui.h index e3798569fb..da80ef2223 100644 --- a/backends/vkeybd/virtual-keyboard-gui.h +++ b/backends/vkeybd/virtual-keyboard-gui.h @@ -23,10 +23,11 @@ #ifndef COMMON_VIRTUAL_KEYBOARD_GUI_H #define COMMON_VIRTUAL_KEYBOARD_GUI_H +#include "common/scummsys.h" + #ifdef ENABLE_VKEYBD #include "backends/vkeybd/virtual-keyboard.h" -#include "common/scummsys.h" #include "common/rect.h" #include "common/system.h" #include "graphics/font.h" diff --git a/backends/vkeybd/virtual-keyboard-parser.cpp b/backends/vkeybd/virtual-keyboard-parser.cpp index e2b35132dc..5e4ce11fe4 100644 --- a/backends/vkeybd/virtual-keyboard-parser.cpp +++ b/backends/vkeybd/virtual-keyboard-parser.cpp @@ -59,8 +59,7 @@ bool VirtualKeyboardParser::closedKeyCallback(ParserNode *node) { return parserError("Initial mode of keyboard pack not defined"); } else if (node->name.equalsIgnoreCase("mode")) { if (!_layoutParsed) { - return parserError("'%s' layout missing from '%s' mode", - _mode->resolution.c_str(), _mode->name.c_str()); + return parserError("'" + _mode->resolution + "' layout missing from '" + _mode->name + "' mode"); } } return true; @@ -105,7 +104,7 @@ bool VirtualKeyboardParser::parserCallback_mode(ParserNode *node) { if (_parseMode == kParseFull) { // if full parse then add new mode to keyboard if (_keyboard->_modes.contains(name)) - return parserError("Mode '%s' has already been defined", name.c_str()); + return parserError("Mode '" + name + "' has already been defined"); VirtualKeyboard::Mode mode; mode.name = name; @@ -177,7 +176,7 @@ bool VirtualKeyboardParser::parserCallback_event(ParserNode *node) { String name = node->values["name"]; if (_mode->events.contains(name)) - return parserError("Event '%s' has already been defined", name.c_str()); + return parserError("Event '" + name + "' has already been defined"); VirtualKeyboard::VKEvent *evt = new VirtualKeyboard::VKEvent(); evt->name = name; @@ -235,7 +234,7 @@ bool VirtualKeyboardParser::parserCallback_event(ParserNode *node) { evt->type = VirtualKeyboard::kVKEventMoveRight; } else { delete evt; - return parserError("Event type '%s' not known", type.c_str()); + return parserError("Event type '" + type + "' not known"); } _mode->events[name] = evt; @@ -257,7 +256,7 @@ bool VirtualKeyboardParser::parserCallback_layout(ParserNode *node) { SeekableReadStream *file = _keyboard->_fileArchive->createReadStreamForMember(_mode->bitmapName); if (!file) - return parserError("Bitmap '%s' not found", _mode->bitmapName.c_str()); + return parserError("Bitmap '" + _mode->bitmapName + "' not found"); const Graphics::PixelFormat format = g_system->getOverlayFormat(); @@ -265,7 +264,7 @@ bool VirtualKeyboardParser::parserCallback_layout(ParserNode *node) { delete file; if (!_mode->image) - return parserError("Error loading bitmap '%s'", _mode->bitmapName.c_str()); + return parserError("Error loading bitmap '" + _mode->bitmapName + "'"); int r, g, b; if (node->values.contains("transparent_color")) { @@ -313,7 +312,7 @@ bool VirtualKeyboardParser::parserCallback_area(ParserNode *node) { Polygon *poly = _mode->imageMap.createArea(target); return parsePolygon(*poly, coords); } - return parserError("Area shape '%s' not known", shape.c_str()); + return parserError("Area shape '" + shape + "' not known"); } byte VirtualKeyboardParser::parseFlags(const String& flags) { diff --git a/backends/vkeybd/virtual-keyboard-parser.h b/backends/vkeybd/virtual-keyboard-parser.h index a5d0e0e4f1..eb25ebe6fd 100644 --- a/backends/vkeybd/virtual-keyboard-parser.h +++ b/backends/vkeybd/virtual-keyboard-parser.h @@ -23,9 +23,10 @@ #ifndef COMMON_VIRTUAL_KEYBOARD_PARSER_H #define COMMON_VIRTUAL_KEYBOARD_PARSER_H +#include "common/scummsys.h" + #ifdef ENABLE_VKEYBD -#include "common/scummsys.h" #include "common/xmlparser.h" #include "backends/vkeybd/virtual-keyboard.h" diff --git a/backends/vkeybd/virtual-keyboard.h b/backends/vkeybd/virtual-keyboard.h index 4936275e23..21db5a47da 100644 --- a/backends/vkeybd/virtual-keyboard.h +++ b/backends/vkeybd/virtual-keyboard.h @@ -23,11 +23,12 @@ #ifndef COMMON_VIRTUAL_KEYBOARD_H #define COMMON_VIRTUAL_KEYBOARD_H +#include "common/scummsys.h" + #ifdef ENABLE_VKEYBD class OSystem; -#include "common/scummsys.h" #include "common/events.h" #include "common/hashmap.h" #include "common/hash-str.h" diff --git a/base/commandLine.cpp b/base/commandLine.cpp index 78eea50082..61853a1ebc 100644 --- a/base/commandLine.cpp +++ b/base/commandLine.cpp @@ -52,7 +52,7 @@ static const char USAGE_STRING[] = ; // DONT FIXME: DO NOT ORDER ALPHABETICALLY, THIS IS ORDERED BY IMPORTANCE/CATEGORY! :) -#if defined(__SYMBIAN32__) || defined(__GP32__) || defined(ANDROID) +#if defined(__SYMBIAN32__) || defined(__GP32__) || defined(ANDROID) || defined(__DS__) static const char HELP_STRING[] = "NoUsageString"; // save more data segment space #else static const char HELP_STRING[] = @@ -146,7 +146,7 @@ static void usage(const char *s, ...) { vsnprintf(buf, STRINGBUFLEN, s, va); va_end(va); -#if !(defined(__GP32__) || defined (__SYMBIAN32__)) +#if !(defined(__GP32__) || defined (__SYMBIAN32__) || defined(__DS__)) printf(USAGE_STRING, s_appName, buf, s_appName, s_appName); #endif exit(1); @@ -186,6 +186,8 @@ void registerDefaults() { ConfMan.registerDefault("cdrom", 0); + ConfMan.registerDefault("enable_unsupported_game_warning", true); + // Game specific ConfMan.registerDefault("path", ""); ConfMan.registerDefault("platform", Common::kPlatformPC); diff --git a/base/main.cpp b/base/main.cpp index 906f4c9242..395ba8344c 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -427,7 +427,7 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) { #endif // Did an error occur ? - if (result.getCode() != Common::kNoError) { + if (result.getCode() != Common::kNoError && result.getCode() != Common::kUserCanceled) { // Shows an informative error dialog if starting the selected game failed. GUI::displayErrorDialog(result, _("Error running game:")); } diff --git a/base/plugins.cpp b/base/plugins.cpp index 4a3b201714..8ce7b53254 100644 --- a/base/plugins.cpp +++ b/base/plugins.cpp @@ -106,6 +106,9 @@ public: #if PLUGIN_ENABLED_STATIC(DRASCULA) LINK_PLUGIN(DRASCULA) #endif + #if PLUGIN_ENABLED_STATIC(DREAMWEB) + LINK_PLUGIN(DREAMWEB) + #endif #if PLUGIN_ENABLED_STATIC(GOB) LINK_PLUGIN(GOB) #endif diff --git a/base/plugins.h b/base/plugins.h index 247564171d..a1ae734159 100644 --- a/base/plugins.h +++ b/base/plugins.h @@ -80,7 +80,7 @@ extern int pluginTypeVersions[PLUGIN_TYPE_MAX]; (ENABLE_##ID && !PLUGIN_ENABLED_DYNAMIC(ID)) #define PLUGIN_ENABLED_DYNAMIC(ID) \ - (ENABLE_##ID && (ENABLE_##ID == DYNAMIC_PLUGIN) && DYNAMIC_MODULES) + (ENABLE_##ID && (ENABLE_##ID == DYNAMIC_PLUGIN) && defined(DYNAMIC_MODULES)) // see comments in backends/plugins/elf/elf-provider.cpp #if defined(USE_ELF_LOADER) && defined(ELF_LOADER_CXA_ATEXIT) diff --git a/base/version.cpp b/base/version.cpp index 6a670c1a40..c91698cba9 100644 --- a/base/version.cpp +++ b/base/version.cpp @@ -60,6 +60,11 @@ const char *gScummVMBuildDate = __DATE__ " " __TIME__; const char *gScummVMVersionDate = SCUMMVM_VERSION " (" __DATE__ " " __TIME__ ")"; const char *gScummVMFullVersion = "ScummVM " SCUMMVM_VERSION " (" __DATE__ " " __TIME__ ")"; const char *gScummVMFeatures = "" +#ifdef TAINTED_BUILD + // TAINTED means the build contains engines/subengines not enabled by default + "TAINTED " +#endif + #ifdef USE_TREMOR #ifdef USE_TREMOLO // libTremolo is used on WinCE for better ogg performance @@ -112,5 +117,9 @@ const char *gScummVMFeatures = "" #ifdef USE_THEORADEC "Theora " #endif + +#ifdef USE_FAAD + "AAC " +#endif ; diff --git a/common/algorithm.h b/common/algorithm.h index fa9d08b380..00c0e1c98f 100644 --- a/common/algorithm.h +++ b/common/algorithm.h @@ -236,8 +236,10 @@ void sort(T first, T last) { // MSVC is complaining about the minus operator being applied to an unsigned type // We disable this warning for the affected section of code +#if defined(_MSC_VER) #pragma warning(push) #pragma warning(disable: 4146) +#endif /** * Euclid's algorithm to compute the greatest common divisor. @@ -261,7 +263,9 @@ T gcd(T a, T b) { return b; } +#if defined(_MSC_VER) #pragma warning(pop) +#endif } // End of namespace Common #endif diff --git a/common/array.h b/common/array.h index 7ab4a1b042..e5434091fb 100644 --- a/common/array.h +++ b/common/array.h @@ -252,6 +252,13 @@ public: _size = newSize; } + void assign(const_iterator first, const_iterator last) { + resize(distance(first, last)); // FIXME: ineffective? + T *dst = _storage; + while (first != last) + *dst++ = *first++; + } + protected: static uint roundUpCapacity(uint capacity) { // Round up capacity to the next power of 2; diff --git a/common/config-manager.cpp b/common/config-manager.cpp index 03fcb20abf..3941e27cc1 100644 --- a/common/config-manager.cpp +++ b/common/config-manager.cpp @@ -491,11 +491,9 @@ int ConfigManager::getInt(const String &key, const String &domName) const { bool ConfigManager::getBool(const String &key, const String &domName) const { String value(get(key, domName)); - - if ((value == "true") || (value == "yes") || (value == "1")) - return true; - if ((value == "false") || (value == "no") || (value == "0")) - return false; + bool val; + if (Common::parseBool(value, val)) + return val; error("ConfigManager::getBool(%s,%s): '%s' is not a valid bool", key.c_str(), domName.c_str(), value.c_str()); diff --git a/common/debug.cpp b/common/debug.cpp index dbbb204deb..0dae344bb2 100644 --- a/common/debug.cpp +++ b/common/debug.cpp @@ -107,18 +107,13 @@ bool DebugManager::isDebugChannelEnabled(uint32 channel) { #ifndef DISABLE_TEXT_CONSOLE static void debugHelper(const char *s, va_list va, bool caret = true) { - char buf[STRINGBUFLEN]; + Common::String buf = Common::String::vformat(s, va); - vsnprintf(buf, STRINGBUFLEN, s, va); - buf[STRINGBUFLEN-1] = '\0'; - - if (caret) { - buf[STRINGBUFLEN-2] = '\0'; - strcat(buf, "\n"); - } + if (caret) + buf += '\n'; if (g_system) - g_system->logMessage(LogMessageType::kDebug, buf); + g_system->logMessage(LogMessageType::kDebug, buf.c_str()); // TODO: Think of a good fallback in case we do not have // any OSystem yet. } diff --git a/common/error.cpp b/common/error.cpp index a6c52a0ce9..78178f8e27 100644 --- a/common/error.cpp +++ b/common/error.cpp @@ -67,6 +67,9 @@ static String errorToString(ErrorCode errorCode) { case kEnginePluginNotSupportSaves: return _s("Engine plugin does not support save states"); + case kUserCanceled: + return _s("User canceled"); + case kUnknownError: default: return _s("Unknown error"); diff --git a/common/error.h b/common/error.h index 23c12b67e4..7043862eea 100644 --- a/common/error.h +++ b/common/error.h @@ -62,6 +62,8 @@ enum ErrorCode { kEnginePluginNotFound, ///< Failed to find plugin to handle target kEnginePluginNotSupportSaves, ///< Failed if plugin does not support listing save states + kUserCanceled, ///< User has canceled the launching of the game + kUnknownError ///< Catch-all error, used if no other error code matches }; diff --git a/common/events.h b/common/events.h index 11eb0c316e..371080c1b2 100644 --- a/common/events.h +++ b/common/events.h @@ -306,7 +306,7 @@ public: /** - * Initialise the event manager. + * Initialize the event manager. * @note called after graphics system has been set up */ virtual void init() {} diff --git a/common/forbidden.h b/common/forbidden.h index c551110d0e..9cba19cf5e 100644 --- a/common/forbidden.h +++ b/common/forbidden.h @@ -34,6 +34,9 @@ * Backend files may #define FORBIDDEN_SYMBOL_ALLOW_ALL if they * have to access functions like fopen, fread etc. * Regular code, esp. code in engines/, should never do that. + * To ease transition, though, we allow re-enabling selected symbols + * in frontend code. However, this should only be used as a temporary + * measure. Especially new code should avoid this at all costs. */ #ifndef FORBIDDEN_SYMBOL_ALLOW_ALL @@ -51,7 +54,7 @@ * the compiler will hopefully print along with its own error message), * we try to make clear what is causing the error. */ -#define FORBIDDEN_SYMBOL_REPLACEMENT FORBIDDEN SYMBOL !%* +#define FORBIDDEN_SYMBOL_REPLACEMENT FORBIDDEN_look_at_common_forbidden_h_for_more_info SYMBOL !%* #ifndef FORBIDDEN_SYMBOL_EXCEPTION_printf @@ -79,6 +82,21 @@ #define FILE FORBIDDEN_SYMBOL_REPLACEMENT #endif +#ifndef FORBIDDEN_SYMBOL_EXCEPTION_stdin +#undef stdin +#define stdin FORBIDDEN_SYMBOL_REPLACEMENT +#endif + +#ifndef FORBIDDEN_SYMBOL_EXCEPTION_stdout +#undef stdout +#define stdout FORBIDDEN_SYMBOL_REPLACEMENT +#endif + +#ifndef FORBIDDEN_SYMBOL_EXCEPTION_stderr +#undef stderr +#define stderr FORBIDDEN_SYMBOL_REPLACEMENT +#endif + #ifndef FORBIDDEN_SYMBOL_EXCEPTION_fopen #undef fopen #define fopen(a,b) FORBIDDEN_SYMBOL_REPLACEMENT @@ -124,22 +142,41 @@ #define fputc(a,b) FORBIDDEN_SYMBOL_REPLACEMENT #endif +#ifndef FORBIDDEN_SYMBOL_EXCEPTION_fgets +#undef fgets +#define fgets(a,b,c) FORBIDDEN_SYMBOL_REPLACEMENT +#endif + +#ifndef FORBIDDEN_SYMBOL_EXCEPTION_fputs +#undef fputs +#define fputs(a,b) FORBIDDEN_SYMBOL_REPLACEMENT +#endif #ifndef FORBIDDEN_SYMBOL_EXCEPTION_getc #undef getc #define getc(a) FORBIDDEN_SYMBOL_REPLACEMENT #endif -#ifndef FORBIDDEN_SYMBOL_EXCEPTION_getchar -#undef getchar -#define getchar() FORBIDDEN_SYMBOL_REPLACEMENT -#endif - #ifndef FORBIDDEN_SYMBOL_EXCEPTION_putc #undef putc #define putc(a,b) FORBIDDEN_SYMBOL_REPLACEMENT #endif +#ifndef FORBIDDEN_SYMBOL_EXCEPTION_gets +#undef gets +#define gets(a) FORBIDDEN_SYMBOL_REPLACEMENT +#endif + +#ifndef FORBIDDEN_SYMBOL_EXCEPTION_puts +#undef puts +#define puts(a) FORBIDDEN_SYMBOL_REPLACEMENT +#endif + +#ifndef FORBIDDEN_SYMBOL_EXCEPTION_getchar +#undef getchar +#define getchar() FORBIDDEN_SYMBOL_REPLACEMENT +#endif + #ifndef FORBIDDEN_SYMBOL_EXCEPTION_putchar #undef putchar #define putchar(a) FORBIDDEN_SYMBOL_REPLACEMENT diff --git a/common/macresman.cpp b/common/macresman.cpp index 70c6e0a7ce..c1cab8b96a 100644 --- a/common/macresman.cpp +++ b/common/macresman.cpp @@ -32,7 +32,6 @@ #ifdef MACOSX #include "common/config-manager.h" -#include "backends/fs/stdiostream.h" #endif namespace Common { @@ -108,14 +107,17 @@ bool MacResManager::open(String filename) { #ifdef MACOSX // Check the actual fork on a Mac computer String fullPath = ConfMan.get("path") + "/" + filename + "/..namedfork/rsrc"; - SeekableReadStream *macResForkRawStream = StdioStream::makeFromPath(fullPath, false); + FSNode resFsNode = FSNode(fullPath); + if (resFsNode.exists()) { + SeekableReadStream *macResForkRawStream = resFsNode.createReadStream();; - if (macResForkRawStream && loadFromRawFork(*macResForkRawStream)) { - _baseFileName = filename; - return true; - } + if (macResForkRawStream && loadFromRawFork(*macResForkRawStream)) { + _baseFileName = filename; + return true; + } - delete macResForkRawStream; + delete macResForkRawStream; + } #endif File *file = new File(); @@ -168,14 +170,17 @@ bool MacResManager::open(FSNode path, String filename) { #ifdef MACOSX // Check the actual fork on a Mac computer String fullPath = path.getPath() + "/" + filename + "/..namedfork/rsrc"; - SeekableReadStream *macResForkRawStream = StdioStream::makeFromPath(fullPath, false); + FSNode resFsNode = FSNode(fullPath); + if (resFsNode.exists()) { + SeekableReadStream *macResForkRawStream = resFsNode.createReadStream();; - if (macResForkRawStream && loadFromRawFork(*macResForkRawStream)) { - _baseFileName = filename; - return true; - } + if (macResForkRawStream && loadFromRawFork(*macResForkRawStream)) { + _baseFileName = filename; + return true; + } - delete macResForkRawStream; + delete macResForkRawStream; + } #endif // First, let's try to see if the Mac converted name exists diff --git a/common/module.mk b/common/module.mk index a57de6a4b8..5f6a529595 100644 --- a/common/module.mk +++ b/common/module.mk @@ -17,6 +17,7 @@ MODULE_OBJS := \ memorypool.o \ md5.o \ mutex.o \ + quicktime.o \ random.o \ rational.o \ str.o \ diff --git a/common/quicktime.cpp b/common/quicktime.cpp new file mode 100644 index 0000000000..57534b301a --- /dev/null +++ b/common/quicktime.cpp @@ -0,0 +1,814 @@ +/* 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. + * + * $URL$ + * $Id$ + * + */ + +// +// Heavily based on ffmpeg code. +// +// Copyright (c) 2001 Fabrice Bellard. +// First version by Francois Revol revol@free.fr +// Seek function by Gael Chardon gael.dev@4now.net +// + +#include "common/debug.h" +#include "common/endian.h" +#include "common/macresman.h" +#include "common/memstream.h" +#include "common/quicktime.h" +#include "common/textconsole.h" +#include "common/util.h" +#include "common/zlib.h" + +namespace Common { + +//////////////////////////////////////////// +// QuickTimeParser +//////////////////////////////////////////// + +QuickTimeParser::QuickTimeParser() { + _beginOffset = 0; + _fd = 0; + _scaleFactorX = 1; + _scaleFactorY = 1; + _resFork = new Common::MacResManager(); + _disposeFileHandle = DisposeAfterUse::YES; + + initParseTable(); +} + +QuickTimeParser::~QuickTimeParser() { + close(); + delete _resFork; +} + +bool QuickTimeParser::parseFile(const Common::String &filename) { + if (!_resFork->open(filename) || !_resFork->hasDataFork()) + return false; + + _foundMOOV = false; + _disposeFileHandle = DisposeAfterUse::YES; + + Atom atom = { 0, 0, 0xffffffff }; + + if (_resFork->hasResFork()) { + // Search for a 'moov' resource + Common::MacResIDArray idArray = _resFork->getResIDArray(MKTAG('m', 'o', 'o', 'v')); + + if (!idArray.empty()) + _fd = _resFork->getResource(MKTAG('m', 'o', 'o', 'v'), idArray[0]); + + if (_fd) { + atom.size = _fd->size(); + if (readDefault(atom) < 0 || !_foundMOOV) + return false; + } + delete _fd; + + atom.type = 0; + atom.offset = 0; + atom.size = 0xffffffff; + } + + _fd = _resFork->getDataFork(); + + if (readDefault(atom) < 0 || !_foundMOOV) + return false; + + init(); + return true; +} + +bool QuickTimeParser::parseStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeFileHandle) { + _fd = stream; + _foundMOOV = false; + _disposeFileHandle = disposeFileHandle; + + Atom atom = { 0, 0, 0xffffffff }; + + if (readDefault(atom) < 0 || !_foundMOOV) { + close(); + return false; + } + + init(); + return true; +} + +void QuickTimeParser::init() { + // Remove unknown/unhandled tracks + for (uint32 i = 0; i < _tracks.size(); i++) { + if (_tracks[i]->codecType == CODEC_TYPE_MOV_OTHER) { + delete _tracks[i]; + _tracks.remove_at(i); + i--; + } + } + + // Adjust time scale + for (uint32 i = 0; i < _tracks.size(); i++) + if (!_tracks[i]->timeScale) + _tracks[i]->timeScale = _timeScale; +} + +void QuickTimeParser::initParseTable() { + static const ParseTable p[] = { + { &QuickTimeParser::readDefault, MKTAG('d', 'i', 'n', 'f') }, + { &QuickTimeParser::readLeaf, MKTAG('d', 'r', 'e', 'f') }, + { &QuickTimeParser::readDefault, MKTAG('e', 'd', 't', 's') }, + { &QuickTimeParser::readELST, MKTAG('e', 'l', 's', 't') }, + { &QuickTimeParser::readHDLR, MKTAG('h', 'd', 'l', 'r') }, + { &QuickTimeParser::readDefault, MKTAG('m', 'd', 'a', 't') }, + { &QuickTimeParser::readMDHD, MKTAG('m', 'd', 'h', 'd') }, + { &QuickTimeParser::readDefault, MKTAG('m', 'd', 'i', 'a') }, + { &QuickTimeParser::readDefault, MKTAG('m', 'i', 'n', 'f') }, + { &QuickTimeParser::readMOOV, MKTAG('m', 'o', 'o', 'v') }, + { &QuickTimeParser::readMVHD, MKTAG('m', 'v', 'h', 'd') }, + { &QuickTimeParser::readLeaf, MKTAG('s', 'm', 'h', 'd') }, + { &QuickTimeParser::readDefault, MKTAG('s', 't', 'b', 'l') }, + { &QuickTimeParser::readSTCO, MKTAG('s', 't', 'c', 'o') }, + { &QuickTimeParser::readSTSC, MKTAG('s', 't', 's', 'c') }, + { &QuickTimeParser::readSTSD, MKTAG('s', 't', 's', 'd') }, + { &QuickTimeParser::readSTSS, MKTAG('s', 't', 's', 's') }, + { &QuickTimeParser::readSTSZ, MKTAG('s', 't', 's', 'z') }, + { &QuickTimeParser::readSTTS, MKTAG('s', 't', 't', 's') }, + { &QuickTimeParser::readTKHD, MKTAG('t', 'k', 'h', 'd') }, + { &QuickTimeParser::readTRAK, MKTAG('t', 'r', 'a', 'k') }, + { &QuickTimeParser::readLeaf, MKTAG('u', 'd', 't', 'a') }, + { &QuickTimeParser::readLeaf, MKTAG('v', 'm', 'h', 'd') }, + { &QuickTimeParser::readCMOV, MKTAG('c', 'm', 'o', 'v') }, + { &QuickTimeParser::readWAVE, MKTAG('w', 'a', 'v', 'e') }, + { &QuickTimeParser::readESDS, MKTAG('e', 's', 'd', 's') }, + { 0, 0 } + }; + + _parseTable = p; +} + +int QuickTimeParser::readDefault(Atom atom) { + uint32 total_size = 0; + Atom a; + int err = 0; + + a.offset = atom.offset; + + while(((total_size + 8) < atom.size) && !_fd->eos() && _fd->pos() < _fd->size() && !err) { + a.size = atom.size; + a.type = 0; + + if (atom.size >= 8) { + a.size = _fd->readUint32BE(); + a.type = _fd->readUint32BE(); + + // Some QuickTime videos with resource forks have mdat chunks + // that are of size 0. Adjust it so it's the correct size. + if (a.type == MKTAG('m', 'd', 'a', 't') && a.size == 0) + a.size = _fd->size(); + } + + total_size += 8; + a.offset += 8; + debug(4, "type: %08x %.4s sz: %x %x %x", a.type, tag2str(a.type), a.size, atom.size, total_size); + + if (a.size == 1) { // 64 bit extended size + warning("64 bit extended size is not supported in QuickTime"); + return -1; + } + + if (a.size == 0) { + a.size = atom.size - total_size; + if (a.size <= 8) + break; + } + + uint32 i = 0; + + for (; _parseTable[i].type != 0 && _parseTable[i].type != a.type; i++) + ; // Empty + + if (a.size < 8) + break; + + a.size -= 8; + + if (_parseTable[i].type == 0) { // skip leaf atoms data + debug(0, ">>> Skipped [%s]", tag2str(a.type)); + + _fd->seek(a.size, SEEK_CUR); + } else { + uint32 start_pos = _fd->pos(); + err = (this->*_parseTable[i].func)(a); + + uint32 left = a.size - _fd->pos() + start_pos; + + if (left > 0) // skip garbage at atom end + _fd->seek(left, SEEK_CUR); + } + + a.offset += a.size; + total_size += a.size; + } + + if (!err && total_size < atom.size) + _fd->seek(atom.size - total_size, SEEK_SET); + + return err; +} + +int QuickTimeParser::readLeaf(Atom atom) { + if (atom.size > 1) + _fd->seek(atom.size, SEEK_SET); + + return 0; +} + +int QuickTimeParser::readMOOV(Atom atom) { + if (readDefault(atom) < 0) + return -1; + + // We parsed the 'moov' atom, so we don't need anything else + _foundMOOV = true; + return 1; +} + +int QuickTimeParser::readCMOV(Atom atom) { +#ifdef USE_ZLIB + // Read in the dcom atom + _fd->readUint32BE(); + if (_fd->readUint32BE() != MKTAG('d', 'c', 'o', 'm')) + return -1; + if (_fd->readUint32BE() != MKTAG('z', 'l', 'i', 'b')) { + warning("Unknown cmov compression type"); + return -1; + } + + // Read in the cmvd atom + uint32 compressedSize = _fd->readUint32BE() - 12; + if (_fd->readUint32BE() != MKTAG('c', 'm', 'v', 'd')) + return -1; + uint32 uncompressedSize = _fd->readUint32BE(); + + // Read in data + byte *compressedData = (byte *)malloc(compressedSize); + _fd->read(compressedData, compressedSize); + + // Create uncompressed stream + byte *uncompressedData = (byte *)malloc(uncompressedSize); + + // Uncompress the data + unsigned long dstLen = uncompressedSize; + if (!Common::uncompress(uncompressedData, &dstLen, compressedData, compressedSize)) { + warning ("Could not uncompress cmov chunk"); + free(compressedData); + free(uncompressedData); + return -1; + } + + // Load data into a new MemoryReadStream and assign _fd to be that + Common::SeekableReadStream *oldStream = _fd; + _fd = new Common::MemoryReadStream(uncompressedData, uncompressedSize, DisposeAfterUse::YES); + + // Read the contents of the uncompressed data + Atom a = { MKTAG('m', 'o', 'o', 'v'), 0, uncompressedSize }; + int err = readDefault(a); + + // Assign the file handle back to the original handle + free(compressedData); + delete _fd; + _fd = oldStream; + + return err; +#else + warning ("zlib not found, cannot read QuickTime cmov atom"); + return -1; +#endif +} + +int QuickTimeParser::readMVHD(Atom atom) { + byte version = _fd->readByte(); // version + _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags + + if (version == 1) { + warning("QuickTime version 1"); + _fd->readUint32BE(); _fd->readUint32BE(); + _fd->readUint32BE(); _fd->readUint32BE(); + } else { + _fd->readUint32BE(); // creation time + _fd->readUint32BE(); // modification time + } + + _timeScale = _fd->readUint32BE(); // time scale + debug(0, "time scale = %i\n", _timeScale); + + // duration + _duration = (version == 1) ? (_fd->readUint32BE(), _fd->readUint32BE()) : _fd->readUint32BE(); + _fd->readUint32BE(); // preferred scale + + _fd->readUint16BE(); // preferred volume + + _fd->seek(10, SEEK_CUR); // reserved + + // We only need two values from the movie display matrix. Most of the values are just + // skipped. xMod and yMod are 16:16 fixed point numbers, the last part of the 3x3 matrix + // is 2:30. + uint32 xMod = _fd->readUint32BE(); + _fd->skip(12); + uint32 yMod = _fd->readUint32BE(); + _fd->skip(16); + + _scaleFactorX = Common::Rational(0x10000, xMod); + _scaleFactorY = Common::Rational(0x10000, yMod); + + _scaleFactorX.debugPrint(1, "readMVHD(): scaleFactorX ="); + _scaleFactorY.debugPrint(1, "readMVHD(): scaleFactorY ="); + + _fd->readUint32BE(); // preview time + _fd->readUint32BE(); // preview duration + _fd->readUint32BE(); // poster time + _fd->readUint32BE(); // selection time + _fd->readUint32BE(); // selection duration + _fd->readUint32BE(); // current time + _fd->readUint32BE(); // next track ID + + return 0; +} + +int QuickTimeParser::readTRAK(Atom atom) { + Track *track = new Track(); + + if (!track) + return -1; + + track->codecType = CODEC_TYPE_MOV_OTHER; + track->startTime = 0; // XXX: check + _tracks.push_back(track); + + return readDefault(atom); +} + +int QuickTimeParser::readTKHD(Atom atom) { + Track *track = _tracks.back(); + byte version = _fd->readByte(); + + _fd->readByte(); _fd->readByte(); + _fd->readByte(); // flags + // + //MOV_TRACK_ENABLED 0x0001 + //MOV_TRACK_IN_MOVIE 0x0002 + //MOV_TRACK_IN_PREVIEW 0x0004 + //MOV_TRACK_IN_POSTER 0x0008 + // + + if (version == 1) { + _fd->readUint32BE(); _fd->readUint32BE(); + _fd->readUint32BE(); _fd->readUint32BE(); + } else { + _fd->readUint32BE(); // creation time + _fd->readUint32BE(); // modification time + } + + /* track->id = */_fd->readUint32BE(); // track id (NOT 0 !) + _fd->readUint32BE(); // reserved + //track->startTime = 0; // check + (version == 1) ? (_fd->readUint32BE(), _fd->readUint32BE()) : _fd->readUint32BE(); // highlevel (considering edits) duration in movie timebase + _fd->readUint32BE(); // reserved + _fd->readUint32BE(); // reserved + + _fd->readUint16BE(); // layer + _fd->readUint16BE(); // alternate group + _fd->readUint16BE(); // volume + _fd->readUint16BE(); // reserved + + // We only need the two values from the displacement matrix for a track. + // See readMVHD() for more information. + uint32 xMod = _fd->readUint32BE(); + _fd->skip(12); + uint32 yMod = _fd->readUint32BE(); + _fd->skip(16); + + track->scaleFactorX = Common::Rational(0x10000, xMod); + track->scaleFactorY = Common::Rational(0x10000, yMod); + + track->scaleFactorX.debugPrint(1, "readTKHD(): scaleFactorX ="); + track->scaleFactorY.debugPrint(1, "readTKHD(): scaleFactorY ="); + + // these are fixed-point, 16:16 + // uint32 tkWidth = _fd->readUint32BE() >> 16; // track width + // uint32 tkHeight = _fd->readUint32BE() >> 16; // track height + + return 0; +} + +// edit list atom +int QuickTimeParser::readELST(Atom atom) { + Track *track = _tracks.back(); + + _fd->readByte(); // version + _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags + + track->editCount = _fd->readUint32BE(); + track->editList = new EditListEntry[track->editCount]; + + debug(2, "Track %d edit list count: %d", _tracks.size() - 1, track->editCount); + + for (uint32 i = 0; i < track->editCount; i++){ + track->editList[i].trackDuration = _fd->readUint32BE(); + track->editList[i].mediaTime = _fd->readSint32BE(); + track->editList[i].mediaRate = Common::Rational(_fd->readUint32BE(), 0x10000); + debugN(3, "\tDuration = %d, Media Time = %d, ", track->editList[i].trackDuration, track->editList[i].mediaTime); + track->editList[i].mediaRate.debugPrint(3, "Media Rate ="); + } + + if (track->editCount != 1) + warning("Multiple edit list entries. Things may go awry"); + + return 0; +} + +int QuickTimeParser::readHDLR(Atom atom) { + Track *track = _tracks.back(); + + _fd->readByte(); // version + _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags + + // component type + uint32 ctype = _fd->readUint32BE(); + uint32 type = _fd->readUint32BE(); // component subtype + + debug(0, "ctype= %s (0x%08lx)", tag2str(ctype), (long)ctype); + debug(0, "stype= %s", tag2str(type)); + + if (ctype == MKTAG('m', 'h', 'l', 'r')) // MOV + debug(0, "MOV detected"); + else if (ctype == 0) + debug(0, "MPEG-4 detected"); + + if (type == MKTAG('v', 'i', 'd', 'e')) + track->codecType = CODEC_TYPE_VIDEO; + else if (type == MKTAG('s', 'o', 'u', 'n')) + track->codecType = CODEC_TYPE_AUDIO; + + _fd->readUint32BE(); // component manufacture + _fd->readUint32BE(); // component flags + _fd->readUint32BE(); // component flags mask + + if (atom.size <= 24) + return 0; // nothing left to read + + // .mov: PASCAL string + byte len = _fd->readByte(); + _fd->seek(len, SEEK_CUR); + + _fd->seek(atom.size - (_fd->pos() - atom.offset), SEEK_CUR); + + return 0; +} + +int QuickTimeParser::readMDHD(Atom atom) { + Track *track = _tracks.back(); + byte version = _fd->readByte(); + + if (version > 1) + return 1; // unsupported + + _fd->readByte(); _fd->readByte(); + _fd->readByte(); // flags + + if (version == 1) { + _fd->readUint32BE(); _fd->readUint32BE(); + _fd->readUint32BE(); _fd->readUint32BE(); + } else { + _fd->readUint32BE(); // creation time + _fd->readUint32BE(); // modification time + } + + track->timeScale = _fd->readUint32BE(); + track->duration = (version == 1) ? (_fd->readUint32BE(), _fd->readUint32BE()) : _fd->readUint32BE(); // duration + + _fd->readUint16BE(); // language + _fd->readUint16BE(); // quality + + return 0; +} + +int QuickTimeParser::readSTSD(Atom atom) { + Track *track = _tracks.back(); + + _fd->readByte(); // version + _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags + + uint32 entryCount = _fd->readUint32BE(); + track->sampleDescs.resize(entryCount); + + for (uint32 i = 0; i < entryCount; i++) { // Parsing Sample description table + Atom a = { 0, 0, 0 }; + uint32 start_pos = _fd->pos(); + int size = _fd->readUint32BE(); // size + uint32 format = _fd->readUint32BE(); // data format + + _fd->readUint32BE(); // reserved + _fd->readUint16BE(); // reserved + _fd->readUint16BE(); // index + + track->sampleDescs[i] = readSampleDesc(track, format); + + debug(0, "size=%d 4CC= %s codec_type=%d", size, tag2str(format), track->codecType); + + if (!track->sampleDescs[i]) { + // other codec type, just skip (rtp, mp4s, tmcd ...) + _fd->seek(size - (_fd->pos() - start_pos), SEEK_CUR); + } + + // this will read extra atoms at the end (wave, alac, damr, avcC, SMI ...) + a.size = size - (_fd->pos() - start_pos); + if (a.size > 8) + readDefault(a); + else if (a.size > 0) + _fd->seek(a.size, SEEK_CUR); + } + + return 0; +} + +int QuickTimeParser::readSTSC(Atom atom) { + Track *track = _tracks.back(); + + _fd->readByte(); // version + _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags + + track->sampleToChunkCount = _fd->readUint32BE(); + + debug(0, "track[%i].stsc.entries = %i", _tracks.size() - 1, track->sampleToChunkCount); + + track->sampleToChunk = new SampleToChunkEntry[track->sampleToChunkCount]; + + if (!track->sampleToChunk) + return -1; + + for (uint32 i = 0; i < track->sampleToChunkCount; i++) { + track->sampleToChunk[i].first = _fd->readUint32BE() - 1; + track->sampleToChunk[i].count = _fd->readUint32BE(); + track->sampleToChunk[i].id = _fd->readUint32BE(); + //warning("Sample to Chunk[%d]: First = %d, Count = %d", i, track->sampleToChunk[i].first, track->sampleToChunk[i].count); + } + + return 0; +} + +int QuickTimeParser::readSTSS(Atom atom) { + Track *track = _tracks.back(); + + _fd->readByte(); // version + _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags + + track->keyframeCount = _fd->readUint32BE(); + + debug(0, "keyframeCount = %d", track->keyframeCount); + + track->keyframes = new uint32[track->keyframeCount]; + + if (!track->keyframes) + return -1; + + for (uint32 i = 0; i < track->keyframeCount; i++) { + track->keyframes[i] = _fd->readUint32BE() - 1; // Adjust here, the frames are based on 1 + debug(6, "keyframes[%d] = %d", i, track->keyframes[i]); + + } + return 0; +} + +int QuickTimeParser::readSTSZ(Atom atom) { + Track *track = _tracks.back(); + + _fd->readByte(); // version + _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags + + track->sampleSize = _fd->readUint32BE(); + track->sampleCount = _fd->readUint32BE(); + + debug(5, "sampleSize = %d sampleCount = %d", track->sampleSize, track->sampleCount); + + if (track->sampleSize) + return 0; // there isn't any table following + + track->sampleSizes = new uint32[track->sampleCount]; + + if (!track->sampleSizes) + return -1; + + for(uint32 i = 0; i < track->sampleCount; i++) { + track->sampleSizes[i] = _fd->readUint32BE(); + debug(6, "sampleSizes[%d] = %d", i, track->sampleSizes[i]); + } + + return 0; +} + +int QuickTimeParser::readSTTS(Atom atom) { + Track *track = _tracks.back(); + uint32 totalSampleCount = 0; + + _fd->readByte(); // version + _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags + + track->timeToSampleCount = _fd->readUint32BE(); + track->timeToSample = new TimeToSampleEntry[track->timeToSampleCount]; + + debug(0, "track[%d].stts.entries = %d", _tracks.size() - 1, track->timeToSampleCount); + + for (int32 i = 0; i < track->timeToSampleCount; i++) { + track->timeToSample[i].count = _fd->readUint32BE(); + track->timeToSample[i].duration = _fd->readUint32BE(); + + debug(1, "\tCount = %d, Duration = %d", track->timeToSample[i].count, track->timeToSample[i].duration); + + totalSampleCount += track->timeToSample[i].count; + } + + track->frameCount = totalSampleCount; + return 0; +} + +int QuickTimeParser::readSTCO(Atom atom) { + Track *track = _tracks.back(); + + _fd->readByte(); // version + _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags + + track->chunkCount = _fd->readUint32BE(); + track->chunkOffsets = new uint32[track->chunkCount]; + + if (!track->chunkOffsets) + return -1; + + for (uint32 i = 0; i < track->chunkCount; i++) { + // WORKAROUND/HACK: The offsets in Riven videos (ones inside the Mohawk archives themselves) + // have offsets relative to the archive and not the video. This is quite nasty. We subtract + // the initial offset of the stream to get the correct value inside of the stream. + track->chunkOffsets[i] = _fd->readUint32BE() - _beginOffset; + } + + return 0; +} + +int QuickTimeParser::readWAVE(Atom atom) { + if (_tracks.empty()) + return 0; + + Track *track = _tracks.back(); + + if (atom.size > (1 << 30)) + return -1; + + if (track->sampleDescs[0]->getCodecTag() == MKTAG('Q', 'D', 'M', '2')) // Read extra data for QDM2 + track->extraData = _fd->readStream(atom.size - 8); + else if (atom.size > 8) + return readDefault(atom); + else + _fd->skip(atom.size); + + return 0; +} + +enum { + kMP4IODescTag = 2, + kMP4ESDescTag = 3, + kMP4DecConfigDescTag = 4, + kMP4DecSpecificDescTag = 5 +}; + +static int readMP4DescLength(Common::SeekableReadStream *stream) { + int length = 0; + int count = 4; + + while (count--) { + byte c = stream->readByte(); + length = (length << 7) | (c & 0x7f); + + if (!(c & 0x80)) + break; + } + + return length; +} + +static void readMP4Desc(Common::SeekableReadStream *stream, byte &tag, int &length) { + tag = stream->readByte(); + length = readMP4DescLength(stream); +} + +int QuickTimeParser::readESDS(Atom atom) { + if (_tracks.empty()) + return 0; + + Track *track = _tracks.back(); + + _fd->readUint32BE(); // version + flags + + byte tag; + int length; + + readMP4Desc(_fd, tag, length); + _fd->readUint16BE(); // id + if (tag == kMP4ESDescTag) + _fd->readByte(); // priority + + // Check if we've got the Config MPEG-4 header + readMP4Desc(_fd, tag, length); + if (tag != kMP4DecConfigDescTag) + return 0; + + track->objectTypeMP4 = _fd->readByte(); + _fd->readByte(); // stream type + _fd->readUint16BE(); _fd->readByte(); // buffer size + _fd->readUint32BE(); // max bitrate + _fd->readUint32BE(); // avg bitrate + + // Check if we've got the Specific MPEG-4 header + readMP4Desc(_fd, tag, length); + if (tag != kMP4DecSpecificDescTag) + return 0; + + track->extraData = _fd->readStream(length); + + debug(0, "MPEG-4 object type = %02x", track->objectTypeMP4); + return 0; +} + +void QuickTimeParser::close() { + for (uint32 i = 0; i < _tracks.size(); i++) + delete _tracks[i]; + + _tracks.clear(); + + if (_disposeFileHandle == DisposeAfterUse::YES) + delete _fd; + + _fd = 0; +} + +QuickTimeParser::SampleDesc::SampleDesc(Track *parentTrack, uint32 codecTag) { + _parentTrack = parentTrack; + _codecTag = codecTag; +} + +QuickTimeParser::Track::Track() { + chunkCount = 0; + chunkOffsets = 0; + timeToSampleCount = 0; + timeToSample = 0; + sampleToChunkCount = 0; + sampleToChunk = 0; + sampleSize = 0; + sampleCount = 0; + sampleSizes = 0; + keyframeCount = 0; + keyframes = 0; + timeScale = 0; + width = 0; + height = 0; + codecType = CODEC_TYPE_MOV_OTHER; + editCount = 0; + editList = 0; + extraData = 0; + frameCount = 0; + duration = 0; + startTime = 0; + objectTypeMP4 = 0; +} + +QuickTimeParser::Track::~Track() { + delete[] chunkOffsets; + delete[] timeToSample; + delete[] sampleToChunk; + delete[] sampleSizes; + delete[] keyframes; + delete[] editList; + delete extraData; + + for (uint32 i = 0; i < sampleDescs.size(); i++) + delete sampleDescs[i]; +} + +} // End of namespace Video diff --git a/common/quicktime.h b/common/quicktime.h new file mode 100644 index 0000000000..cb2bed1202 --- /dev/null +++ b/common/quicktime.h @@ -0,0 +1,213 @@ +/* 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. + * + * $URL$ + * $Id$ + * + */ + +// +// Heavily based on ffmpeg code. +// +// Copyright (c) 2001 Fabrice Bellard. +// First version by Francois Revol revol@free.fr +// Seek function by Gael Chardon gael.dev@4now.net +// + +#ifndef COMMON_QUICKTIME_H +#define COMMON_QUICKTIME_H + +#include "common/array.h" +#include "common/scummsys.h" +#include "common/stream.h" +#include "common/rational.h" + +namespace Common { + class MacResManager; + +/** + * Parser for QuickTime/MPEG-4 files. + * + * File parser used in engines: + * - groovie + * - mohawk + * - sci + */ +class QuickTimeParser { +public: + QuickTimeParser(); + virtual ~QuickTimeParser(); + + /** + * Load a QuickTime file + * @param filename the filename to load + */ + bool parseFile(const Common::String &filename); + + /** + * Load a QuickTime file from a SeekableReadStream + * @param stream the stream to load + * @param disposeFileHandle whether to delete the stream after use + */ + bool parseStream(Common::SeekableReadStream *stream, DisposeAfterUse::Flag disposeFileHandle = DisposeAfterUse::YES); + + /** + * Close a QuickTime file + */ + void close(); + + /** + * Set the beginning offset of the video so we can modify the offsets in the stco + * atom of videos inside the Mohawk archives + * @param the beginning offset of the video + */ + void setChunkBeginOffset(uint32 offset) { _beginOffset = offset; } + + bool isOpen() const { return _fd != 0; } + +protected: + // This is the file handle from which data is read from. It can be the actual file handle or a decompressed stream. + Common::SeekableReadStream *_fd; + + DisposeAfterUse::Flag _disposeFileHandle; + + struct Atom { + uint32 type; + uint32 offset; + uint32 size; + }; + + struct ParseTable { + int (QuickTimeParser::*func)(Atom atom); + uint32 type; + }; + + struct TimeToSampleEntry { + int count; + int duration; + }; + + struct SampleToChunkEntry { + uint32 first; + uint32 count; + uint32 id; + }; + + struct EditListEntry { + uint32 trackDuration; + int32 mediaTime; + Common::Rational mediaRate; + }; + + struct Track; + + class SampleDesc { + public: + SampleDesc(Track *parentTrack, uint32 codecTag); + virtual ~SampleDesc() {} + + uint32 getCodecTag() const { return _codecTag; } + + protected: + Track *_parentTrack; + uint32 _codecTag; + }; + + enum CodecType { + CODEC_TYPE_MOV_OTHER, + CODEC_TYPE_VIDEO, + CODEC_TYPE_AUDIO + }; + + struct Track { + Track(); + ~Track(); + + uint32 chunkCount; + uint32 *chunkOffsets; + int timeToSampleCount; + TimeToSampleEntry *timeToSample; + uint32 sampleToChunkCount; + SampleToChunkEntry *sampleToChunk; + uint32 sampleSize; + uint32 sampleCount; + uint32 *sampleSizes; + uint32 keyframeCount; + uint32 *keyframes; + int32 timeScale; + + uint16 width; + uint16 height; + CodecType codecType; + + Common::Array<SampleDesc *> sampleDescs; + + uint32 editCount; + EditListEntry *editList; + + Common::SeekableReadStream *extraData; + + uint32 frameCount; + uint32 duration; + uint32 startTime; + Common::Rational scaleFactorX; + Common::Rational scaleFactorY; + + byte objectTypeMP4; + }; + + virtual SampleDesc *readSampleDesc(Track *track, uint32 format) = 0; + + const ParseTable *_parseTable; + bool _foundMOOV; + uint32 _timeScale; + uint32 _duration; + Common::Rational _scaleFactorX; + Common::Rational _scaleFactorY; + Common::Array<Track *> _tracks; + uint32 _beginOffset; + Common::MacResManager *_resFork; + + void initParseTable(); + void init(); + + int readDefault(Atom atom); + int readLeaf(Atom atom); + int readELST(Atom atom); + int readHDLR(Atom atom); + int readMDHD(Atom atom); + int readMOOV(Atom atom); + int readMVHD(Atom atom); + int readTKHD(Atom atom); + int readTRAK(Atom atom); + int readSTCO(Atom atom); + int readSTSC(Atom atom); + int readSTSD(Atom atom); + int readSTSS(Atom atom); + int readSTSZ(Atom atom); + int readSTTS(Atom atom); + int readCMOV(Atom atom); + int readWAVE(Atom atom); + int readESDS(Atom atom); +}; + +} // End of namespace Common + +#endif diff --git a/common/savefile.h b/common/savefile.h index 40f316267f..03a7b52add 100644 --- a/common/savefile.h +++ b/common/savefile.h @@ -142,7 +142,7 @@ public: /** * Request a list of available savegames with a given DOS-style pattern, - * also known as "glob" in the UNIX world. Refer to the Common::matchString() + * also known as "glob" in the POSIX world. Refer to the Common::matchString() * function to learn about the precise pattern format. * @param pattern Pattern to match. Wildcards like * or ? are available. * @return list of strings for all present file names. diff --git a/common/scummsys.h b/common/scummsys.h index 5cf3ba4dad..9d4b6a9677 100644 --- a/common/scummsys.h +++ b/common/scummsys.h @@ -40,10 +40,42 @@ #if defined(WIN32) #ifdef _MSC_VER - // vsnprintf is already defined in Visual Studio 2008 - #if (_MSC_VER < 1500) - #define vsnprintf _vsnprintf - #endif + + // FIXME: The placement of the workaround functions for MSVC below + // require us to include stdio.h and stdarg.h for MSVC here. This + // is not exactly nice... + // We should think of a better way of doing this. + #include <stdio.h> + #include <stdarg.h> + + // MSVC's vsnprintf is either non-existant (2003) or bugged since it + // does not always include a terminating NULL (2005+). To work around + // that we fix up the _vsnprintf included. Note that the return value + // will still not match C99's specs! + inline int vsnprintf_msvc(char *str, size_t size, const char *format, va_list args) { + // We do not pass size - 1 here, to ensure we would get the same + // return value as when we would use _vsnprintf directly, since + // for example Common::String::format relies on this. + int retValue = _vsnprintf(str, size, format, args); + str[size - 1] = 0; + return retValue; + } + + #define vsnprintf vsnprintf_msvc + + // Visual Studio does not include snprintf in its standard C library. + // Instead it includes a function called _snprintf with somewhat + // similar semantics. The minor difference is that the return value in + // case the formatted string exceeds the buffer size is different. + // A much more dangerous one is that _snprintf does not always include + // a terminating null (Whoops!). Instead we map to our fixed vsnprintf. + inline int snprintf(char *str, size_t size, const char *format, ...) { + va_list args; + va_start(args, format); + int len = vsnprintf(str, size, format, args); + va_end(args); + return len; + } #endif #if !defined(_WIN32_WCE) @@ -136,88 +168,50 @@ // #define SCUMMVM_USE_PRAGMA_PACK +// +// Determine the host endianess and whether memory alignment is required. +// +#if !defined(HAVE_CONFIG_H) -#if defined(HAVE_CONFIG_H) - // All settings should have been set in config.h - -#elif defined(__SYMBIAN32__) - - #define SCUMM_LITTLE_ENDIAN - #define SCUMM_NEED_ALIGNMENT + #if defined(__DC__) || \ + defined(__DS__) || \ + defined(__GP32__) || \ + defined(IPHONE) || \ + defined(__PLAYSTATION2__) || \ + defined(__PSP__) || \ + defined(__SYMBIAN32__) -#elif defined(_WIN32_WCE) + #define SCUMM_LITTLE_ENDIAN + #define SCUMM_NEED_ALIGNMENT - #define SCUMM_LITTLE_ENDIAN + #elif defined(_WIN32_WCE) || defined(_MSC_VER) || defined(__MINGW32__) -#elif defined(_MSC_VER) + #define SCUMM_LITTLE_ENDIAN - #define SCUMM_LITTLE_ENDIAN + #elif defined(__amigaos4__) || defined(__N64__) || defined(__WII__) -#elif defined(__MINGW32__) + #define SCUMM_BIG_ENDIAN + #define SCUMM_NEED_ALIGNMENT - #define SCUMM_LITTLE_ENDIAN + #elif defined(SDL_BACKEND) + // On SDL based ports, we try to use SDL_BYTEORDER to determine the + // endianess. We explicitly do this as the *last* thing we try, so that + // platform specific settings have precedence. + #include <SDL_endian.h> -#elif defined(SDL_BACKEND) - /* need this for the SDL_BYTEORDER define */ - #include <SDL_byteorder.h> + #if SDL_BYTEORDER == SDL_LIL_ENDIAN + #define SCUMM_LITTLE_ENDIAN + #elif SDL_BYTEORDER == SDL_BIG_ENDIAN + #define SCUMM_BIG_ENDIAN + #else + #error Neither SDL_BIG_ENDIAN nor SDL_LIL_ENDIAN is set. + #endif - #if SDL_BYTEORDER == SDL_LIL_ENDIAN - #define SCUMM_LITTLE_ENDIAN - #elif SDL_BYTEORDER == SDL_BIG_ENDIAN - #define SCUMM_BIG_ENDIAN #else - #error Neither SDL_BIG_ENDIAN nor SDL_LIL_ENDIAN is set. - #endif - -#elif defined(__DC__) - - #define SCUMM_LITTLE_ENDIAN - #define SCUMM_NEED_ALIGNMENT - -#elif defined(__GP32__) - - #define SCUMM_LITTLE_ENDIAN - #define SCUMM_NEED_ALIGNMENT - -#elif defined(__PLAYSTATION2__) - - #define SCUMM_LITTLE_ENDIAN - #define SCUMM_NEED_ALIGNMENT -#elif defined(__N64__) - - #define SCUMM_BIG_ENDIAN - #define SCUMM_NEED_ALIGNMENT - -#elif defined(__PSP__) - - #define SCUMM_LITTLE_ENDIAN - #define SCUMM_NEED_ALIGNMENT - -#elif defined(__amigaos4__) - - #define SCUMM_BIG_ENDIAN - #define SCUMM_NEED_ALIGNMENT - -#elif defined(__DS__) - - #define SCUMM_NEED_ALIGNMENT - #define SCUMM_LITTLE_ENDIAN - -#elif defined(__WII__) - - #define SCUMM_BIG_ENDIAN - #define SCUMM_NEED_ALIGNMENT - -#elif defined(IPHONE) - - #define SCUMM_LITTLE_ENDIAN - #define SCUMM_NEED_ALIGNMENT - - -#else - #error No system type defined + #error No system type defined, host endianess unknown. + #endif #endif @@ -225,17 +219,7 @@ // Some more system specific settings. // TODO/FIXME: All of these should be moved to backend specific files (such as portdefs.h) // -#if defined(__SYMBIAN32__) - - #define SMALL_SCREEN_DEVICE - -#elif defined(_WIN32_WCE) - - #if _WIN32_WCE < 300 - #define SMALL_SCREEN_DEVICE - #endif - -#elif defined(DINGUX) +#if defined(DINGUX) // Very BAD hack following, used to avoid triggering an assert in uClibc dingux library // "toupper" when pressing keyboard function keys. @@ -294,7 +278,7 @@ #if defined(_MSC_VER) #define NORETURN_PRE __declspec(noreturn) #else - #define NORETURN_PRE + #define NORETURN_PRE #endif #endif @@ -302,7 +286,7 @@ #if defined(__GNUC__) || defined(__INTEL_COMPILER) #define NORETURN_POST __attribute__((__noreturn__)) #else - #define NORETURN_POST + #define NORETURN_POST #endif #endif @@ -318,98 +302,40 @@ #define MAXPATHLEN 256 #endif - -// -// Typedef our system types -// -#if !defined(HAVE_CONFIG_H) - - #if defined(__SYMBIAN32__) - - // Enable Symbians own datatypes - // This is done for two reasons - // a) uint is already defined by Symbians libc component - // b) Symbian is using its "own" datatyping, and the Scummvm port - // should follow this to ensure the best compability possible. - typedef unsigned char byte; - - typedef unsigned char uint8; - typedef signed char int8; - - typedef unsigned short int uint16; - typedef signed short int int16; - - typedef unsigned long int uint32; - typedef signed long int int32; - - #elif defined(__GP32__) - - // Override typenames. uint is already defined by system header files. - typedef unsigned char byte; - - typedef unsigned char uint8; - typedef signed char int8; - - typedef unsigned short int uint16; - typedef signed short int int16; - - typedef unsigned long int uint32; - typedef signed long int int32; - - #elif defined(__N64__) - - typedef unsigned char byte; - - typedef unsigned char uint8; - typedef signed char int8; - - typedef unsigned short int uint16; - typedef signed short int int16; - - typedef unsigned int uint32; - typedef signed int int32; - - #elif defined(__DS__) - - // Do nothing, the SDK defines all types we need in nds/ndstypes.h, - // which we include in our portsdef.h - +#ifndef scumm_va_copy + #if defined(va_copy) + #define scumm_va_copy va_copy + #elif defined(__va_copy) + #define scumm_va_copy __va_copy + #elif defined(_MSC_VER) + #define scumm_va_copy(dst, src) ((dst) = (src)) #else - - typedef unsigned char byte; - typedef unsigned char uint8; - typedef signed char int8; - typedef unsigned short uint16; - typedef signed short int16; - typedef unsigned int uint32; - typedef signed int int32; - typedef unsigned int uint; - + #error scumm_va_copy undefined for this port #endif - #endif + + // -// Define scumm_stricmp and scumm_strnicmp +// Typedef our system types unless they have already been defined by config.h, +// or SCUMMVM_DONT_DEFINE_TYPES is set. // -extern int scumm_stricmp(const char *s1, const char *s2); -extern int scumm_strnicmp(const char *s1, const char *s2, uint n); -#if defined(_WIN32_WCE) || defined(_MSC_VER) - // FIXME: Why is this necessary? - #define snprintf _snprintf +#if !defined(HAVE_CONFIG_H) && !defined(SCUMMVM_DONT_DEFINE_TYPES) + typedef unsigned char byte; + typedef unsigned char uint8; + typedef signed char int8; + typedef unsigned short uint16; + typedef signed short int16; + typedef unsigned int uint32; + typedef signed int int32; + typedef unsigned int uint; #endif // // Overlay color type (FIXME: shouldn't be declared here) // -#if defined(NEWGUI_256) - // 256 color only on PalmOS - typedef byte OverlayColor; -#else - // 15/16 bit color mode everywhere else... - typedef uint16 OverlayColor; -#endif +typedef uint16 OverlayColor; #include "common/forbidden.h" diff --git a/common/str.cpp b/common/str.cpp index 740e7b6a06..a2cd4a0193 100644 --- a/common/str.cpp +++ b/common/str.cpp @@ -19,13 +19,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#include "common/str.h" #include "common/hash-str.h" -#include "common/util.h" - +#include "common/list.h" #include "common/memorypool.h" - -#include <stdarg.h> +#include "common/str.h" +#include "common/util.h" namespace Common { @@ -256,7 +254,7 @@ String &String::operator=(char c) { String &String::operator+=(const char *str) { if (_str <= str && str <= _str + _size) - return operator+=(Common::String(str)); + return operator+=(String(str)); int len = strlen(str); if (len > 0) { @@ -270,7 +268,7 @@ String &String::operator+=(const char *str) { String &String::operator+=(const String &str) { if (&str == this) - return operator+=(Common::String(str)); + return operator+=(String(str)); int len = str._size; if (len > 0) { @@ -429,10 +427,22 @@ uint String::hash() const { // static String String::format(const char *fmt, ...) { String output; - assert(output.isStorageIntern()); va_list va; va_start(va, fmt); + output = String::vformat(fmt, va); + va_end(va); + + return output; +} + +// static +String String::vformat(const char *fmt, va_list args) { + String output; + assert(output.isStorageIntern()); + + va_list va; + scumm_va_copy(va, args); int len = vsnprintf(output._str, _builtinCapacity, fmt, va); va_end(va); @@ -457,7 +467,7 @@ String String::format(const char *fmt, ...) { assert(!output.isStorageIntern()); size = output._extern._capacity; - va_start(va, fmt); + scumm_va_copy(va, args); len = vsnprintf(output._str, size, fmt, va); va_end(va); } while (len == -1 || len >= size - 1); @@ -468,7 +478,7 @@ String String::format(const char *fmt, ...) { } else { // vsnprintf didn't have enough space, so grow buffer output.ensureCapacity(len, false); - va_start(va, fmt); + scumm_va_copy(va, args); int len2 = vsnprintf(output._str, len+1, fmt, va); va_end(va); assert(len == len2); @@ -612,7 +622,7 @@ char *trim(char *t) { return rtrim(ltrim(t)); } -Common::String lastPathComponent(const Common::String &path, const char sep) { +String lastPathComponent(const String &path, const char sep) { const char *str = path.c_str(); const char *last = str + path.size(); @@ -622,7 +632,7 @@ Common::String lastPathComponent(const Common::String &path, const char sep) { // Path consisted of only slashes -> return empty string if (last == str) - return Common::String(); + return String(); // Now scan the whole component const char *first = last - 1; @@ -632,24 +642,26 @@ Common::String lastPathComponent(const Common::String &path, const char sep) { if (*first == sep) first++; - return Common::String(first, last); + return String(first, last); } -Common::String normalizePath(const Common::String &path, const char sep) { +String normalizePath(const String &path, const char sep) { if (path.empty()) return path; const char *cur = path.c_str(); - Common::String result; + String result; // If there is a leading slash, preserve that: if (*cur == sep) { result += sep; + // Skip over multiple leading slashes, so "//" equals "/" while (*cur == sep) ++cur; } - // Scan till the end of the String + // Scan for path components till the end of the String + List<String> comps; while (*cur != 0) { const char *start = cur; @@ -657,18 +669,16 @@ Common::String normalizePath(const Common::String &path, const char sep) { while (*cur != sep && *cur != 0) cur++; - const Common::String component(start, cur); - - // Skip empty components and dot components, add all others - if (!component.empty() && component != ".") { - // Add a separator before the component, unless the result - // string already ends with one (which happens only if the - // path *starts* with a separator). - if (!result.empty() && result.lastChar() != sep) - result += sep; + const String component(start, cur); - // Add the component - result += component; + if (component.empty() || component == ".") { + // Skip empty components and dot components + } else if (!comps.empty() && component == ".." && comps.back() != "..") { + // If stack is non-empty and top is not "..", remove top + comps.pop_back(); + } else { + // Add the component to the stack + comps.push_back(component); } // Skip over separator chars @@ -676,6 +686,14 @@ Common::String normalizePath(const Common::String &path, const char sep) { cur++; } + // Finally, assemble all components back into a path + while (!comps.empty()) { + result += comps.front(); + comps.pop_front(); + if (!comps.empty()) + result += sep; + } + return result; } @@ -749,7 +767,7 @@ String tag2string(uint32 tag) { if (!isprint((unsigned char)str[i])) str[i] = '.'; } - return Common::String(str); + return String(str); } size_t strlcpy(char *dst, const char *src, size_t size) { diff --git a/common/str.h b/common/str.h index b76e4f8448..8e07b6233d 100644 --- a/common/str.h +++ b/common/str.h @@ -24,6 +24,8 @@ #include "common/scummsys.h" +#include <stdarg.h> + namespace Common { /** @@ -38,7 +40,7 @@ namespace Common { * a certain length do we allocate a buffer on the heap. * * The presence of \0 characters in the string will cause undefined - * behaviour in some operations. + * behavior in some operations. */ class String { protected: @@ -213,10 +215,19 @@ public: uint hash() const; /** - * Printf-like function. Returns a formatted String. + * Print formatted data into a String object. Similar to sprintf, + * except that it stores the result in (variably sized) String + * instead of a fixed size buffer. */ static Common::String format(const char *fmt, ...) GCC_PRINTF(1,2); + /** + * Print formatted data into a String object. Similar to vsprintf, + * except that it stores the result in (variably sized) String + * instead of a fixed size buffer. + */ + static Common::String vformat(const char *fmt, va_list args); + public: typedef char * iterator; typedef const char * const_iterator; @@ -378,4 +389,7 @@ size_t strlcat(char *dst, const char *src, size_t size); } // End of namespace Common +extern int scumm_stricmp(const char *s1, const char *s2); +extern int scumm_strnicmp(const char *s1, const char *s2, uint n); + #endif diff --git a/common/system.cpp b/common/system.cpp index 1f2f8cc6d5..1645a6be10 100644 --- a/common/system.cpp +++ b/common/system.cpp @@ -20,34 +20,66 @@ * */ -// Disable symbol overrides so that we can use system headers. -// FIXME: Necessary for the PS2 port, should get rid of this eventually. -#define FORBIDDEN_SYMBOL_ALLOW_ALL +#define FORBIDDEN_SYMBOL_EXCEPTION_exit #include "common/system.h" +#include "common/events.h" +#include "common/fs.h" +#include "common/savefile.h" #include "common/str.h" +#include "common/textconsole.h" -#ifdef __PLAYSTATION2__ - // for those replaced fopen/fread/etc functions - #include "backends/platform/ps2/fileio.h" - - #define fputs(str, file) ps2_fputs(str, file) - #define fflush(a) ps2_fflush(a) -#endif - -#ifdef __DS__ - #include "backends/fs/ds/ds-fs.h" - - #define fputs(str, file) DS::std_fwrite(str, strlen(str), 1, file) - #define fflush(file) DS::std_fflush(file) -#endif +#include "backends/audiocd/default/default-audiocd.h" +#include "backends/fs/fs-factory.h" +#include "backends/timer/default/default-timer.h" OSystem *g_system = 0; OSystem::OSystem() { + _audiocdManager = 0; + _eventManager = 0; + _timerManager = 0; + _savefileManager = 0; + _fsFactory = 0; } OSystem::~OSystem() { + delete _audiocdManager; + _audiocdManager = 0; + + delete _eventManager; + _eventManager = 0; + + delete _timerManager; + _timerManager = 0; + + delete _savefileManager; + _savefileManager = 0; + + delete _fsFactory; + _fsFactory = 0; +} + +void OSystem::initBackend() { + // Verify all managers has been set + if (!_audiocdManager) + error("Backend failed to instantiate audio CD manager"); + if (!_eventManager) + error("Backend failed to instantiate event manager"); + if (!_timerManager) + error("Backend failed to instantiate timer manager"); + + // TODO: We currently don't check _savefileManager, because at least + // on the Nintendo DS, it is possible that none is set. That should + // probably be treated as "saving is not possible". Or else the NDS + // port needs to be changed to always set a _savefileManager +// if (!_savefileManager) +// error("Backend failed to instantiate savefile manager"); + + // TODO: We currently don't check _fsFactory because not all ports + // set it. +// if (!_fsFactory) +// error("Backend failed to instantiate fs factory"); } bool OSystem::setGraphicsMode(const char *name) { @@ -76,16 +108,27 @@ void OSystem::fatalError() { exit(1); } -void OSystem::logMessage(LogMessageType::Type type, const char *message) { - FILE *output = 0; +FilesystemFactory *OSystem::getFilesystemFactory() { + assert(_fsFactory); + return _fsFactory; +} + +Common::SeekableReadStream *OSystem::createConfigReadStream() { + Common::FSNode file(getDefaultConfigFileName()); + return file.createReadStream(); +} - if (type == LogMessageType::kDebug) - output = stdout; - else - output = stderr; +Common::WriteStream *OSystem::createConfigWriteStream() { +#ifdef __DC__ + return 0; +#else + Common::FSNode file(getDefaultConfigFileName()); + return file.createWriteStream(); +#endif +} - fputs(message, output); - fflush(output); +Common::String OSystem::getDefaultConfigFileName() { + return "scummvm.ini"; } Common::String OSystem::getSystemLanguage() const { diff --git a/common/system.h b/common/system.h index e02779fe47..3e740ff0c1 100644 --- a/common/system.h +++ b/common/system.h @@ -73,6 +73,7 @@ struct TimeDate { namespace LogMessageType { enum Type { + kInfo, kError, kWarning, kDebug @@ -95,6 +96,72 @@ protected: OSystem(); virtual ~OSystem(); +protected: + /** + * @name Module slots + * + * For backend authors only, the following pointers (= "slots) to various + * subsystem managers / factories / etc. can and should be set to + * a suitable instance of the respective type. + * + * For some of the slots, a default instance is set if your backend + * does not do so. For details, please look at the documentation of + * each slot. + * + * A backend may setup slot values in its initBackend() method, + * its constructor or somewhere in between. But it must a slot's value + * no later than in its initBackend() implementation, because + * OSystem::initBackend() will create any default instances if + * none has been set yet (and for other slots, will verify that + * one has been set; if not, an error may be generated). + */ + //@{ + + /** + * No default value is provided for _audiocdManager by OSystem. + * However, BaseBackend::initBackend() does set a default value + * if none has been set before. + * + * @note _audiocdManager is deleted by the OSystem destructor. + */ + AudioCDManager *_audiocdManager; + + /** + * No default value is provided for _eventManager by OSystem. + * However, BaseBackend::initBackend() does set a default value + * if none has been set before. + * + * @note _eventManager is deleted by the OSystem destructor. + */ + Common::EventManager *_eventManager; + + /** + * No default value is provided for _timerManager by OSystem. + * + * @note _timerManager is deleted by the OSystem destructor. + */ + Common::TimerManager *_timerManager; + + /** + * No default value is provided for _savefileManager by OSystem. + * + * @note _savefileManager is deleted by the OSystem destructor. + */ + Common::SaveFileManager *_savefileManager; + + /** + * No default value is provided for _fsFactory by OSystem. + * + * Note that _fsFactory is typically required very early on, + * so it usually should be set in the backends constructor or shortly + * thereafter, and before initBackend() is called. + * + * @note _fsFactory is deleted by the OSystem destructor. + */ + FilesystemFactory *_fsFactory; + + //@} + public: /** @@ -105,7 +172,7 @@ public: * parent class. They should do so near the end of their own * implementation. */ - virtual void initBackend() { } + virtual void initBackend(); /** * Allows the backend to perform engine specific init. @@ -128,11 +195,19 @@ public: * - fullscreen mode * - aspect ration correction * - a virtual keyboard for text entry (on PDAs) + * + * One has to distinguish between the *availability* of a feature, + * which can be checked using hasFeature(), and its *state*. + * For example, the SDL backend *has* the kFeatureFullscreenMode, + * so hasFeature returns true for it. On the other hand, + * fullscreen mode may be active or not; this can be determined + * by checking the state via getFeatureState(). Finally, to + * switch between fullscreen and windowed mode, use setFeatureState(). */ enum Feature { /** - * If your backend supports both a windowed and a fullscreen mode, - * then this feature flag can be used to switch between the two. + * If supported, this feature flag can be used to switch between + * windowed and fullscreen mode. */ kFeatureFullscreenMode, @@ -144,10 +219,10 @@ public: * pixels). When the backend support this, then games running at * 320x200 pixels should be scaled up to 320x240 pixels. For all other * resolutions, ignore this feature flag. - * @note You can find utility functions in common/scaler.h which can - * be used to implement aspect ratio correction. In particular, + * @note Backend implementors can find utility functions in common/scaler.h + * which can be used to implement aspect ratio correction. In * stretch200To240() can stretch a rect, including (very fast) - * interpolation, and works in-place. + * particular, interpolation, and works in-place. */ kFeatureAspectRatioCorrection, @@ -159,43 +234,58 @@ public: kFeatureVirtualKeyboard, /** - * This flag determines whether or not the cursor can have its own palette. + * Backends supporting this feature allow specifying a custom palette + * for the cursor. The custom palette is used if the feature state + * is set to true by the client code via setFeatureState(). + * * It is currently used only by some Macintosh versions of Humongous - * Entertainment games. If the backend doesn't implement this feature then - * the engine switches to b/w versions of cursors. + * Entertainment games. If the backend doesn't implement this feature + * then the engine switches to b/w versions of cursors. * The GUI also relies on this feature for mouse cursors. - * - * To enable the cursor palette call "disableCursorPalette" with false. - * @see disableCursorPalette */ - kFeatureCursorHasPalette, + kFeatureCursorPalette, /** - * Set to true if the overlay pixel format has an alpha channel. - * This should only be set if it offers at least 3-4 bits of accuracy, - * as opposed to a single alpha bit. + * A backend have this feature if its overlay pixel format has an alpha + * channel which offers at least 3-4 bits of accuracy (as opposed to + * just a single alpha bit). + * + * This feature has no associated state. */ kFeatureOverlaySupportsAlpha, /** - * Set to true to iconify the window. + * Client code can set the state of this feature to true in order to + * iconify the application window. */ kFeatureIconifyWindow, /** - * This feature, set to true, is a hint toward the backend to disable all - * key filtering/mapping, in cases where it would be beneficial to do so. - * As an example case, this is used in the agi engine's predictive dialog. + * Setting the state of this feature to true tells the backend to disable + * all key filtering/mapping, in cases where it would be beneficial to do so. + * As an example case, this is used in the AGI engine's predictive dialog. * When the dialog is displayed this feature is set so that backends with * phone-like keypad temporarily unmap all user actions which leads to * comfortable word entry. Conversely, when the dialog exits the feature * is set to false. + * + * TODO: The word 'beneficial' above is very unclear. Beneficial to + * whom and for what??? Just giving an example is not enough. + * * TODO: Fingolfin suggests that the way the feature is used can be * generalized in this sense: Have a keyboard mapping feature, which the * engine queries for to assign keys to actions ("Here's my default key * map for these actions, what do you want them set to?"). */ - kFeatureDisableKeyFiltering + kFeatureDisableKeyFiltering, + + /** + * The presence of this feature indicates whether the displayLogFile() + * call is supported. + * + * This feature has no associated state. + */ + kFeatureDisplayLogFile }; /** @@ -367,7 +457,7 @@ public: * reset the scale to x1 so the screen will not be too big when starting * the game. */ - virtual void resetGraphicsScale() = 0; + virtual void resetGraphicsScale() {} #ifdef USE_RGB_COLOR /** @@ -770,25 +860,13 @@ public: * The palette entries from 'start' till (start+num-1) will be replaced - so * a full palette update is accomplished via start=0, num=256. * - * Backends which implement it should have kFeatureCursorHasPalette flag set + * Backends which implement it should have kFeatureCursorPalette flag set * * @see setPalette - * @see kFeatureCursorHasPalette + * @see kFeatureCursorPalette */ virtual void setCursorPalette(const byte *colors, uint start, uint num) {} - /** - * Disable or enable cursor palette. - * - * Backends which implement it should have kFeatureCursorHasPalette flag set - * - * @param disable True to disable, false to enable. - * - * @see setPalette - * @see kFeatureCursorHasPalette - */ - virtual void disableCursorPalette(bool disable) {} - //@} @@ -813,13 +891,17 @@ public: * Return the timer manager singleton. For more information, refer * to the TimerManager documentation. */ - virtual Common::TimerManager *getTimerManager() = 0; + inline Common::TimerManager *getTimerManager() { + return _timerManager; + } /** * Return the event manager singleton. For more information, refer * to the EventManager documentation. */ - virtual Common::EventManager *getEventManager() = 0; + inline Common::EventManager *getEventManager() { + return _eventManager; + } /** * Register hardware keys with keymapper @@ -909,7 +991,9 @@ public: * Return the audio cd manager. For more information, refer to the * AudioCDManager documentation. */ - virtual AudioCDManager *getAudioCDManager() = 0; + inline AudioCDManager *getAudioCDManager() { + return _audiocdManager; + } //@} @@ -943,7 +1027,8 @@ public: * rectangle over the regular screen content; or in a message box beneath * it; etc.). * - * Currently, only pure ASCII messages can be expected to show correctly. + * The message is expected to be provided in the current TranslationManager + * charset. * * @note There is a default implementation in BaseBackend which uses a * TimedMessageDialog to display the message. Hence implementing @@ -958,14 +1043,16 @@ public: * and other modifiable persistent game data. For more information, * refer to the SaveFileManager documentation. */ - virtual Common::SaveFileManager *getSavefileManager() = 0; + inline Common::SaveFileManager *getSavefileManager() { + return _savefileManager; + } /** * Returns the FilesystemFactory object, depending on the current architecture. * * @return the FSNode factory for the current architecture */ - virtual FilesystemFactory *getFilesystemFactory() = 0; + virtual FilesystemFactory *getFilesystemFactory(); /** * Add system specific Common::Archive objects to the given SearchSet. @@ -984,7 +1071,7 @@ public: * ReadStream instance. It is the callers responsiblity to delete * the stream after use. */ - virtual Common::SeekableReadStream *createConfigReadStream() = 0; + virtual Common::SeekableReadStream *createConfigReadStream(); /** * Open the default config file for writing, by returning a suitable @@ -993,7 +1080,14 @@ public: * * May return 0 to indicate that writing to config file is not possible. */ - virtual Common::WriteStream *createConfigWriteStream() = 0; + virtual Common::WriteStream *createConfigWriteStream(); + + /** + * Get the default file name (or even path) where the user configuration + * of ScummVM will be saved. + * Note that not all ports may use this. + */ + virtual Common::String getDefaultConfigFileName(); /** * Logs a given message. @@ -1007,7 +1101,34 @@ public: * @param type the type of the message * @param message the message itself */ - virtual void logMessage(LogMessageType::Type type, const char *message); + virtual void logMessage(LogMessageType::Type type, const char *message) = 0; + + /** + * Open the log file in a way that allows the user to review it, + * and possibly email it (or parts of it) to the ScummVM team, + * e.g. as part of a bug report. + * + * On a desktop operating system, this would typically launch + * some kind of (external) text editor / viewer. + * On a phone, it might also cause a context switch to another + * application. Finally, on some ports, it might not be supported + * at all, and so do nothing. + * + * The kFeatureDisplayLogFile feature flag can be used to + * test whether this call has been implemented by the active + * backend. + * + * @return true if all seems to have gone fine, false if an error occurred + * + * @note An error could mean that the log file did not exist, + * or the editor could not launch. However, a return value of true does + * not guarantee that the user actually will see the log file. + * + * @note It is up to the backend to ensure that the system is in a state + * that allows the user to actually see the displayed log files. This + * might for example require leaving fullscreen mode. + */ + virtual bool displayLogFile() { return false; } /** * Returns the locale of the system. @@ -1031,7 +1152,7 @@ public: }; -/** The global OSystem instance. Initialised in main(). */ +/** The global OSystem instance. Initialized in main(). */ extern OSystem *g_system; #endif diff --git a/common/textconsole.cpp b/common/textconsole.cpp index f2325ac9ad..ffa42e63a0 100644 --- a/common/textconsole.cpp +++ b/common/textconsole.cpp @@ -46,14 +46,14 @@ void setErrorHandler(ErrorHandler handler) { #ifndef DISABLE_TEXT_CONSOLE void warning(const char *s, ...) { - char buf[STRINGBUFLEN]; + Common::String output; va_list va; va_start(va, s); - vsnprintf(buf, STRINGBUFLEN, s, va); + output = Common::String::vformat(s, va); va_end(va); - Common::String output = Common::String::format("WARNING: %s!\n", buf); + output = "WARNING: " + output + "!\n"; if (g_system) g_system->logMessage(LogMessageType::kWarning, output.c_str()); @@ -64,6 +64,9 @@ void warning(const char *s, ...) { #endif void NORETURN_PRE error(const char *s, ...) { + // We don't use String::vformat here, as that require + // using the heap, and that might be impossible at this + // point, e.g. if the error was an "out-of-memory" error. char buf_input[STRINGBUFLEN]; char buf_output[STRINGBUFLEN]; va_list va; diff --git a/common/translation.cpp b/common/translation.cpp index dc71ddc52f..526bebcec6 100644 --- a/common/translation.cpp +++ b/common/translation.cpp @@ -302,8 +302,13 @@ void TranslationManager::loadTranslationsInfoDat() { _messageIds.resize(numMessages); for (int i = 0; i < numMessages; ++i) { len = in.readUint16BE(); - in.read(buf, len); - _messageIds[i] = String(buf, len - 1); + String msg; + while (len > 0) { + in.read(buf, len > 256 ? 256 : len); + msg += String(buf, len > 256 ? 256 : len - 1); + len -= 256; + } + _messageIds[i] = msg; } } @@ -357,8 +362,13 @@ void TranslationManager::loadLanguageDat(int index) { for (int i = 0; i < nbMessages; ++i) { _currentTranslationMessages[i].msgid = in.readUint16BE(); len = in.readUint16BE(); - in.read(buf, len); - _currentTranslationMessages[i].msgstr = String(buf, len - 1); + String msg; + while (len > 0) { + in.read(buf, len > 256 ? 256 : len); + msg += String(buf, len > 256 ? 256 : len - 1); + len -= 256; + } + _currentTranslationMessages[i].msgstr = msg; len = in.readUint16BE(); if (len > 0) { in.read(buf, len); diff --git a/common/unzip.cpp b/common/unzip.cpp index f0590dcbfd..91f352f40a 100644 --- a/common/unzip.cpp +++ b/common/unzip.cpp @@ -349,7 +349,7 @@ typedef struct { z_stream stream; /* zLib stream structure for inflate */ uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ - uLong stream_initialised; /* flag set if stream structure is initialised*/ + uLong stream_initialized; /* flag set if stream structure is initialized*/ uLong offset_local_extrafield;/* offset of the local extra field */ uInt size_local_extrafield;/* size of the local extra field */ @@ -1073,7 +1073,7 @@ int unzOpenCurrentFile (unzFile file) { return UNZ_INTERNALERROR; } - pfile_in_zip_read_info->stream_initialised=0; + pfile_in_zip_read_info->stream_initialized=0; if ((s->cur_file_info.compression_method!=0) && (s->cur_file_info.compression_method!=Z_DEFLATED)) @@ -1096,7 +1096,7 @@ int unzOpenCurrentFile (unzFile file) { err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); if (err == Z_OK) - pfile_in_zip_read_info->stream_initialised = 1; + pfile_in_zip_read_info->stream_initialized = 1; /* windowBits is passed < 0 to tell that there is no zlib header. * Note that in this case inflate *requires* an extra "dummy" byte * after the compressed stream in order to complete decompression and @@ -1365,7 +1365,7 @@ int unzCloseCurrentFile(unzFile file) { if (pfile_in_zip_read_info->crc32_data != pfile_in_zip_read_info->crc32_wait) err=UNZ_CRCERROR; } - if (pfile_in_zip_read_info->stream_initialised) + if (pfile_in_zip_read_info->stream_initialized) inflateEnd(&pfile_in_zip_read_info->stream); #endif @@ -1373,7 +1373,7 @@ int unzCloseCurrentFile(unzFile file) { free(pfile_in_zip_read_info->read_buffer); pfile_in_zip_read_info->read_buffer = NULL; - pfile_in_zip_read_info->stream_initialised = 0; + pfile_in_zip_read_info->stream_initialized = 0; free(pfile_in_zip_read_info); s->pfile_in_zip_read=NULL; diff --git a/common/util.cpp b/common/util.cpp index eed7009f90..a7ec1a9de7 100644 --- a/common/util.cpp +++ b/common/util.cpp @@ -211,6 +211,7 @@ const PlatformDescription g_platforms[] = { { "windows", "win", "win", "Windows", kPlatformWindows }, { "playstation", "psx", "psx", "Sony PlayStation", kPlatformPSX }, { "cdi", "cdi", "cdi", "Philips CD-i", kPlatformCDi }, + { "ios", "ios", "ios", "Apple iOS", kPlatformIOS }, { 0, 0, 0, "Default", kPlatformUnknown } }; diff --git a/common/util.h b/common/util.h index 5d965c4d31..5837c8beab 100644 --- a/common/util.h +++ b/common/util.h @@ -172,6 +172,7 @@ enum Platform { kPlatformWii, kPlatformPSX, kPlatformCDi, + kPlatformIOS, kPlatformUnknown = -1 }; diff --git a/common/xmlparser.cpp b/common/xmlparser.cpp index 9bd052fb3d..5217c4e82c 100644 --- a/common/xmlparser.cpp +++ b/common/xmlparser.cpp @@ -22,9 +22,7 @@ // FIXME: Avoid using fprintf #define FORBIDDEN_SYMBOL_EXCEPTION_fprintf - -// FIXME: Avoid using vfprintf -#define FORBIDDEN_SYMBOL_EXCEPTION_vfprintf +#define FORBIDDEN_SYMBOL_EXCEPTION_stderr #include "common/xmlparser.h" @@ -83,7 +81,7 @@ void XMLParser::close() { _stream = 0; } -bool XMLParser::parserError(const char *errorString, ...) { +bool XMLParser::parserError(const Common::String &errStr) { _state = kParserError; const int startPosition = _stream->pos(); @@ -134,12 +132,7 @@ bool XMLParser::parserError(const char *errorString, ...) { fprintf(stderr, "%c", _stream->readByte()); fprintf(stderr, "\n\nParser error: "); - - va_list args; - va_start(args, errorString); - vfprintf(stderr, errorString, args); - va_end(args); - + fprintf(stderr, "%s", errStr.c_str()); fprintf(stderr, "\n\n"); return false; @@ -181,16 +174,16 @@ bool XMLParser::parseActiveKey(bool closed) { for (List<XMLKeyLayout::XMLKeyProperty>::const_iterator i = key->layout->properties.begin(); i != key->layout->properties.end(); ++i) { if (i->required && !localMap.contains(i->name)) - return parserError("Missing required property '%s' inside key '%s'", i->name.c_str(), key->name.c_str()); + return parserError("Missing required property '" + i->name + "' inside key '" + key->name + "'"); else if (localMap.contains(i->name)) keyCount--; } if (keyCount > 0) - return parserError("Unhandled property inside key '%s'.", key->name.c_str()); + return parserError("Unhandled property inside key '" + key->name + "'."); } else { - return parserError("Unexpected key in the active scope ('%s').", key->name.c_str()); + return parserError("Unexpected key in the active scope ('" + key->name + "')."); } // check if any of the parents must be ignored. @@ -205,7 +198,7 @@ bool XMLParser::parseActiveKey(bool closed) { // when keyCallback() fails, a parserError() must be set. // We set it manually in that case. if (_state != kParserError) - parserError("Unhandled exception when parsing '%s' key.", key->name.c_str()); + parserError("Unhandled exception when parsing '" + key->name + "' key."); return false; } @@ -395,7 +388,7 @@ bool XMLParser::parse() { case kParserNeedPropertyName: if (activeClosure) { if (!closeKey()) { - parserError("Missing data when closing key '%s'.", _activeKey.top()->name.c_str()); + parserError("Missing data when closing key '" + _activeKey.top()->name + "'."); break; } diff --git a/common/xmlparser.h b/common/xmlparser.h index 84fca294a0..7923e43a37 100644 --- a/common/xmlparser.h +++ b/common/xmlparser.h @@ -274,7 +274,7 @@ protected: * Parser error always returns "false" so we can pass the return value * directly and break down the parsing. */ - bool parserError(const char *errorString, ...) GCC_PRINTF(2, 3); + bool parserError(const Common::String &errStr); /** * Skips spaces/whitelines etc. @@ -65,8 +65,12 @@ get_var() { # Add an engine: id name build subengines add_engine() { _engines="${_engines} ${1}" + if test "${3}" = "no" ; then + set_var _wip_engines "${_wip_engines} ${1}" + fi set_var _engine_${1}_name "${2}" set_var _engine_${1}_build "${3}" + set_var _engine_${1}_build_default "${3}" set_var _engine_${1}_subengines "${4}" for sub in ${4}; do set_var _engine_${sub}_sub "yes" @@ -83,12 +87,13 @@ add_engine cine "Cinematique evo 1" yes add_engine cruise "Cinematique evo 2" yes add_engine draci "Dragon History" yes add_engine drascula "Drascula: The Vampire Strikes Back" yes +add_engine dreamweb "Dreamweb" no add_engine gob "Gobli*ns" yes add_engine groovie "Groovie" yes "groovie2" add_engine groovie2 "Groovie 2 games" no add_engine hugo "Hugo Trilogy" yes add_engine kyra "Legend of Kyrandia" yes "lol" -add_engine lol "Lands of Lore" no +add_engine lol "Lands of Lore" yes add_engine lastexpress "The Last Express" no add_engine lure "Lure of the Temptress" yes add_engine m4 "M4/MADS" no @@ -130,27 +135,23 @@ _alsa=auto _seq_midi=auto _timidity=auto _zlib=auto -_mpeg2=no _png=auto _theoradec=auto +_faad=auto _fluidsynth=auto -_16bit=auto _opengl=auto _opengles=auto _readline=auto # Default option behaviour yes/no _debug_build=auto _release_build=auto +_verbose_build=no _text_console=no _mt32emu=yes _build_scalers=yes _build_hq_scalers=yes -_arm_asm=no -_indeo3=auto _enable_prof=no -_unix=no _global_constructors=no -_elf_loader=no # Default vkeybd/keymapper options _vkeybd=no _keymapper=no @@ -158,12 +159,12 @@ _keymapper=no _translation=yes # Default platform settings _backend=sdl -_endian=unknown -_need_memalign=no -_have_x86=no -_verbose_build=no +_16bit=auto _dynamic_modules=no +_elf_loader=no _plugins_default=static +_plugin_prefix= +_plugin_suffix= _nasm=auto # Default commands _ranlib=ranlib @@ -179,6 +180,16 @@ _sdlpath="$PATH" _nasmpath="$PATH" NASMFLAGS="" NASM="" +_tainted_build=no +# The following variables are automatically detected, and should not +# be modified otherwise. Consider them read-only. +_posix=no +_endian=unknown +_need_memalign=yes +_have_x86=no +_arm_asm=no + + # Directories for installing ScummVM. # This list is closely based on what GNU autoconf does, @@ -417,6 +428,11 @@ get_engine_build() { get_var _engine_$1_build } +# Was this engine set to be built by default? +get_engine_build_default() { + get_var _engine_$1_build_default +} + # Get the subengines get_engine_subengines() { get_var _engine_$1_subengines @@ -536,12 +552,19 @@ prepare_engine_build_strings() { if test -n "$string" ; then _engines_skipped="${_engines_skipped}#$string@" fi + + string=`get_engine_build_string $1 wip` + if test -n "$string" ; then + _engines_built_wip="${_engines_built_wip}#$string@" + fi + } # Get the string about building an engine get_engine_build_string() { engine_string="" engine_build=`get_engine_build $1` + engine_build_default=`get_engine_build_default $1` show=no # Check if the current engine should be shown for the current status @@ -557,6 +580,14 @@ get_engine_build_string() { fi done fi + # Test for enabled wip sub-engines + if test $2 = wip ; then + for subeng in `get_engine_subengines $1` ; do + if test `get_engine_build $subeng` != no -a `get_engine_build_default $subeng` = no ; then + show=yes + fi + done + fi fi # Convert static/dynamic to yes to ease the check of subengines @@ -564,13 +595,18 @@ get_engine_build_string() { engine_build=yes fi + # Check if it is a wip engine + if test "$2" = "wip" -a "$engine_build" != "no" -a "$engine_build_default" = no; then + show=yes + fi + # The engine should be shown, build the string if test $show = yes ; then build_string_func=get_${1}_build_string if ( type $build_string_func | grep function ) 2> /dev/null > /dev/null ; then - engine_string=`$build_string_func $1 $engine_build` + engine_string=`$build_string_func $1 $engine_build $2` else - engine_string=`get_subengines_build_string $1 $engine_build` + engine_string=`get_subengines_build_string $1 $engine_build "" $2` fi engine_string="`get_engine_name $1` $engine_string" @@ -582,14 +618,29 @@ get_engine_build_string() { # Get the string about building subengines get_subengines_build_string() { all=yes + parent_engine=$1 subengine_string=$3 - for subeng in `get_engine_subengines $1` ; do - if test `get_engine_build $subeng` = $2 ; then + parent_status=$4 + parent_engine_build_default=`get_engine_build_default $parent_engine` + + for subeng in `get_engine_subengines $parent_engine` ; do + subengine_build=`get_engine_build $subeng` + subengine_build_default=`get_engine_build_default $subeng` + if test \( $subengine_build = $2 -a "$parent_status" != wip \) -o \( "$parent_status" = wip -a $subengine_build != no -a "$subengine_build_default" = no \) ; then subengine_string="$subengine_string [`get_engine_name $subeng`]" else all=no fi + + # handle engines that are on by default and have a single subengine that is off by default + if test "$parent_status" = wip ; then + if test $parent_engine_build_default = yes -a subengine ; then + all=no + fi + fi + done + if test $2 != no ; then if test -n "$subengine_string" ; then if test $all = yes ; then @@ -604,19 +655,19 @@ get_subengines_build_string() { # Engine specific build strings get_scumm_build_string() { if test `get_engine_build $1` != no ; then - if test $2 != no ; then + if test $2 != no -a "$3" != wip ; then base="[v0-v6 games]" fi - get_subengines_build_string $1 $2 "$base" + get_subengines_build_string $1 $2 "$base" $3 fi } get_saga_build_string() { if test `get_engine_build $1` != no ; then - if test $2 != no ; then + if test $2 != no -a "$3" != wip; then base="[ITE]" fi - get_subengines_build_string $1 $2 "$base" + get_subengines_build_string $1 $2 "$base" $3 fi } @@ -740,20 +791,18 @@ Optional Libraries: --with-zlib-prefix=DIR Prefix where zlib is installed (optional) --disable-zlib disable zlib (compression) support [autodetect] - --with-mpeg2-prefix=DIR Prefix where libmpeg2 is installed (optional) - --enable-mpeg2 enable mpeg2 codec for cutscenes [no] - --with-opengl-prefix=DIR Prefix where OpenGL (ES) is installed (optional) --disable-opengl disable OpenGL (ES) support [autodetect] - --disable-indeo3 disable Indeo3 decoder [autodetect] - --with-png-prefix=DIR Prefix where libpng is installed (optional) --disable-png disable PNG decoder [autodetect] --with-theoradec-prefix=DIR Prefix where libtheoradec is installed (optional) --disable-theoradec disable Theora decoder [autodetect] + --with-faad-prefix=DIR Prefix where libfaad is installed (optional) + --disable-faad disable AAC decoder [autodetect] + --with-fluidsynth-prefix=DIR Prefix where libfluidsynth is installed (optional) --disable-fluidsynth disable fluidsynth MIDI driver [autodetect] @@ -805,13 +854,12 @@ for ac_option in $@; do --disable-zlib) _zlib=no ;; --enable-nasm) _nasm=yes ;; --disable-nasm) _nasm=no ;; - --enable-mpeg2) _mpeg2=yes ;; - --disable-indeo3) _indeo3=no ;; - --enable-indeo3) _indeo3=yes ;; --disable-png) _png=no ;; --enable-png) _png=yes ;; --disable-theoradec) _theoradec=no ;; --enable-theoradec) _theoradec=yes ;; + --disable-faad) _faad=no ;; + --enable-faad) _faad=yes ;; --disable-fluidsynth) _fluidsynth=no ;; --enable-readline) _readline=yes ;; --disable-readline) _readline=no ;; @@ -835,11 +883,6 @@ for ac_option in $@; do FLUIDSYNTH_CFLAGS="-I$arg/include" FLUIDSYNTH_LIBS="-L$arg/lib" ;; - --with-mpeg2-prefix=*) - arg=`echo $ac_option | cut -d '=' -f 2` - MPEG2_CFLAGS="-I$arg/include" - MPEG2_LIBS="-L$arg/lib" - ;; --with-alsa-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` ALSA_CFLAGS="-I$arg/include" @@ -880,6 +923,11 @@ for ac_option in $@; do THEORADEC_CFLAGS="-I$arg/include" THEORADEC_LIBS="-L$arg/lib" ;; + --with-faad-prefix=*) + arg=`echo $ac_option | cut -d '=' -f 2` + FAAD_CFLAGS="-I$arg/include" + FAAD_LIBS="-L$arg/lib" + ;; --with-zlib-prefix=*) arg=`echo $ac_option | cut -d '=' -f 2` ZLIB_CFLAGS="-I$arg/include" @@ -990,15 +1038,6 @@ caanoo) _host_os=gph-linux _host_cpu=arm _host_alias=arm-none-linux-gnueabi - if test "$_debug_build" = auto; then - # If you want to debug on the Caanoo use '--disable-release --enable-debug' - _debug_build=no - fi - - if test "$_release_build" = auto; then - # Enable release build by default. - _release_build=yes - fi ;; dingux) _host_os=linux @@ -1026,29 +1065,11 @@ gp2x) _host_os=gph-linux _host_cpu=arm _host_alias=arm-open2x-linux - if test "$_debug_build" = auto; then - # If you want to debug on the GP2X use '--disable-release --enable-debug' - _debug_build=no - fi - - if test "$_release_build" = auto; then - # Enable release build by default. - _release_build=yes - fi ;; gp2xwiz) _host_os=gph-linux _host_cpu=arm _host_alias=arm-open2x-linux - if test "$_debug_build" = auto; then - # If you want to debug on the GP2XWiz use '--disable-release --enable-debug' - _debug_build=no - fi - - if test "$_release_build" = auto; then - # Enable release build by default. - _release_build=yes - fi ;; i586-mingw32msvc) _host_os=mingw32msvc @@ -1086,15 +1107,6 @@ openpandora) _host_os=linux _host_cpu=arm _host_alias=arm-angstrom-linux-gnueabi - if test "$_debug_build" = auto; then - # If you want to debug on the OP use '--disable-release --enable-debug' - _debug_build=no - fi - - if test "$_release_build" = auto; then - # Enable release build by default. - _release_build=yes - fi ;; ppc-amigaos) _host_os=amigaos @@ -1104,28 +1116,11 @@ ps2) _host_os=ps2 _host_cpu=mips64r5900el _host_alias=ee - if test "$_debug_build" = auto; then - # Disable debug mode by default. The resulting binaries are far too big in general, - # and one has to disable multiple engines to make it usable. - _debug_build=no - fi - - if test "$_release_build" = auto; then - # Enable release build by default. - _release_build=yes - fi ;; psp) _host_os=psp _host_cpu=mipsallegrexel _host_alias=psp - if test -z "$PSPDEV"; then - PSPDEV=`psp-config --pspdev-path` - fi - if test -d "$PSPDEV/psp/lib"; then - LDFLAGS="$LDFLAGS -L$PSPDEV/psp/lib" - fi - LDFLAGS="$LDFLAGS -L$PSPDEV/psp/sdk/lib -specs=$_srcdir/backends/platform/psp/psp.spec" ;; samsungtv) _host_os=linux @@ -1182,6 +1177,20 @@ fi # Determine extra build flags for debug and/or release builds # +case $_host in +caanoo | gp2x | gp2xwiz | openpandora | ps2) + if test "$_debug_build" = auto; then + # If you want to debug one of these platforms, use '--disable-release --enable-debug' + _debug_build=no + fi + + if test "$_release_build" = auto; then + # Enable release build by default. + _release_build=yes + fi + ;; +esac + if test "$_debug_build" != no; then # debug mode not explicitly disabled -> compile with -g CXXFLAGS="$CXXFLAGS -g" @@ -1192,7 +1201,9 @@ if test "$_release_build" = yes; then # makes it possible to use -Wuninitialized, so let's do that. # We will also add a define, which indicates we are doing # an build for a release version. - CXXFLAGS="$CXXFLAGS -O2 -Wuninitialized -DRELEASE_BUILD" + CXXFLAGS="$CXXFLAGS -O2" + CXXFLAGS="$CXXFLAGS -Wuninitialized" + DEFINES="$DEFINES -DRELEASE_BUILD" fi @@ -1248,9 +1259,15 @@ ps2) fi ;; psp) - PSPSDK=`psp-config --pspsdk-path` + if test -z "$PSPDEV"; then + PSPDEV=`psp-config --pspdev-path` + fi + # TODO: Should we also insist on a valid PSPDEV value? + if test -z "$PSPSDK"; then + PSPSDK=`psp-config --pspsdk-path` + fi if test -z "$PSPSDK"; then - echo "Please set the path to PSPSDK in your environment." + echo "Please set PSPSDK in your environment. export PSPSDK=<path to psp sdk>" exit 1 fi ;; @@ -1413,6 +1430,9 @@ fi echo "$cxx_version" +# +# Bail out now if now useable compiler was found. +# if test "$cxx_verc_fail" = yes ; then echo echo "The version of your compiler is not supported at this time" @@ -1420,6 +1440,54 @@ if test "$cxx_verc_fail" = yes ; then exit 1 fi +# +# Setup compiler specific CXXFLAGS now that we know the compiler version. +# Foremost, this means enabling various warnings. +# In addition, we set CXX_UPDATE_DEP_FLAG for GCC >= 3.0 and for ICC. +# +if test "$have_gcc" = yes ; then + if test "$_cxx_major" -ge "3" ; then + case $_host_os in + # newlib-based system include files suppress non-C89 function + # declarations under __STRICT_ANSI__ + amigaos* | android | dreamcast | ds | gamecube | mingw* | n64 | psp | ps2 | wii | wince ) + ;; + *) + CXXFLAGS="$CXXFLAGS -ansi" + ;; + esac + CXXFLAGS="$CXXFLAGS -W -Wno-unused-parameter" + add_line_to_config_mk 'HAVE_GCC3 = 1' + add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP' + fi; + + if test "$_cxx_major" -eq 4 && test "$_cxx_minor" -ge 3 || \ + test "$_cxx_major" -gt 4 ; then + CXXFLAGS="$CXXFLAGS -Wno-empty-body" + else + CXXFLAGS="$CXXFLAGS -Wconversion" + fi; +elif test "$have_icc" = yes ; then + add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP' +fi; + +# By default, we add -pedantic to the CXXFLAGS to catch some potentially +# non-portable constructs, like use of GNU extensions. +# However, some platforms use GNU extensions in system header files, so +# for these we must not use -pedantic. +case $_host_os in +android | gamecube | psp | wii) + ;; +*) + # ICC does not support pedantic, while GCC and clang do. + if test "$have_icc" = no ; then + CXXFLAGS="$CXXFLAGS -pedantic" + fi + ;; +esac + +# If possible, we want to use -Wglobal-constructors +# However, not all compilers support that, so check whether the active one does. echocheck "whether -Wglobal-constructors work" cat > $TMPC << EOF int main() { return 0; } @@ -1436,23 +1504,37 @@ echo $_global_constructors # echo_n "Checking endianness... " cat > tmp_endianness_check.cpp << EOF -short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; +unsigned short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; +unsigned short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; void _ascii() { char* s = (char*) ascii_mm; s = (char*) ascii_ii; } -short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; +unsigned short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; +unsigned short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; void _ebcdic() { char* s = (char*) ebcdic_mm; s = (char*) ebcdic_ii; } int main() { _ascii (); _ebcdic (); return 0; } EOF $CXX $CXXFLAGS -c -o $TMPO.o tmp_endianness_check.cpp if strings $TMPO.o | grep BIGenDianSyS >/dev/null; then _endian=big -else +elif strings $TMPO.o | grep LiTTleEnDian >/dev/null; then _endian=little fi echo $_endian; cc_check_clean tmp_endianness_check.cpp +case $_endian in + big) + add_line_to_config_h '#undef SCUMM_LITTLE_ENDIAN' + add_line_to_config_h '#define SCUMM_BIG_ENDIAN' + ;; + little) + add_line_to_config_h '#define SCUMM_LITTLE_ENDIAN' + add_line_to_config_h '#undef SCUMM_BIG_ENDIAN' + ;; + *) + exit 1 + ;; +esac + # # Determine a data type with the given length # @@ -1502,6 +1584,50 @@ echo "$type_4_byte" test $TMPR -eq 0 || exit 1 # check exit code of subshell # +# Check whether memory alignment is required +# +# For some CPU types, unaligned memory access is either not supported at +# all (and so leads to a crash), requires a super-slow emulation via an +# exception handler, or just results in incorrect results. +# On the other hand, accessing data in a manner that works regardless of +# alignment can be a lot slower than regular access, so we don't want +# to use it if we don't have to. +# +# So we do the following: For CPU families where we know whether unaligned +# access is safe & fast, we enable / disable unaligned access accordingly. +# Otherwise, we just disable memory alignment. +# +# NOTE: In the past, for non-cross compiled builds, we would also run some code +# which would try to test whether unaligned access worked or not. But this test +# could not reliably determine whether unaligned access really worked in all +# situations (and across different implementations of the target CPU arch), nor +# whether it was fast (as opposed to slowly emulated by fault handlers). Hence, +# we do not use this approach anymore. +# +# NOTE: The only kinds of unaligned access we allow are for 2 byte and 4 +# byte loads / stores. No promises are made for bigger sizes, such as 8 +# or 16 byte loads, for which architectures may behave differently than +# for the smaller sizes. +echo_n "Alignment required... " +case $_host_cpu in + i[3-6]86 | x86_64 | ppc*) + # Unaligned access should work + _need_memalign=no + ;; + alpha* | arm* | bfin* | hp* | mips* | sh* | sparc* | ia64 | nv1*) + # Unaligned access is not supported or extremely slow. + _need_memalign=yes + ;; + *) + # Status of unaligned access is unknown, so assume the worst. + _need_memalign=yes + ;; +esac +echo "$_need_memalign" + +define_in_config_h_if_yes $_need_memalign 'SCUMM_NEED_ALIGNMENT' + +# # Check whether we can use x86 asm routines # echo_n "Compiling for x86... " @@ -1514,6 +1640,27 @@ case $_host_cpu in ;; esac echo "$_have_x86" +define_in_config_h_if_yes $_have_x86 'HAVE_X86' + +# +# Check whether to use optimized ARM asm +# +echo_n "Compiling for ARM... " +case $_host_cpu in + arm*) + _arm_asm=yes + ;; + *) + _arm_asm=no + ;; +esac +echo "$_arm_asm" +define_in_config_if_yes "$_arm_asm" 'USE_ARM_SCALER_ASM' +define_in_config_if_yes "$_arm_asm" 'USE_ARM_SOUND_ASM' +define_in_config_if_yes "$_arm_asm" 'USE_ARM_SMUSH_ASM' +define_in_config_if_yes "$_arm_asm" 'USE_ARM_GFX_ASM' +define_in_config_if_yes "$_arm_asm" 'USE_ARM_COSTUME_ASM' + # # Determine build settings @@ -1522,7 +1669,8 @@ echo_n "Checking hosttype... " echo $_host_os case $_host_os in amigaos*) - LDFLAGS="$LDFLAGS -use-dynld -L/sdk/local/newlib/lib" + LDFLAGS="$LDFLAGS -use-dynld" + LDFLAGS="$LDFLAGS -L/sdk/local/newlib/lib" # We have to use 'long' for our 4 byte typedef because AmigaOS already typedefs (u)int32 # as (unsigned) long, and consequently we'd get a compiler error otherwise. type_4_byte='long' @@ -1531,30 +1679,41 @@ case $_host_os in android) case $_host in android) - CXXFLAGS="$CXXFLAGS -march=armv5te -mtune=xscale -msoft-float" + CXXFLAGS="$CXXFLAGS -march=armv5te" + CXXFLAGS="$CXXFLAGS -mtune=xscale" + CXXFLAGS="$CXXFLAGS -msoft-float" ;; android-v7a) - CXXFLAGS="$CXXFLAGS -march=armv7-a -mfloat-abi=softfp -mfpu=vfp" + CXXFLAGS="$CXXFLAGS -march=armv7-a" + CXXFLAGS="$CXXFLAGS -mfloat-abi=softfp" + CXXFLAGS="$CXXFLAGS -mfpu=vfp" LDFLAGS="$LDFLAGS -Wl,--fix-cortex-a8" ;; esac CXXFLAGS="$CXXFLAGS --sysroot=$ANDROID_NDK/platforms/android-4/arch-arm" - CXXFLAGS="$CXXFLAGS -fpic -ffunction-sections -funwind-tables" + CXXFLAGS="$CXXFLAGS -fpic" + CXXFLAGS="$CXXFLAGS -ffunction-sections" + CXXFLAGS="$CXXFLAGS -funwind-tables" if test "$_debug_build" = yes; then - CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer -fno-strict-aliasing" + CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer" + CXXFLAGS="$CXXFLAGS -fno-strict-aliasing" else - CXXFLAGS="$CXXFLAGS -fomit-frame-pointer -fstrict-aliasing" + CXXFLAGS="$CXXFLAGS -fomit-frame-pointer" + CXXFLAGS="$CXXFLAGS -fstrict-aliasing" fi CXXFLAGS="$CXXFLAGS -finline-limit=300" - CXXFLAGS="$CXXFLAGS -Os -mthumb-interwork" - CXXFLAGS="$CXXFLAGS -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__" - CXXFLAGS="$CXXFLAGS -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__" + CXXFLAGS="$CXXFLAGS -Os" + CXXFLAGS="$CXXFLAGS -mthumb-interwork" + # FIXME: Why is the following in CXXFLAGS and not in DEFINES? Change or document this. + CXXFLAGS="$CXXFLAGS -D__ARM_ARCH_5__" + CXXFLAGS="$CXXFLAGS -D__ARM_ARCH_5T__" + CXXFLAGS="$CXXFLAGS -D__ARM_ARCH_5E__" + CXXFLAGS="$CXXFLAGS -D__ARM_ARCH_5TE__" # supress 'mangling of 'va_list' has changed in GCC 4.4' CXXFLAGS="$CXXFLAGS -Wno-psabi" LDFLAGS="$LDFLAGS --sysroot=$ANDROID_NDK/platforms/android-4/arch-arm" LDFLAGS="$LDFLAGS -mthumb-interwork" add_line_to_config_mk "ANDROID_SDK = $ANDROID_SDK" - _unix=yes _seq_midi=no ;; beos*) @@ -1564,12 +1723,8 @@ case $_host_os in CFLAGS="-I/boot/home/config/include" CXXFLAGS="$CXXFLAGS -fhuge-objects" LIBS="$LIBS -lbind -lsocket" - _unix=yes _seq_midi=no ;; - bsd* | hpux* | netbsd* | openbsd* | sunos*) - _unix=yes - ;; cygwin*) echo ERROR: Cygwin building is not supported by ScummVM anymore. Consider using MinGW. exit 1 @@ -1578,19 +1733,31 @@ case $_host_os in DEFINES="$DEFINES -DMACOSX" LIBS="$LIBS -framework AudioUnit -framework AudioToolbox -framework Carbon -framework CoreMIDI" add_line_to_config_mk 'MACOSX = 1' - _unix=yes ;; dreamcast) - DEFINES="$DEFINES -D__DC__ -DNONSTANDARD_PORT" + DEFINES="$DEFINES -D__DC__" + DEFINES="$DEFINES -DNONSTANDARD_PORT" ;; ds) - # TODO Nintendo DS - DEFINES="$DEFINES -D__DS__ -DNDS -DARM9 -DARM -DNONSTANDARD_PORT" - CXXFLAGS="$CXXFLAGS -isystem $DEVKITPRO/libnds/include -isystem $DEVKITPRO/devkitARM/arm-eabi/include" - CXXFLAGS="$CXXFLAGS -mcpu=arm9tdmi -mtune=arm9tdmi -fomit-frame-pointer -mthumb-interwork" - CXXFLAGS="$CXXFLAGS -ffunction-sections -fdata-sections -fno-strict-aliasing" + DEFINES="$DEFINES -D__DS__" + DEFINES="$DEFINES -DNDS" + DEFINES="$DEFINES -DARM9" + DEFINES="$DEFINES -DARM" + DEFINES="$DEFINES -DNONSTANDARD_PORT" + CXXFLAGS="$CXXFLAGS -isystem $DEVKITPRO/libnds/include" + CXXFLAGS="$CXXFLAGS -isystem $DEVKITPRO/devkitARM/arm-eabi/include" + CXXFLAGS="$CXXFLAGS -mcpu=arm9tdmi" + CXXFLAGS="$CXXFLAGS -mtune=arm9tdmi" + CXXFLAGS="$CXXFLAGS -fomit-frame-pointer" + CXXFLAGS="$CXXFLAGS -mthumb-interwork" + CXXFLAGS="$CXXFLAGS -ffunction-sections" + CXXFLAGS="$CXXFLAGS -fdata-sections" + CXXFLAGS="$CXXFLAGS -fno-strict-aliasing" CXXFLAGS="$CXXFLAGS -fuse-cxa-atexit" - LDFLAGS="$LDFLAGS -specs=ds_arm9.specs -mthumb-interwork -mno-fpu -Wl,-Map,map.txt" + LDFLAGS="$LDFLAGS -specs=ds_arm9.specs" + LDFLAGS="$LDFLAGS -mthumb-interwork" + LDFLAGS="$LDFLAGS -mno-fpu" + LDFLAGS="$LDFLAGS -Wl,-Map,map.txt" if test "$_dynamic_modules" = no ; then LDFLAGS="$LDFLAGS -Wl,--gc-sections" else @@ -1604,15 +1771,23 @@ case $_host_os in freebsd*) LDFLAGS="$LDFLAGS -L/usr/local/lib" CXXFLAGS="$CXXFLAGS -I/usr/local/include" - _unix=yes ;; gamecube) - CXXFLAGS="$CXXFLAGS -Os -mogc -mcpu=750 -meabi -mhard-float" - CXXFLAGS="$CXXFLAGS -ffunction-sections -fdata-sections -fmodulo-sched" + CXXFLAGS="$CXXFLAGS -Os" + CXXFLAGS="$CXXFLAGS -mogc" + CXXFLAGS="$CXXFLAGS -mcpu=750" + CXXFLAGS="$CXXFLAGS -meabi" + CXXFLAGS="$CXXFLAGS -mhard-float" + CXXFLAGS="$CXXFLAGS -ffunction-sections" + CXXFLAGS="$CXXFLAGS -fdata-sections" + CXXFLAGS="$CXXFLAGS -fmodulo-sched" CXXFLAGS="$CXXFLAGS -fuse-cxa-atexit" CXXFLAGS="$CXXFLAGS -I$DEVKITPRO/libogc/include" # libogc is required to link the cc tests (includes _start()) - LDFLAGS="$LDFLAGS -mogc -mcpu=750 -L$DEVKITPRO/libogc/lib/cube -logc" + LDFLAGS="$LDFLAGS -mogc" + LDFLAGS="$LDFLAGS -mcpu=750" + LDFLAGS="$LDFLAGS -L$DEVKITPRO/libogc/lib/cube" + LDFLAGS="$LDFLAGS -logc" if test "$_dynamic_modules" = "yes" ; then # retarded toolchain patch forces --gc-sections, overwrite it LDFLAGS="$LDFLAGS -Wl,--no-gc-sections" @@ -1622,14 +1797,13 @@ case $_host_os in DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE" # Needs -lnetwork for the timidity MIDI driver LIBS="$LIBS -lnetwork" - _unix=yes _seq_midi=no ;; irix*) - DEFINES="$DEFINES -DIRIX -DSYSTEM_NOT_SUPPORTING_D_TYPE" + DEFINES="$DEFINES -DIRIX" + DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE" LIBS="$LIBS -lmd -lfastm -lm" _ranlib=: - _unix=yes ;; linux* | uclinux*) # When not cross-compiling, enable large file support, but don't @@ -1637,74 +1811,101 @@ case $_host_os in if test -z "$_host"; then CXXFLAGS="$CXXFLAGS $(getconf LFS_CFLAGS 2>/dev/null)" fi - _unix=yes - DEFINES="$DEFINES -DLUA_USE_POSIX" ;; mingw*) - DEFINES="$DEFINES -DWIN32 -D__USE_MINGW_ANSI_STDIO=0" + DEFINES="$DEFINES -DWIN32" + DEFINES="$DEFINES -D__USE_MINGW_ANSI_STDIO=0" LIBS="$LIBS -lmingw32 -lwinmm" OBJS="$OBJS scummvmwinres.o" add_line_to_config_mk 'WIN32 = 1' ;; mint*) DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE" - _unix=yes ;; n64) - DEFINES="$DEFINES -D__N64__ -DLIMIT_FPS -DNONSTANDARD_PORT" - DEFINES="$DEFINES -DDISABLE_DEFAULT_SAVEFILEMANAGER -DDISABLE_COMMAND_LINE" - DEFINES="$DEFINES -DDISABLE_FANCY_THEMES -DDISABLE_DOSBOX_OPL -DDISABLE_SID -DDISABLE_NES_APU" + DEFINES="$DEFINES -D__N64__" + DEFINES="$DEFINES -DLIMIT_FPS" + DEFINES="$DEFINES -DNONSTANDARD_PORT" + DEFINES="$DEFINES -DDISABLE_COMMAND_LINE" + DEFINES="$DEFINES -DDISABLE_DEFAULT_SAVEFILEMANAGER" + DEFINES="$DEFINES -DDISABLE_DOSBOX_OPL" + DEFINES="$DEFINES -DDISABLE_FANCY_THEMES" + DEFINES="$DEFINES -DDISABLE_NES_APU" + DEFINES="$DEFINES -DDISABLE_SID" DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE" ;; - os2-emx*) - _unix=yes # FIXME??? Why?? - ;; ps2) - # TODO ps2 CXXFLAGS="$CXXFLAGS -G2" - DEFINES="$DEFINES -D_EE -D__PLAYSTATION2__" + DEFINES="$DEFINES -D_EE" + DEFINES="$DEFINES -D__PLAYSTATION2__" ;; psp) - CXXFLAGS="$CXXFLAGS -O3 -I$PSPSDK/include -D_PSP_FW_VERSION=150" + if test -d "$PSPDEV/psp/lib"; then + LDFLAGS="$LDFLAGS -L$PSPDEV/psp/lib" + fi + LDFLAGS="$LDFLAGS -L$PSPSDK/lib" + LDFLAGS="$LDFLAGS -specs=$_srcdir/backends/platform/psp/psp.spec" + CXXFLAGS="$CXXFLAGS -O3" + CXXFLAGS="$CXXFLAGS -I$PSPSDK/include" + # FIXME: Why is the following in CXXFLAGS and not in DEFINES? Change or document this. + CXXFLAGS="$CXXFLAGS -D_PSP_FW_VERSION=150" ;; solaris*) - DEFINES="$DEFINES -DSOLARIS -DSYSTEM_NOT_SUPPORTING_D_TYPE" + DEFINES="$DEFINES -DSOLARIS" + DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE" # Needs -lbind -lsocket for the timidity MIDI driver LIBS="$LIBS -lnsl -lsocket" - _unix=yes ;; webos) - CXXFLAGS="$CXXFLAGS -I$WEBOS_PDK/include -I$WEBOS_PDK/include/SDL -I$WEBOS_PDK/device/usr/include" + CXXFLAGS="$CXXFLAGS -I$WEBOS_PDK/include" + CXXFLAGS="$CXXFLAGS -I$WEBOS_PDK/include/SDL" + CXXFLAGS="$CXXFLAGS -I$WEBOS_PDK/device/usr/include" # These compiler options are needed to support the Palm Pixi - CXXFLAGS="$CXXFLAGS -mcpu=arm1136jf-s -mfpu=vfp -mfloat-abi=softfp" - LDFLAGS="$LDFLAGS -L$WEBOS_PDK/device/lib -L$WEBOS_PDK/device/usr/lib" + CXXFLAGS="$CXXFLAGS -mcpu=arm1136jf-s" + CXXFLAGS="$CXXFLAGS -mfpu=vfp " + CXXFLAGS="$CXXFLAGS -mfloat-abi=softfp" + LDFLAGS="$LDFLAGS -L$WEBOS_PDK/device/lib" + LDFLAGS="$LDFLAGS -L$WEBOS_PDK/device/usr/lib" LDFLAGS="$LDFLAGS -Wl,--allow-shlib-undefined" LDFLAGS="$LDFLAGS --sysroot=$WEBOS_PDK/arm-gcc/sysroot" add_line_to_config_mk "WEBOS_SDK = $WEBOS_SDK" - _unix=yes _seq_midi=no ;; wii) - CXXFLAGS="$CXXFLAGS -Os -mrvl -mcpu=750 -meabi -mhard-float" - CXXFLAGS="$CXXFLAGS -ffunction-sections -fdata-sections -fmodulo-sched" + CXXFLAGS="$CXXFLAGS -Os" + CXXFLAGS="$CXXFLAGS -mrvl" + CXXFLAGS="$CXXFLAGS -mcpu=750" + CXXFLAGS="$CXXFLAGS -meabi" + CXXFLAGS="$CXXFLAGS -mhard-float" + CXXFLAGS="$CXXFLAGS -ffunction-sections" + CXXFLAGS="$CXXFLAGS -fdata-sections" + CXXFLAGS="$CXXFLAGS -fmodulo-sched" CXXFLAGS="$CXXFLAGS -fuse-cxa-atexit" CXXFLAGS="$CXXFLAGS -I$DEVKITPRO/libogc/include" # libogc is required to link the cc tests (includes _start()) - LDFLAGS="$LDFLAGS -mrvl -mcpu=750 -L$DEVKITPRO/libogc/lib/wii -logc" + LDFLAGS="$LDFLAGS -mrvl" + LDFLAGS="$LDFLAGS -mcpu=750" + LDFLAGS="$LDFLAGS -L$DEVKITPRO/libogc/lib/wii" + LDFLAGS="$LDFLAGS -logc" if test "$_dynamic_modules" = "yes" ; then # retarded toolchain patch forces --gc-sections, overwrite it LDFLAGS="$LDFLAGS -Wl,--no-gc-sections" fi ;; wince) - CXXFLAGS="$CXXFLAGS -O3 -fno-inline-functions -march=armv4 -mtune=xscale -D_WIN32_WCE=300 " - DEFINES="$DEFINES -D__ARM__ -D_ARM_ -DUNICODE -DFPM_DEFAULT -DNONSTANDARD_PORT" - DEFINES="$DEFINES -DWIN32 -Dcdecl= -D__cdecl__=" - ;; - # given this is a shell script assume some type of unix - *) - echo "WARNING: could not establish system type, assuming unix like" - _unix=yes + CXXFLAGS="$CXXFLAGS -O3" + CXXFLAGS="$CXXFLAGS -fno-inline-functions" + CXXFLAGS="$CXXFLAGS -march=armv4" + CXXFLAGS="$CXXFLAGS -mtune=xscale" + DEFINES="$DEFINES -D_WIN32_WCE=300" + DEFINES="$DEFINES -D__ARM__" + DEFINES="$DEFINES -D_ARM_" + DEFINES="$DEFINES -DUNICODE" + DEFINES="$DEFINES -DFPM_DEFAULT" + DEFINES="$DEFINES -DNONSTANDARD_PORT" + DEFINES="$DEFINES -DWIN32" + DEFINES="$DEFINES -Dcdecl=" + DEFINES="$DEFINES -D__cdecl__=" ;; esac @@ -1713,48 +1914,39 @@ if test -n "$_host"; then echo "Cross-compiling to $_host" case "$_host" in android | android-v7a) - _unix=yes - _need_memalign=yes # we link a .so as default - LDFLAGS="$LDFLAGS -shared -Wl,-Bsymbolic,--no-undefined" + LDFLAGS="$LDFLAGS -shared" + LDFLAGS="$LDFLAGS -Wl,-Bsymbolic,--no-undefined" HOSTEXEPRE=lib HOSTEXEEXT=.so _backend="android" _port_mk="backends/platform/android/android.mk" - _arm_asm=yes _build_scalers=no _seq_midi=no _mt32emu=no _timidity=no ;; arm-linux|arm*-linux-gnueabi|arm-*-linux) - _unix=yes - _need_memalign=yes - _arm_asm=yes ;; arm-riscos|linupy) DEFINES="$DEFINES -DLINUPY" - _unix=yes - _need_memalign=yes ;; bfin*) - _need_memalign=yes ;; caanoo) # This uses the GPH backend. DEFINES="$DEFINES -DGPH_DEVICE" - DEFINES="$DEFINES -DCAANOO -DREDUCE_MEMORY_USAGE" + DEFINES="$DEFINES -DCAANOO" + DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE" if test "$_debug_build" = yes; then DEFINES="$DEFINES -DGPH_DEBUG" else # Use -O3 on the Caanoo for non-debug builds. CXXFLAGS="$CXXFLAGS -O3" fi - CXXFLAGS="$CXXFLAGS -mcpu=arm926ej-s -mtune=arm926ej-s" + CXXFLAGS="$CXXFLAGS -mcpu=arm926ej-s" + CXXFLAGS="$CXXFLAGS -mtune=arm926ej-s" ASFLAGS="$ASFLAGS" - _unix=yes - _need_memalign=yes - _arm_asm=yes _backend="gph" _build_hq_scalers=no _vkeybd=yes @@ -1768,10 +1960,12 @@ if test -n "$_host"; then _strip=$_host-strip ;; dingux) - DEFINES="$DEFINES -DUNIX -DDINGUX -DDISABLE_DOSBOX_OPL -DREDUCE_MEMORY_USAGE" + DEFINES="$DEFINES -DDINGUX" + DEFINES="$DEFINES -DDISABLE_DOSBOX_OPL" + DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE" ASFLAGS="$ASFLAGS" - CXXFLAGS="$CXXFLAGS -msoft-float -mips32" - _need_memalign=yes + CXXFLAGS="$CXXFLAGS -msoft-float" + CXXFLAGS="$CXXFLAGS -mips32" _backend="dingux" _mt32emu=no _vkeybd=yes @@ -1784,9 +1978,17 @@ if test -n "$_host"; then _port_mk="backends/platform/dingux/dingux.mk" ;; dreamcast) - DEFINES="$DEFINES -DDISABLE_DEFAULT_SAVEFILEMANAGER -DDISABLE_TEXT_CONSOLE -DDISABLE_COMMAND_LINE" - CXXFLAGS="$CXXFLAGS -O3 -funroll-loops -fschedule-insns2 -fomit-frame-pointer -fdelete-null-pointer-checks" - _need_memalign=yes + DEFINES="$DEFINES -DDISABLE_DEFAULT_SAVEFILEMANAGER" + DEFINES="$DEFINES -DDISABLE_TEXT_CONSOLE" + DEFINES="$DEFINES -DDISABLE_COMMAND_LINE" + if test "$_release_build" = yes; then + DEFINES="$DEFINES -DNOSERIAL" + fi + CXXFLAGS="$CXXFLAGS -O3" + CXXFLAGS="$CXXFLAGS -funroll-loops" + CXXFLAGS="$CXXFLAGS -fschedule-insns2" + CXXFLAGS="$CXXFLAGS -fomit-frame-pointer" + CXXFLAGS="$CXXFLAGS -fdelete-null-pointer-checks" _backend="dc" _build_scalers=no _mad=yes @@ -1795,23 +1997,22 @@ if test -n "$_host"; then _port_mk="backends/platform/dc/dreamcast.mk" ;; ds) - # TODO: complete this - DEFINES="$DEFINES -DDISABLE_FANCY_THEMES -DVECTOR_RENDERER_FORMAT=1555" - DEFINES="$DEFINES -DDISABLE_DEFAULT_SAVEFILEMANAGER" - DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE -DSTREAM_AUDIO_FROM_DISK" - DEFINES="$DEFINES -DDISABLE_DOSBOX_OPL -DDISABLE_SID -DDISABLE_NES_APU" DEFINES="$DEFINES -DDISABLE_COMMAND_LINE" - _need_memalign=yes - _arm_asm=yes - add_line_to_config_h '#define DISABLE_TEXT_CONSOLE' + DEFINES="$DEFINES -DDISABLE_DEFAULT_SAVEFILEMANAGER" + DEFINES="$DEFINES -DDISABLE_DOSBOX_OPL" + DEFINES="$DEFINES -DDISABLE_FANCY_THEMES" + DEFINES="$DEFINES -DDISABLE_SID" + DEFINES="$DEFINES -DDISABLE_NES_APU" + DEFINES="$DEFINES -DDISABLE_TEXT_CONSOLE" + DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE" + DEFINES="$DEFINES -DSTREAM_AUDIO_FROM_DISK" + DEFINES="$DEFINES -DVECTOR_RENDERER_FORMAT=1555" _backend="ds" _build_scalers=no _mt32emu=no _port_mk="backends/platform/ds/ds.mk" ;; gamecube) - _endian=big - _need_memalign=yes _backend="wii" _build_scalers=no _mt32emu=no @@ -1827,16 +2028,14 @@ if test -n "$_host"; then gp2x) # This uses the GPH backend. DEFINES="$DEFINES -DGPH_DEVICE" - DEFINES="$DEFINES -DGP2X -DREDUCE_MEMORY_USAGE" + DEFINES="$DEFINES -DGP2X" + DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE" if test "$_debug_build" = yes; then DEFINES="$DEFINES -DGPH_DEBUG" fi CXXFLAGS="$CXXFLAGS -march=armv4t" ASFLAGS="$ASFLAGS -mfloat-abi=soft" LDFLAGS="$LDFLAGS -static" - _unix=yes - _need_memalign=yes - _arm_asm=yes _backend="gph" _build_hq_scalers=no _vkeybd=yes @@ -1848,15 +2047,14 @@ if test -n "$_host"; then gp2xwiz) # This uses the GPH backend. DEFINES="$DEFINES -DGPH_DEVICE" - DEFINES="$DEFINES -DGP2XWIZ -DREDUCE_MEMORY_USAGE" + DEFINES="$DEFINES -DGP2XWIZ" + DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE" if test "$_debug_build" = yes; then DEFINES="$DEFINES -DGPH_DEBUG" fi - CXXFLAGS="$CXXFLAGS -mcpu=arm926ej-s -mtune=arm926ej-s" + CXXFLAGS="$CXXFLAGS -mcpu=arm926ej-s" + CXXFLAGS="$CXXFLAGS -mtune=arm926ej-s" ASFLAGS="$ASFLAGS -mfloat-abi=soft" - _unix=yes - _need_memalign=yes - _arm_asm=yes _backend="gph" _build_hq_scalers=no _vkeybd=yes @@ -1867,18 +2065,12 @@ if test -n "$_host"; then ;; iphone) DEFINES="$DEFINES -DIPHONE" - _unix=yes - _need_memalign=yes - _arm_asm=yes _backend="iphone" _build_hq_scalers=no _seq_midi=no ;; m68k-atari-mint) DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE" - _unix=yes - _endian=big - _need_memalign=yes _ranlib=m68k-atari-mint-ranlib _ar="m68k-atari-mint-ar cru" _seq_midi=no @@ -1892,15 +2084,10 @@ if test -n "$_host"; then mips-sgi*) LDFLAGS="$LDFLAGS -static-libgcc" LIBS="$LIBS -laudio" - _endian=big - _need_memalign=yes ;; motoezx) DEFINES="$DEFINES -DMOTOEZX" ASFLAGS="$ASFLAGS -mfpu=vfp" - _unix=yes - _need_memalign=yes - _arm_asm=yes _backend="linuxmoto" _build_hq_scalers=no _mt32emu=no @@ -1911,9 +2098,6 @@ if test -n "$_host"; then motomagx) DEFINES="$DEFINES -DMOTOMAGX" ASFLAGS="$ASFLAGS -mfpu=vfp" - _unix=yes - _need_memalign=yes - _arm_asm=yes _backend="linuxmoto" _build_hq_scalers=no _mt32emu=no @@ -1922,16 +2106,23 @@ if test -n "$_host"; then _port_mk="backends/platform/linuxmoto/linuxmoto.mk" ;; n64) - CXXFLAGS="$CXXFLAGS -mno-extern-sdata --param max-inline-insns-auto=20 -fomit-frame-pointer" - CXXFLAGS="$CXXFLAGS -march=vr4300 -mtune=vr4300 -mhard-float" - LDFLAGS="$LDFLAGS -march=vr4300 -mtune=vr4300 -nodefaultlibs -nostartfiles -mno-crt0" - LDFLAGS="$LDFLAGS -L$N64SDK/hkz-libn64 -L$N64SDK/lib" + CXXFLAGS="$CXXFLAGS -mno-extern-sdata" + CXXFLAGS="$CXXFLAGS --param max-inline-insns-auto=20" + CXXFLAGS="$CXXFLAGS -fomit-frame-pointer" + CXXFLAGS="$CXXFLAGS -march=vr4300" + CXXFLAGS="$CXXFLAGS -mtune=vr4300" + CXXFLAGS="$CXXFLAGS -mhard-float" + LDFLAGS="$LDFLAGS -march=vr4300" + LDFLAGS="$LDFLAGS -mtune=vr4300" + LDFLAGS="$LDFLAGS -nodefaultlibs" + LDFLAGS="$LDFLAGS -nostartfiles" + LDFLAGS="$LDFLAGS -mno-crt0" + LDFLAGS="$LDFLAGS -L$N64SDK/hkz-libn64" + LDFLAGS="$LDFLAGS -L$N64SDK/lib" LDFLAGS="$LDFLAGS -T n64ld_cpp.x -Xlinker -Map -Xlinker scummvm.map" _backend="n64" - _need_memalign=yes _mt32emu=no _build_scalers=no - _indeo3=no _translation=no _keymapper=no _text_console=no @@ -1946,25 +2137,23 @@ if test -n "$_host"; then ;; neuros) DEFINES="$DEFINES -DNEUROS" - _unix=yes - _need_memalign=yes _backend='null' _build_hq_scalers=no _mt32emu=no ;; openpandora) - DEFINES="$DEFINES -DOPENPANDORA -DREDUCE_MEMORY_USAGE" + DEFINES="$DEFINES -DOPENPANDORA" + DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE" if test "$_release_build" = no; then DEFINES="$DEFINES -DOP_DEBUG" else # Use -O3 on the OpenPandora for non-debug builds. CXXFLAGS="$CXXFLAGS -O3" fi - CXXFLAGS="$CXXFLAGS -march=armv7-a -mtune=cortex-a8 -mfpu=neon" + CXXFLAGS="$CXXFLAGS -march=armv7-a" + CXXFLAGS="$CXXFLAGS -mtune=cortex-a8" + CXXFLAGS="$CXXFLAGS -mfpu=neon" ASFLAGS="$ASFLAGS -mfloat-abi=soft" - _unix=yes - _need_memalign=yes - _arm_asm=yes _backend="openpandora" _build_hq_scalers=yes _vkeybd=no @@ -1973,15 +2162,13 @@ if test -n "$_host"; then _port_mk="backends/platform/openpandora/op-bundle.mk" ;; ppc-amigaos) - _endian=big - # AmigaOS exec allocates memory always in an aligned way - _need_memalign=yes ;; ps2) - # TODO: complete this - DEFINES="$DEFINES -DDISABLE_TEXT_CONSOLE -DDISABLE_COMMAND_LINE -DDISABLE_DOSBOX_OPL" - DEFINES="$DEFINES -DDISABLE_SID -DDISABLE_NES_APU" - _need_memalign=yes + DEFINES="$DEFINES -DDISABLE_TEXT_CONSOLE" + DEFINES="$DEFINES -DDISABLE_COMMAND_LINE" + DEFINES="$DEFINES -DDISABLE_DOSBOX_OPL" + DEFINES="$DEFINES -DDISABLE_SID" + DEFINES="$DEFINES -DDISABLE_NES_APU" _backend="ps2" _build_scalers=no _mt32emu=no @@ -2001,34 +2188,30 @@ if test -n "$_host"; then DEFINES="$DEFINES -D__PS2_DEBUG__" #INCLUDES="$INCLUDES -I$(PS2GDB)/ee" #LDFLAGS="$LDFLAGS -L$(PS2GDB)/lib" - LDFLAGS="$LDFLAGS -lps2gdbStub -lps2ip -ldebug" + LDFLAGS="$LDFLAGS -lps2gdbStub" + LDFLAGS="$LDFLAGS -lps2ip" + LDFLAGS="$LDFLAGS -ldebug" else # If not building for debug mode, strip binaries. CXXFLAGS="$CXXFLAGS -s" fi ;; psp) - _need_memalign=yes _backend="psp" _build_scalers=no _mt32emu=no _port_mk="backends/platform/psp/psp.mk" ;; samsungtv) - DEFINES="$DEFINES -DSAMSUNGTV -DDISABLE_COMMAND_LINE" + DEFINES="$DEFINES -DSAMSUNGTV" + DEFINES="$DEFINES -DDISABLE_COMMAND_LINE" ASFLAGS="$ASFLAGS -mfpu=vfp" HOSTEXEEXT=".so" - _unix=yes - _need_memalign=yes - _arm_asm=yes _backend="samsungtv" _mt32emu=no _vkeybd=yes ;; webos) - _unix=yes - _need_memalign=yes - _arm_asm=yes _backend="webos" _port_mk="backends/platform/webos/webos.mk" _build_scalers=no @@ -2039,8 +2222,6 @@ if test -n "$_host"; then _keymapper=yes ;; wii) - _endian=big - _need_memalign=yes _backend="wii" _build_scalers=no _port_mk="backends/platform/wii/wii.mk" @@ -2055,10 +2236,9 @@ if test -n "$_host"; then ;; wince) LDFLAGS="$LDFLAGS -Wl,--stack,65536" - _need_memalign=yes - _arm_asm=yes _tremolo=yes _backend="wince" + _detectlang=yes _mt32emu=no _port_mk="backends/platform/wince/wince.mk" ;; @@ -2066,55 +2246,142 @@ if test -n "$_host"; then echo "WARNING: Unknown target, continuing with auto-detected values" ;; esac +fi -else - # - # Check whether memory alignment is required - # - echo_n "Alignment required... " - case $_host_cpu in - alpha*) - # Hardcode alignment requirements for Alpha processsors - _need_memalign=yes - ;; - arm*) - _need_memalign=yes - ;; - mips*) - # Hardcode alignment requirements for MIPS processsors. - # While these can emulate unaligned memory access, this - # emulation is rather slow. - _need_memalign=yes - ;; - sh*) - # Hardcode alignment requirements for SH processsors. - # While these can emulate unaligned memory access, this - # emulation is rather slow. - _need_memalign=yes +# +# Backend related stuff +# +case $_backend in + android) + DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE" + CXXFLAGS="$CXXFLAGS -Wa,--noexecstack" + LDFLAGS="$LDFLAGS -Wl,-z,noexecstack" + ;; + dc) + INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/dc' + INCLUDES="$INCLUDES "'-isystem $(ronindir)/include' + LDFLAGS="$LDFLAGS -Wl,-Ttext,0x8c010000" + LDFLAGS="$LDFLAGS -nostartfiles" + LDFLAGS="$LDFLAGS "'$(ronindir)/lib/crt0.o' + LDFLAGS="$LDFLAGS "'-L$(ronindir)/lib' + if test "$_release_build" = yes; then + LIBS="$LIBS -lronin-noserial -lm" + else + LIBS="$LIBS -lronin -lm" + fi + ;; + dingux) + DEFINES="$DEFINES -DDINGUX" + ;; + ds) + INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/ds/arm9/source' + INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/ds/commoninclude' + INCLUDES="$INCLUDES "'-Ibackends/platform/ds/arm9/data' + ;; + gp2x) + ;; + gph) + ;; + iphone) + OBJCFLAGS="$OBJCFLAGS --std=c99" + LIBS="$LIBS -lobjc -framework UIKit -framework CoreGraphics -framework OpenGLES" + LIBS="$LIBS -framework QuartzCore -framework GraphicsServices -framework CoreFoundation" + LIBS="$LIBS -framework Foundation -framework AudioToolbox -framework CoreAudio" + ;; + linuxmoto) + DEFINES="$DEFINES -DLINUXMOTO" + ;; + n64) + INCLUDES="$INCLUDES "'-I$(N64SDK)/include' + INCLUDES="$INCLUDES "'-I$(N64SDK)/mips64/include' + INCLUDES="$INCLUDES "'-I$(N64SDK)/hkz-libn64' + INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/n64' + LIBS="$LIBS -lpakfs -lframfs -ln64 -ln64utils -lromfs" + LIBS="$LIBS -lm -lstdc++ -lz" + ;; + null) + DEFINES="$DEFINES -DUSE_NULL_DRIVER" + ;; + openpandora) + ;; + ps2) + DEFINES="$DEFINES -D_EE" + DEFINES="$DEFINES -DFORCE_RTL" + INCLUDES="$INCLUDES -I$PS2SDK/ee/include" + INCLUDES="$INCLUDES -I$PS2SDK/common/include" + INCLUDES="$INCLUDES -I$PS2SDK/ports/include" + if test "$_dynamic_modules" = no ; then + LDFLAGS="$LDFLAGS -mno-crt0" + LDFLAGS="$LDFLAGS $PS2SDK/ee/startup/crt0.o" + LDFLAGS="$LDFLAGS -T $PS2SDK/ee/startup/linkfile" + fi + LDFLAGS="$LDFLAGS -L$PS2SDK/ee/lib" + LDFLAGS="$LDFLAGS -L$PS2SDK/ports/lib" + LIBS="$LIBS -lmc -lpad -lmouse -lhdd -lpoweroff -lsjpcm" + LIBS="$LIBS -lm -lc -lfileXio -lkernel -lstdc++" + ;; + psp) + DEFINES="$DEFINES -D__PSP__" + DEFINES="$DEFINES -DDISABLE_COMMAND_LINE" + DEFINES="$DEFINES -DDISABLE_DOSBOX_OPL" + LIBS="$LIBS -lpng" + LIBS="$LIBS -Wl,-Map,mapfile.txt" + ;; + samsungtv) + DEFINES="$DEFINES -DSAMSUNGTV" + LDFLAGS="$LDFLAGS -shared" + LDFLAGS="$LDFLAGS -fpic" + ;; + webos) + # There is no sdl-config in the WebOS PDK so we don't use find_sdlconfig here. + LIBS="$LIBS -lSDL" + DEFINES="$DEFINES -DWEBOS" + DEFINES="$DEFINES -DSDL_BACKEND" + add_line_to_config_mk "SDL_BACKEND = 1" + MODULES="$MODULES backends/platform/sdl" + ;; + wii) + DEFINES="$DEFINES -D__WII__" + DEFINES="$DEFINES -DGEKKO" + case $_host_os in + gamecube) + LIBS="$LIBS -lgxflux -liso9660 -lfat -logc -ldb" ;; *) - # Try to auto-detect.... - cat > $TMPC << EOF -#include <stdlib.h> -#include <signal.h> -int main(int argc, char **argv) { - unsigned char test[8] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 }; - signal(SIGBUS, exit); - signal(SIGABRT, exit); - signal(SIGSEGV, exit); - if (*((unsigned int *)(test + 1)) != 0x55443322 && *((unsigned int *)(test + 1)) != 0x22334455) { - return 1; - } - return 0; -} -EOF - _need_memalign=yes - cc_check_no_clean && $TMPO$HOSTEXEEXT && _need_memalign=no - cc_check_clean + LIBS="$LIBS -lgxflux -ldi -liso9660 -ltinysmb -lfat -lwiiuse -lbte -logc -lwiikeyboard -ldb" ;; - esac - echo "$_need_memalign" -fi + esac + ;; + wince) + INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/wince' + INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/wince/CEgui' + INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/wince/CEkeys' + LIBS="$LIBS -static -lSDL" + DEFINES="$DEFINES -DSDL_BACKEND" + add_line_to_config_mk "SDL_BACKEND = 1" + ;; + sdl) + ;; + *) + echo "support for $_backend backend not implemented in configure script yet" + exit 1 + ;; +esac +MODULES="$MODULES backends/platform/$_backend" + +# +# Setup SDL specifics for SDL based backends +# +case $_backend in + dingux | gp2x | gph | linuxmoto | openpandora | samsungtv | sdl) + find_sdlconfig + INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" + LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" + DEFINES="$DEFINES -DSDL_BACKEND" + add_line_to_config_mk "SDL_BACKEND = 1" + ;; +esac + # # Enable 16bit support only for backends which support it @@ -2134,29 +2401,38 @@ esac # -# Add the results of the above checks to config.h +# Determine whether host is POSIX compliant, or at least POSIX +# compatible enough to support our POSIX code (including dlsym(), +# mkdir() and some other APIs). # -case $_endian in - big) - add_line_to_config_h '#undef SCUMM_LITTLE_ENDIAN' - add_line_to_config_h '#define SCUMM_BIG_ENDIAN' +# TODO: Instead of basing this on the host name, we should really base +# this on the presence of features (such as the dlsym and mkdir APIs). +# +echo_n "Checking if host is POSIX compliant... " +case $_host_os in + amigaos* | cygwin* | dreamcast | ds | gamecube | mingw* | n64 | ps2 | psp | wii | wince) + _posix=no ;; - little) - add_line_to_config_h '#define SCUMM_LITTLE_ENDIAN' - add_line_to_config_h '#undef SCUMM_BIG_ENDIAN' + android | beos* | bsd* | darwin* | freebsd* | gph-linux | haiku* | hpux* | iphone | irix* | linux* | mint* | netbsd* | openbsd* | solaris* | sunos* | uclinux* | webos) + _posix=yes + ;; + os2-emx*) + _posix=yes # FIXME: Really??? ;; *) - exit 1 + # given this is a shell script, we might assume some type of posix. + # However, the host system might be a totally different one, so + # we can assume nothing about it. + # Indeed, as mentioned further above, we really should test for the + # presences of relevant APIs on the host anyway... + _posix=no ;; esac +echo $_posix -define_in_config_h_if_yes $_have_x86 'HAVE_X86' - -define_in_config_h_if_yes $_need_memalign 'SCUMM_NEED_ALIGNMENT' - -if test "$_unix" = yes ; then - DEFINES="$DEFINES -DUNIX" - add_line_to_config_mk 'UNIX = 1' +if test "$_posix" = yes ; then + DEFINES="$DEFINES -DPOSIX" + add_line_to_config_mk 'POSIX = 1' fi # @@ -2172,16 +2448,15 @@ add_to_config_mk_if_yes "$_verbose_build" 'VERBOSE_BUILD = 1' echo_n "Checking whether building plugins was requested... " echo "$_dynamic_modules" _mak_plugins= -_def_plugin="/* -> plugins disabled */" if test "$_dynamic_modules" = yes ; then echo_n "Checking whether building plugins is supported... " case $_host_os in android) -_def_plugin=' -#define PLUGIN_PREFIX "lib" -#define PLUGIN_SUFFIX ".so" -' + _plugin_prefix="lib" + _plugin_suffix=".so" + CXXFLAGS="$CXXFLAGS -fpic" + LIBS="$LIBS -ldl" # Work around an Android 2.0+ run-time linker bug: # The linker doesn't actually look in previously # loaded libraries when trying to resolve symbols - @@ -2191,47 +2466,29 @@ _def_plugin=' # (otherwise unnecessary) dependency from plugins back # to the main libscummvm.so. _mak_plugins=' -DYNAMIC_MODULES := 1 -PLUGIN_PREFIX := lib -PLUGIN_SUFFIX := .so PLUGIN_EXTRA_DEPS = libscummvm.so -CXXFLAGS += -DDYNAMIC_MODULES -CXXFLAGS += -fpic PLUGIN_LDFLAGS += $(LDFLAGS) -L. -lscummvm PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive -LIBS += -ldl ' ;; darwin*) -_def_plugin=' -#define PLUGIN_PREFIX "" -#define PLUGIN_SUFFIX ".plugin" -' + _plugin_prefix="" + _plugin_suffix=".plugin" + LIBS="$LIBS -ldl" _mak_plugins=' -DYNAMIC_MODULES := 1 -PLUGIN_PREFIX := -PLUGIN_SUFFIX := .plugin PLUGIN_EXTRA_DEPS = $(EXECUTABLE) -CXXFLAGS += -DDYNAMIC_MODULES PLUGIN_LDFLAGS += -bundle -bundle_loader $(EXECUTABLE) -exported_symbols_list "$(srcdir)/plugin.exp" PRE_OBJS_FLAGS := -all_load POST_OBJS_FLAGS := -LIBS += -ldl ' ;; dreamcast) -_def_plugin=' -#define PLUGIN_PREFIX "" -#define PLUGIN_SUFFIX ".plg" -' + _plugin_prefix="" + _plugin_suffix=".plg" _mak_plugins=' -DYNAMIC_MODULES := 1 -PLUGIN_PREFIX := -PLUGIN_SUFFIX := .plg PLUGIN_EXTRA_DEPS = $(abspath $(srcdir)/backends/platform/dc/plugin.x $(srcdir)/backends/platform/dc/plugin.syms) $(EXECUTABLE) backends/platform/dc/plugin_head.o -CXXFLAGS += -DDYNAMIC_MODULES -PLUGIN_LDFLAGS = -ml -m4-single-only -nostartfiles -Wl,-q,-T$(srcdir)/backends/platform/dc/plugin.x,--just-symbols,$(EXECUTABLE),--retain-symbols-file,$(srcdir)/backends/platform/dc/plugin.syms -L$(ronindir)/lib backends/platform/dc/plugin_head.o +PLUGIN_LDFLAGS = -ml -m4-single-only -nostartfiles -Wl,-q,-T$(srcdir)/backends/platform/dc/plugin.x,--just-symbols,$(EXECUTABLE),--retain-symbols-file,$(srcdir)/backends/platform/dc/plugin.syms backends/platform/dc/plugin_head.o PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--no-whole-archive ' @@ -2244,17 +2501,11 @@ PLUGIN_LDFLAGS += -Wl,-T$(srcdir)/backends/plugins/ds/plugin.ld -mthumb-interwo ' ;; freebsd*) -_def_plugin=' -#define PLUGIN_PREFIX "lib" -#define PLUGIN_SUFFIX ".so" -' + _plugin_prefix="lib" + _plugin_suffix=".so" + CXXFLAGS="$CXXFLAGS -fpic" _mak_plugins=' -DYNAMIC_MODULES := 1 -PLUGIN_PREFIX := lib -PLUGIN_SUFFIX := .so PLUGIN_EXTRA_DEPS = -CXXFLAGS += -DDYNAMIC_MODULES -CXXFLAGS += -fpic PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive @@ -2268,52 +2519,34 @@ PLUGIN_LDFLAGS += -Wl,-T$(srcdir)/backends/plugins/wii/plugin.ld ' ;; gph*) -_def_plugin=' -#define PLUGIN_PREFIX "" -#define PLUGIN_SUFFIX ".plugin" -' + _plugin_prefix="" + _plugin_suffix=".plugin" + CXXFLAGS="$CXXFLAGS -fpic" + LIBS="$LIBS -ldl" _mak_plugins=' -DYNAMIC_MODULES := 1 -PLUGIN_PREFIX := -PLUGIN_SUFFIX := .plugin PLUGIN_EXTRA_DEPS = $(EXECUTABLE) -CXXFLAGS += -DDYNAMIC_MODULES -CXXFLAGS += -fpic PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive -LIBS += -ldl ' ;; linux*) -_def_plugin=' -#define PLUGIN_PREFIX "lib" -#define PLUGIN_SUFFIX ".so" -' + _plugin_prefix="lib" + _plugin_suffix=".so" + CXXFLAGS="$CXXFLAGS -fpic" + LIBS="$LIBS -ldl" _mak_plugins=' -DYNAMIC_MODULES := 1 -PLUGIN_PREFIX := lib -PLUGIN_SUFFIX := .so PLUGIN_EXTRA_DEPS = -CXXFLAGS += -DDYNAMIC_MODULES -CXXFLAGS += -fpic PLUGIN_LDFLAGS += -shared PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive -LIBS += -ldl ' ;; *mingw32*) -_def_plugin=' -#define PLUGIN_PREFIX "" -#define PLUGIN_SUFFIX ".dll" -' + _plugin_prefix="" + _plugin_suffix=".dll" _mak_plugins=' -DYNAMIC_MODULES := 1 -PLUGIN_PREFIX := -PLUGIN_SUFFIX := .dll PLUGIN_EXTRA_DEPS = $(EXECUTABLE) -CXXFLAGS += -DDYNAMIC_MODULES PLUGIN_LDFLAGS := -Wl,--enable-auto-import -shared ./libscummvm.a PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--export-all-symbols -Wl,--no-whole-archive -Wl,--out-implib,./libscummvm.a @@ -2322,16 +2555,10 @@ POST_OBJS_FLAGS := -Wl,--export-all-symbols -Wl,--no-whole-archive -Wl,--out-im wince) DEFINES="$DEFINES -DUNCACHED_PLUGINS" HOSTEXEEXT=".dll" -_def_plugin=' -#define PLUGIN_PREFIX "" -#define PLUGIN_SUFFIX ".plugin" -' + _plugin_prefix="" + _plugin_suffix=".plugin" _mak_plugins=' -DYNAMIC_MODULES := 1 -PLUGIN_PREFIX := -PLUGIN_SUFFIX := .plugin PLUGIN_EXTRA_DEPS = $(EXECUTABLE) -CXXFLAGS += -DDYNAMIC_MODULES PLUGIN_LDFLAGS := -shared -lscummvm -L. PRE_OBJS_FLAGS := -Wl,--whole-archive POST_OBJS_FLAGS := -Wl,--export-all-symbols -Wl,--no-whole-archive -Wl,--out-implib,./libscummvm.a -shared @@ -2341,7 +2568,7 @@ POST_OBJS_FLAGS := -Wl,--export-all-symbols -Wl,--no-whole-archive -Wl,--out-im _elf_loader=yes DEFINES="$DEFINES -DMIPS_TARGET" _mak_plugins=' -LDFLAGS += -mno-crt0 $(PS2SDK)/ee/startup/crt0.o -T$(srcdir)/backends/plugins/ps2/main_prog.ld +LDFLAGS += -mno-crt0 $(PS2SDK)/ee/startup/crt0.o -Wl,-T$(srcdir)/backends/plugins/ps2/main_prog.ld PLUGIN_LDFLAGS += -mno-crt0 $(PS2SDK)/ee/startup/crt0.o -Wl,-T$(srcdir)/backends/plugins/ps2/plugin.ld -lstdc++ -lc ' ;; @@ -2354,27 +2581,20 @@ PLUGIN_LDFLAGS += -Wl,-T$(srcdir)/backends/plugins/psp/plugin.ld -lstdc++ -lc ' ;; webos) -_def_plugin=' -#define PLUGIN_PREFIX "lib" -#define PLUGIN_SUFFIX ".so" -' + _plugin_prefix="lib" + _plugin_suffix=".so" + CXXFLAGS="$CXXFLAGS -fpic" + LIBS="$LIBS -ldl" _mak_plugins=' -DYNAMIC_MODULES := 1 -PLUGIN_PREFIX := lib -PLUGIN_SUFFIX := .so PLUGIN_EXTRA_DEPS = -CXXFLAGS += -DDYNAMIC_MODULES -CXXFLAGS += -fpic PLUGIN_LDFLAGS += -shared $(LDFLAGS) PRE_OBJS_FLAGS := -Wl,-export-dynamic -Wl,-whole-archive POST_OBJS_FLAGS := -Wl,-no-whole-archive -LIBS += -ldl ' ;; *) _dynamic_modules=no _mak_plugins= - _def_plugin= ;; esac echo "$_dynamic_modules" @@ -2386,15 +2606,9 @@ fi define_in_config_if_yes "$_elf_loader" 'USE_ELF_LOADER' if test "$_elf_loader" = yes; then - CXXFLAGS="$CXXFLAGS -DDYNAMIC_MODULES" - _def_plugin=' -#define PLUGIN_PREFIX "" -#define PLUGIN_SUFFIX ".plg" -' + _plugin_prefix="" + _plugin_suffix=".plg" _mak_plugins=' -DYNAMIC_MODULES := 1 -PLUGIN_PREFIX := -PLUGIN_SUFFIX := .plg PLUGIN_EXTRA_DEPS = $(EXECUTABLE) PLUGIN_LDFLAGS = -nostartfiles backends/plugins/elf/version.o -Wl,-q,--just-symbols,$(EXECUTABLE),--retain-symbols-file,$(srcdir)/backends/plugins/elf/plugin.syms PRE_OBJS_FLAGS := -Wl,--whole-archive @@ -2403,6 +2617,19 @@ POST_OBJS_FLAGS := -Wl,--no-whole-archive fi # +# Set up some common plugin settings in config.h and config.mk, if enabled +# +define_in_config_if_yes "$_dynamic_modules" 'DYNAMIC_MODULES' + +if test "$_dynamic_modules" = yes ; then + add_line_to_config_h "#define PLUGIN_PREFIX \"$_plugin_prefix\"" + add_line_to_config_h "#define PLUGIN_SUFFIX \"$_plugin_suffix\"" + add_line_to_config_mk "PLUGIN_PREFIX := $_plugin_prefix" + add_line_to_config_mk "PLUGIN_SUFFIX := $_plugin_suffix" +fi + + +# # Check whether integrated MT-32 emulator support is requested # define_in_config_if_yes "$_mt32emu" 'USE_MT32EMU' @@ -2423,28 +2650,6 @@ define_in_config_if_yes "$_build_scalers" 'USE_SCALERS' define_in_config_if_yes "$_build_hq_scalers" 'USE_HQ_SCALERS' # -# Check whether to use optimized ARM asm -# -define_in_config_if_yes "$_arm_asm" 'USE_ARM_SCALER_ASM' -define_in_config_if_yes "$_arm_asm" 'USE_ARM_SOUND_ASM' -define_in_config_if_yes "$_arm_asm" 'USE_ARM_SMUSH_ASM' -define_in_config_if_yes "$_arm_asm" 'USE_ARM_GFX_ASM' -define_in_config_if_yes "$_arm_asm" 'USE_ARM_COSTUME_ASM' - -# -# Check whether to compile the Indeo3 decoder -# -if test "$_indeo3" = auto ; then - # Autodetect. Build if either the gob engine or plugins are enabled - if test `get_engine_build gob` = yes || test "$_dynamic_modules" = yes ; then - _indeo3=yes - else - _indeo3=no - fi -fi -define_in_config_if_yes "$_indeo3" 'USE_INDEO3' - -# # Check for math lib # cat > $TMPC << EOF @@ -2627,14 +2832,33 @@ if test ! "$_theoradec" = notsupported ; then fi # +# Check for the AAC decoder +# +echocheck "libfaad" +if test "$_faad" = auto ; then + _faad=no + cat > $TMPC << EOF +#include <neaacdec.h> +int main(void) { NeAACDecGetCapabilities(); return 0; } +EOF + cc_check $FAAD_CFLAGS $FAAD_LIBS -lfaad && _faad=yes +fi +if test "$_faad" = yes ; then + LIBS="$LIBS $FAAD_LIBS -lfaad" + INCLUDES="$INCLUDES $FAAD_CFLAGS" +fi +define_in_config_if_yes "$_faad" 'USE_FAAD' +echo "$_faad" + +# # Check for SEQ MIDI # echocheck "SEQ MIDI" if test "$_seq_midi" = auto ; then # TODO: Test for /dev/sequencer presence? Or maybe just for /dev ? - # For now, we just always enable it when "unix" mode is on (backends + # For now, we just always enable it when "posix" mode is on (backends # that do not want it can disable it by setting _seq_midi=no). - _seq_midi="$_unix" + _seq_midi="$_posix" fi define_in_config_h_if_yes "$_seq_midi" 'USE_SEQ_MIDI' echo "$_seq_midi" @@ -2647,7 +2871,7 @@ if test "$_timidity" = auto ; then # TODO: Is there a good possibility of auto detecting whether we # should include TiMidity support? It can only be used on Unix # currently so we use that as "detection" for now. - _timidity="$_unix" + _timidity="$_posix" fi define_in_config_h_if_yes "$_timidity" 'USE_TIMIDITY' echo "$_timidity" @@ -2678,49 +2902,6 @@ if test `get_engine_build sword25` = yes && test ! "$_zlib" = yes ; then fi # -# Check for LibMPEG2 -# -echocheck "libmpeg2 >= 0.3.2" -if test "$_mpeg2" = auto ; then - _mpeg2=no - cat > $TMPC << EOF -typedef signed $type_1_byte int8_t; -typedef signed $type_2_byte int16_t; -typedef signed $type_4_byte int32_t; - -typedef unsigned $type_1_byte uint8_t; -typedef unsigned $type_2_byte uint16_t; -typedef unsigned $type_4_byte uint32_t; - -#include <mpeg2dec/mpeg2.h> -int main(void) { - /* mpeg2_state_t first appears in 0.4.0 */ - mpeg2_state_t state; - - #ifdef MPEG2_RELEASE - if (MPEG2_RELEASE >= MPEG2_VERSION(0, 3, 2)) - return 0; - #endif - return 1; -} -EOF - - if test -n "$_host"; then - # don't execute while cross compiling - cc_check $MPEG2_CFLAGS $MPEG2_LIBS -lmpeg2 && _mpeg2=yes - else - cc_check_no_clean $MPEG2_CFLAGS $MPEG2_LIBS -lmpeg2 && $TMPO$HOSTEXEEXT && _mpeg2=yes - cc_check_clean - fi -fi -if test "$_mpeg2" = yes ; then - INCLUDES="$INCLUDES $MPEG2_CFLAGS" - LIBS="$LIBS $MPEG2_LIBS -lmpeg2" -fi -define_in_config_if_yes "$_mpeg2" 'USE_MPEG2' -echo "$_mpeg2" - -# # Check for libfluidsynth # echocheck "libfluidsynth" @@ -2782,7 +2963,7 @@ if test "$_readline" = yes ; then fi define_in_config_h_if_yes "$_readline" 'USE_READLINE' -define_in_config_h_if_yes "$_text_console" 'USE_TEXT_CONSOLE' +define_in_config_h_if_yes "$_text_console" 'USE_TEXT_CONSOLE_FOR_DEBUGGER' # # Check for OpenGL (ES) @@ -2868,6 +3049,7 @@ fi define_in_config_if_yes "$_opengl" "USE_OPENGL" define_in_config_if_yes "$_opengles" "USE_GLES" + # # Check for nasm # @@ -2929,12 +3111,8 @@ define_in_config_if_yes $_nasm 'USE_NASM' # # Enable vkeybd / keymapper # -if test "$_vkeybd" = yes ; then - DEFINES="$DEFINES -DENABLE_VKEYBD" -fi -if test "$_keymapper" = yes ; then - DEFINES="$DEFINES -DENABLE_KEYMAPPER" -fi +define_in_config_if_yes $_vkeybd 'ENABLE_VKEYBD' +define_in_config_if_yes $_keymapper 'ENABLE_KEYMAPPER' # Check whether to build translation support # @@ -2945,12 +3123,14 @@ if test "$_translation" = no ; then else echo_n "yes (" - cat > $TMPC << EOF + if test "$_detectlang" != yes ; then + cat > $TMPC << EOF #include <locale.h> int main(void) { setlocale(LC_ALL, ""); return 0; } EOF - _detectlang=no - cc_check $LDFLAGS $CXXFLAGS && _detectlang=yes + _detectlang=no + cc_check $LDFLAGS $CXXFLAGS && _detectlang=yes + fi define_in_config_h_if_yes $_detectlang 'USE_DETECTLANG' if test "$_detectlang" = yes ; then @@ -3016,10 +3196,6 @@ if test "$_mt32emu" = yes ; then echo_n ", MT-32 emu" fi -if test "$_indeo3" = yes ; then - echo_n ", Indeo3 decoder" -fi - if test "$_text_console" = yes ; then echo_n ", text console" fi @@ -3035,7 +3211,8 @@ else fi # -# Backend related stuff +# Some last-minute backend specific stuff, executed +# after all of CXXFLAGS, LDFLAGS, LIBS etc. have been setup # case $_backend in android) @@ -3045,14 +3222,12 @@ case $_backend in else CXXFLAGS="$CXXFLAGS -fno-stack-protector" fi - CXXFLAGS="$CXXFLAGS -Wa,--noexecstack" - LDFLAGS="$LDFLAGS -Wl,-z,noexecstack" static_libs='' system_libs='' for lib in $LIBS; do case $lib in - -lz|-lm) + -lz|-lm|-ldl) system_libs="$system_libs $lib" ;; *) @@ -3064,167 +3239,15 @@ case $_backend in # -lgcc is carefully placed here - we want to catch # all toolchain symbols in *our* libraries rather # than pick up anything unhygenic from the Android libs. - LIBS="-Wl,-Bstatic $static_libs" - LIBS="$LIBS -Wl,-Bdynamic -lgcc $system_libs -llog -lGLESv1_CM" - DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE" - ;; - dc) - INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/dc -isystem $(ronindir)/include' - LDFLAGS="$LDFLAGS -Wl,-Ttext,0x8c010000 -nostartfiles "'$(ronindir)/lib/crt0.o -L$(ronindir)/lib' - LIBS="$LIBS -lronin -lm" - ;; - dingux) - find_sdlconfig - INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" - LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" - DEFINES="$DEFINES -DSDL_BACKEND -DDINGUX" - LDFLAGS="$LDFLAGS " - MODULES="$MODULES backends/platform/sdl" - ;; - ds) - # TODO ds - INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/ds/arm9/source' - INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/ds/commoninclude' - INCLUDES="$INCLUDES "'-Ibackends/platform/ds/arm9/data' - ;; - gp2x) - find_sdlconfig - INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" - LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" - LDFLAGS="$LDFLAGS" - DEFINES="$DEFINES -DSDL_BACKEND" - ;; - gph) - find_sdlconfig - INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" - LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" - LDFLAGS="$LDFLAGS" - DEFINES="$DEFINES -DSDL_BACKEND" - ;; - iphone) - OBJCFLAGS="$OBJCFLAGS --std=c99" - LIBS="$LIBS -lobjc -framework UIKit -framework CoreGraphics -framework OpenGLES -framework QuartzCore -framework GraphicsServices -framework CoreFoundation -framework Foundation -framework AudioToolbox -framework CoreAudio" - ;; - linuxmoto) - find_sdlconfig - INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" - LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" - DEFINES="$DEFINES -DSDL_BACKEND -DLINUXMOTO" + LIBS="-Wl,-Bstatic $static_libs -Wl,-Bdynamic -lgcc $system_libs -llog -lGLESv1_CM" ;; n64) - INCLUDES="$INCLUDES "'-I$(N64SDK)/include' - INCLUDES="$INCLUDES "'-I$(N64SDK)/mips64/include' - INCLUDES="$INCLUDES "'-I$(N64SDK)/hkz-libn64' - INCLUDES="$INCLUDES "'-I$(srcdir)/backends/platform/n64' - LIBS="$LIBS -lpakfs -lframfs -ln64 -ln64utils -lromfs -lm -lstdc++ -lc -lgcc -lz -lnosys" - ;; - null) - DEFINES="$DEFINES -DUSE_NULL_DRIVER" - ;; - openpandora) - find_sdlconfig - INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" - LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" - LDFLAGS="$LDFLAGS" - DEFINES="$DEFINES -DSDL_BACKEND" - ;; - ps2) - # TODO ps2 - DEFINES="$DEFINES -D_EE -DFORCE_RTL" - INCLUDES="$INCLUDES -I$PS2SDK/ee/include -I$PS2SDK/common/include -I$PS2SDK/ports/include" - if test "$_dynamic_modules" = no ; then - LDFLAGS="$LDFLAGS -mno-crt0 $PS2SDK/ee/startup/crt0.o -T $PS2SDK/ee/startup/linkfile" - fi - LDFLAGS="$LDFLAGS -L$PS2SDK/ee/lib -L$PS2SDK/ports/lib" - LIBS="$LIBS -lmc -lpad -lmouse -lhdd -lpoweroff -lsjpcm -lm -lc -lfileXio -lkernel -lstdc++ " - ;; - psp) - DEFINES="$DEFINES -D__PSP__ -DDISABLE_COMMAND_LINE -DDISABLE_DOSBOX_OPL" - LIBS="$LIBS -lpng -Wl,-Map,mapfile.txt" - ;; - samsungtv) - find_sdlconfig - INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" - LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" - DEFINES="$DEFINES -DSDL_BACKEND -DSAMSUNGTV" - LDFLAGS="$LDFLAGS -shared -fpic" - MODULES="$MODULES backends/platform/sdl" - ;; - sdl) - find_sdlconfig - INCLUDES="$INCLUDES `$_sdlconfig --prefix="$_sdlpath" --cflags`" - LIBS="$LIBS `$_sdlconfig --prefix="$_sdlpath" --libs`" - DEFINES="$DEFINES -DSDL_BACKEND" - ;; - webos) - # There is no sdl-config in the WebOS PDK so we don't use find_sdlconfig here. - LIBS="$LIBS -lSDL" - DEFINES="$DEFINES -DSDL_BACKEND -DWEBOS" - MODULES="$MODULES backends/platform/sdl" - ;; - wii) - DEFINES="$DEFINES -D__WII__ -DGEKKO" - case $_host_os in - gamecube) - LIBS="$LIBS -lgxflux -liso9660 -lfat -logc -ldb" - ;; - *) - LIBS="$LIBS -lgxflux -ldi -liso9660 -ltinysmb -lfat -lwiiuse -lbte -logc -lwiikeyboard -ldb" - ;; - esac - ;; - wince) - INCLUDES="$INCLUDES "'-I$(srcdir) -I$(srcdir)/backends/platform/wince -I$(srcdir)/engines -I$(srcdir)/backends/platform/wince/missing/gcc -I$(srcdir)/backends/platform/wince/CEgui -I$(srcdir)/backends/platform/wince/CEkeys' - LIBS="$LIBS -static -lSDL" - DEFINES="$DEFINES -DSDL_BACKEND" - ;; - *) - echo "support for $_backend backend not implemented in configure script yet" - exit 1 + # Move some libs down here, otherwise some symbols requires by libvorbis aren't found + # during linking stage + LIBS="$LIBS -lc -lgcc -lnosys" ;; esac -MODULES="$MODULES backends/platform/$_backend" - -# -# Do CXXFLAGS now that we know the compiler version -# -if test "$have_gcc" = yes ; then - if test "$_cxx_major" -ge "3" ; then - case $_host_os in - # newlib-based system include files suppress non-C89 function - # declarations under __STRICT_ANSI__ - amigaos* | android | dreamcast | ds | gamecube | mingw* | n64 | psp | ps2 | wii | wince ) - CXXFLAGS="$CXXFLAGS -W -Wno-unused-parameter" - ;; - *) - CXXFLAGS="$CXXFLAGS -ansi -W -Wno-unused-parameter" - ;; - esac - add_line_to_config_mk 'HAVE_GCC3 = 1' - add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP' - fi; - - if test "$_cxx_major" -eq 4 && test "$_cxx_minor" -ge 3 || \ - test "$_cxx_major" -gt 4 ; then - CXXFLAGS="$CXXFLAGS -Wno-empty-body" - else - CXXFLAGS="$CXXFLAGS -Wconversion" - fi; -elif test "$have_icc" = yes ; then - add_line_to_config_mk 'CXX_UPDATE_DEP_FLAG = -MMD -MF "$(*D)/$(DEPDIR)/$(*F).d" -MQ "$@" -MP' -fi; -# Some platforms use certain GNU extensions in header files -case $_host_os in -android | gamecube | psp | wii) - ;; -*) - # ICC does not support pedantic - if test "$have_icc" = no ; then - CXXFLAGS="$CXXFLAGS -pedantic" - fi - ;; -esac # # Engine selection @@ -3281,6 +3304,23 @@ for engine in $_engines; do done # +# Detection of WIP/unstable engines +# +for engine in $_engines; do + engine_build=`get_engine_build $engine` + engine_build_default=`get_engine_build_default $engine` + engine_wip=false + if test $engine_build != no -a $engine_build_default = no ; then + engine_wip=true + set_var _tainted_build "yes" + fi + engine_wip_defname="ENGINE_WIP_`echo $engine | tr '[a-z]' '[A-Z]'`" + add_line_to_config_h "#define $engine_wip_defname $engine_wip" +done + +add_to_config_h_if_yes `get_var _tainted_build` '#define TAINTED_BUILD' + +# # Show which engines ("frontends") are to be built # echo @@ -3305,6 +3345,12 @@ if test -n "$_engines_skipped" ; then s/#/ /g' fi +if test -n "$_engines_built_wip" ; then + echo "WARNING: This ScummVM build contains the following UNSTABLE engines:" + echo $_engines_built_wip | sed 's/@/\ +/g +s/#/ /g' +fi echo echo "Creating config.h" @@ -3327,9 +3373,6 @@ typedef signed $type_1_byte int8; typedef signed $type_2_byte int16; typedef signed $type_4_byte int32; -/* Plugin settings */ -$_def_plugin - #endif /* CONFIG_H */ EOF diff --git a/devtools/README b/devtools/README index b1c0f21cb0..7db5259e7c 100644 --- a/devtools/README +++ b/devtools/README @@ -65,7 +65,7 @@ create_lure (dreammaster) create_project (LordHoto, Littleboy) -------------- - Creates project files for Visual Studio 2005, 2008, 2010 and + Creates project files for Visual Studio 2005, 2008, 2010, 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 diff --git a/devtools/create_hugo/create_hugo.h b/devtools/create_hugo/create_hugo.h index 16d15fe317..e176dbb195 100644 --- a/devtools/create_hugo/create_hugo.h +++ b/devtools/create_hugo/create_hugo.h @@ -144,7 +144,7 @@ struct act1 { // Type 1 - Start an object cycle_t cycle; // Direction to start cycling }; -struct act2 { // Type 2 - Initialise an object coords +struct act2 { // Type 2 - Initialize an object coords byte actType; // The type of action int timer; // Time to set off the action int objNumb; // The object number @@ -168,21 +168,21 @@ struct act4 { // Type 4 - Set new backgrou long newBkgColor; // New color }; -struct act5 { // Type 5 - Initialise an object velocity +struct act5 { // Type 5 - Initialize an object velocity byte actType; // The type of action int timer; // Time to set off the action int objNumb; // The object number int vx, vy; // velocity }; -struct act6 { // Type 6 - Initialise an object carrying +struct act6 { // Type 6 - Initialize an object carrying byte actType; // The type of action int timer; // Time to set off the action int objNumb; // The object number bool carriedFl; // carrying }; -struct act7 { // Type 7 - Initialise an object to hero's coords +struct act7 { // Type 7 - Initialize an object to hero's coords byte actType; // The type of action int timer; // Time to set off the action int objNumb; // The object number @@ -194,14 +194,14 @@ struct act8 { // Type 8 - switch to new sc int screenIndex; // The new screen number }; -struct act9 { // Type 9 - Initialise an object state +struct act9 { // Type 9 - Initialize an object state byte actType; // The type of action int timer; // Time to set off the action int objNumb; // The object number byte newState; // New state }; -struct act10 { // Type 10 - Initialise an object path type +struct act10 { // Type 10 - Initialize an object path type byte actType; // The type of action int timer; // Time to set off the action int objNumb; // The object number @@ -290,7 +290,7 @@ struct act21 { // Type 21 - Gameover. Disa int timer; // Time to set off the action }; -struct act22 { // Type 22 - Initialise an object to hero's coords +struct act22 { // Type 22 - Initialize an object to hero's coords byte actType; // The type of action int timer; // Time to set off the action int objNumb; // The object number diff --git a/devtools/create_hugo/enums.h b/devtools/create_hugo/enums.h index 90cb1d54f3..f721c3d4f5 100644 --- a/devtools/create_hugo/enums.h +++ b/devtools/create_hugo/enums.h @@ -1376,7 +1376,7 @@ enum action_t { // Parameters: INIT_MAZE = 30, // 30 - Start special maze hotspot processing EXIT_MAZE = 31, // 31 - Exit special maze processing INIT_PRIORITY = 32, // 32 - Initialize fbg field - INIT_SCREEN = 33, // 33 - Initialise screen field of object + INIT_SCREEN = 33, // 33 - Initialize screen field of object AGSCHEDULE = 34, // 34 - Global schedule - lasts over new screen REMAPPAL = 35, // 35 - Remappe palette - palette index, color COND_NOUN = 36, // 36 - Conditional on noun appearing in line diff --git a/devtools/create_kyradat/create_kyradat.cpp b/devtools/create_kyradat/create_kyradat.cpp index 6a8e6a0fbe..e4686cc66c 100644 --- a/devtools/create_kyradat/create_kyradat.cpp +++ b/devtools/create_kyradat/create_kyradat.cpp @@ -45,7 +45,7 @@ #include <map> enum { - kKyraDatVersion = 73 + kKyraDatVersion = 74 }; const ExtractFilename extractFilenames[] = { diff --git a/devtools/create_kyradat/games.cpp b/devtools/create_kyradat/games.cpp index f65ff14e1e..76d5d70186 100644 --- a/devtools/create_kyradat/games.cpp +++ b/devtools/create_kyradat/games.cpp @@ -107,7 +107,7 @@ const Game lolGames[] = { // DOS CD (multi language version, with no language specific strings) { kLol, { EN_ANY, FR_FRA, DE_DEU }, kPlatformPC, kTalkieVersion, { "9d1778314de80598c0b0d032e2a1a1cf", "263998ec600afca1cc7b935c473df670" } }, - + { kLol, { IT_ITA, FR_FRA, DE_DEU }, kPlatformPC, kTalkieVersion, { "9d1778314de80598c0b0d032e2a1a1cf", "f2af366e00f79dbf832fa19701d71ed9" } }, // Italian fan translation GAME_DUMMY_ENTRY }; diff --git a/devtools/create_kyradat/module.mk b/devtools/create_kyradat/module.mk index fb458b43ff..4241f82e34 100644 --- a/devtools/create_kyradat/module.mk +++ b/devtools/create_kyradat/module.mk @@ -14,5 +14,8 @@ MODULE_OBJS := \ # Set the name of the executable TOOL_EXECUTABLE := create_kyradat +# Link against common code (for scumm_stricmp) +TOOL_DEPS := common/libcommon.a + # Include common rules include $(srcdir)/rules.mk diff --git a/devtools/create_lure/create_lure_dat.cpp b/devtools/create_lure/create_lure_dat.cpp index c55252410c..c53a6bf81d 100644 --- a/devtools/create_lure/create_lure_dat.cpp +++ b/devtools/create_lure/create_lure_dat.cpp @@ -1920,7 +1920,7 @@ bool validate_executable() { dataSegment = 0xAD20; printf("Detected Spanish version\n"); } else { - printf("Lure executable version not recognised. Checksum = %xh\n", sumTotal); + printf("Lure executable version not recognized. Checksum = %xh\n", sumTotal); return false; } diff --git a/devtools/create_mads/parser.cpp b/devtools/create_mads/parser.cpp index 2daaff0d33..0c6df43046 100644 --- a/devtools/create_mads/parser.cpp +++ b/devtools/create_mads/parser.cpp @@ -237,10 +237,10 @@ void close_source_file() { } /** - * Initialises the scanner + * Initializes the scanner */ void init_scanner(const char *name) { - // Initialise character table + // Initialize character table for (int i = 0; i < 256; ++i) char_table[i] = SPECIAL; for (int i = '0'; i <= '9'; ++i) char_table[i] = DIGIT; for (int i = 'A'; i <= 'Z'; ++i) char_table[i] = LETTER; @@ -265,7 +265,7 @@ void quit_scanner() { /** - * Initialises the output + * Initializes the output */ void init_output(const char *destFilename) { dest_file = fopen(destFilename, "wb"); diff --git a/devtools/create_project/codeblocks/create_project.cbp b/devtools/create_project/codeblocks/create_project.cbp index 25b12d8cc2..1b592d5e96 100644 --- a/devtools/create_project/codeblocks/create_project.cbp +++ b/devtools/create_project/codeblocks/create_project.cbp @@ -47,6 +47,8 @@ <Unit filename="..\msvc.h" /> <Unit filename="..\visualstudio.cpp" /> <Unit filename="..\visualstudio.h" /> + <Unit filename="..\xcode.cpp" /> + <Unit filename="..\xcode.h" /> <Extensions> <code_completion /> <envvars /> diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp index b75b22a290..29bc5bfcd5 100644 --- a/devtools/create_project/create_project.cpp +++ b/devtools/create_project/create_project.cpp @@ -28,11 +28,12 @@ #include "config.h" #include "create_project.h" -#include "codeblocks.h" +#include "codeblocks.h" #include "msvc.h" #include "visualstudio.h" #include "msbuild.h" +#include "xcode.h" #include <fstream> #include <iostream> @@ -107,13 +108,14 @@ typedef std::list<FSNode> FileList; enum ProjectType { kProjectNone, kProjectCodeBlocks, - kProjectMSVC + kProjectMSVC, + kProjectXcode }; int main(int argc, char *argv[]) { #ifndef USE_WIN32_API // Initialize random number generator for UUID creation - std::srand(std::time(0)); + std::srand((uint)std::time(0)); #endif if (argc < 2) { @@ -175,6 +177,14 @@ int main(int argc, char *argv[]) { projectType = kProjectMSVC; + } else if (!std::strcmp(argv[i], "--xcode")) { + if (projectType != kProjectNone) { + std::cerr << "ERROR: You cannot pass more than one project type!\n"; + return -1; + } + + projectType = kProjectXcode; + } else if (!std::strcmp(argv[i], "--msvc-version")) { if (i + 1 >= argc) { std::cerr << "ERROR: Missing \"version\" parameter for \"--msvc-version\"!\n"; @@ -463,6 +473,32 @@ int main(int argc, char *argv[]) { provider = new CreateProjectTool::MSBuildProvider(globalWarnings, projectWarnings, msvcVersion); break; + + case kProjectXcode: + //////////////////////////////////////////////////////////////////////////// + // Xcode is also using GCC behind the scenes. See Code::Blocks comment + // for info on all warnings + //////////////////////////////////////////////////////////////////////////// + globalWarnings.push_back("-Wall"); + globalWarnings.push_back("-Wno-long-long"); + globalWarnings.push_back("-Wno-multichar"); + globalWarnings.push_back("-Wno-unknown-pragmas"); + globalWarnings.push_back("-Wno-reorder"); + globalWarnings.push_back("-Wpointer-arith"); + globalWarnings.push_back("-Wcast-qual"); + globalWarnings.push_back("-Wcast-align"); + globalWarnings.push_back("-Wshadow"); + globalWarnings.push_back("-Wimplicit"); + globalWarnings.push_back("-Wnon-virtual-dtor"); + globalWarnings.push_back("-Wwrite-strings"); + // The following are not warnings at all... We should consider adding them to + // a different list of parameters. + globalWarnings.push_back("-fno-rtti"); + globalWarnings.push_back("-fno-exceptions"); + globalWarnings.push_back("-fcheck-new"); + + provider = new CreateProjectTool::XCodeProvider(globalWarnings, projectWarnings); + break; } provider->createProject(setup); @@ -501,6 +537,7 @@ void displayHelp(const char *exe) { "Project specific settings:\n" " --codeblock build Code::Blocks project files\n" " --msvc build Visual Studio project files\n" + " --xcode build XCode project files\n" " --file-prefix prefix allow overwriting of relative file prefix in the\n" " MSVC project files. By default the prefix is the\n" " \"path\\to\\source\" argument\n" @@ -636,7 +673,7 @@ bool setEngineBuildState(const std::string &name, EngineDescList &engines, bool if (engine != engines.end()) { engine->enable = enable; - // When we disable an einge, we also need to disable all the sub engines. + // When we disable an engine, we also need to disable all the sub engines. if (!enable && !engine->subEngines.empty()) { for (StringList::const_iterator j = engine->subEngines.begin(); j != engine->subEngines.end(); ++j) { EngineDescList::iterator subEngine = std::find(engines.begin(), engines.end(), *j); @@ -729,7 +766,6 @@ const Feature s_features[] = { { "flac", "USE_FLAC", "libFLAC_static", true, "FLAC support" }, { "png", "USE_PNG", "libpng", true, "libpng support" }, { "theora", "USE_THEORADEC", "libtheora_static", true, "Theora decoding support" }, - { "mpeg2", "USE_MPEG2", "libmpeg2", false, "mpeg2 codec for cutscenes" }, // Feature flags { "scalers", "USE_SCALERS", "", true, "Scalers" }, @@ -738,7 +774,6 @@ const Feature s_features[] = { { "mt32emu", "USE_MT32EMU", "", true, "integrated MT-32 emulator" }, { "nasm", "USE_NASM", "", true, "IA-32 assembly support" }, // This feature is special in the regard, that it needs additional handling. { "opengl", "USE_OPENGL", "opengl32", true, "OpenGL support" }, - { "indeo3", "USE_INDEO3", "", true, "Indeo3 codec support"}, { "translation", "USE_TRANSLATION", "", true, "Translation support" }, { "vkeybd", "ENABLE_VKEYBD", "", false, "Virtual keyboard support"}, { "langdetect", "USE_DETECTLANG", "", true, "System language detection support" } // This feature actually depends on "translation", there diff --git a/devtools/create_project/module.mk b/devtools/create_project/module.mk index 4238452c5d..0db070fa7c 100644 --- a/devtools/create_project/module.mk +++ b/devtools/create_project/module.mk @@ -6,11 +6,17 @@ MODULE_OBJS := \ codeblocks.o \ msvc.o \ visualstudio.o \ - msbuild.o + msbuild.o \ + xcode.o # Set the name of the executable TOOL_EXECUTABLE := create_project +# Set custom build flags for create_project.o: It uses C++ iostreams, +# which make use of global constructors. So we don't want warnings for +# that. +$(srcdir)/devtools/create_project/create_project.o: CXXFLAGS:=$(filter-out -Wglobal-constructors,$(CXXFLAGS)) + # Include common rules include $(srcdir)/rules.mk diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp index f8ce80acfd..bdbc0a4074 100644 --- a/devtools/create_project/msbuild.cpp +++ b/devtools/create_project/msbuild.cpp @@ -373,6 +373,7 @@ void MSBuildProvider::createBuildProp(const BuildSetup &setup, bool isRelease, b "\t\t\t<StringPooling>true</StringPooling>\n" "\t\t\t<BufferSecurityCheck>false</BufferSecurityCheck>\n" "\t\t\t<DebugInformationFormat></DebugInformationFormat>\n" + "\t\t\t<RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n" "\t\t\t<EnablePREfast>" << (enableAnalysis ? "true" : "false") << "</EnablePREfast>\n" "\t\t</ClCompile>\n" "\t\t<Link>\n" diff --git a/devtools/create_project/msvc10/create_project.vcxproj b/devtools/create_project/msvc10/create_project.vcxproj index bf5e415b5d..3d7f8fdd3d 100644 --- a/devtools/create_project/msvc10/create_project.vcxproj +++ b/devtools/create_project/msvc10/create_project.vcxproj @@ -58,10 +58,12 @@ <TargetMachine>MachineX86</TargetMachine> </Link> <PostBuildEvent> - <Command>xcopy /Y $(TargetPath) $(SolutionDir)\..\..\..\dists\msvc10\ + <Command>@echo off +xcopy /Y $(TargetPath) $(SolutionDir)\..\..\..\dists\msvc10\ xcopy /Y $(TargetPath) $(SolutionDir)\..\..\..\dists\msvc9\ xcopy /Y $(TargetPath) $(SolutionDir)\..\..\..\dists\msvc8\ -xcopy /Y $(TargetPath) $(SolutionDir)\..\..\..\dists\codeblocks\</Command> +xcopy /Y $(TargetPath) $(SolutionDir)\..\..\..\dists\codeblocks\ +xcopy /Y $(TargetPath) $(SolutionDir)\..\..\..\dists\iphone\</Command> </PostBuildEvent> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> @@ -98,6 +100,7 @@ xcopy /Y $(TargetPath) $(SolutionDir)\..\..\..\dists\codeblocks\</Command> <ClCompile Include="..\msbuild.cpp" /> <ClCompile Include="..\msvc.cpp" /> <ClCompile Include="..\visualstudio.cpp" /> + <ClCompile Include="..\xcode.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="..\codeblocks.h" /> @@ -106,6 +109,7 @@ xcopy /Y $(TargetPath) $(SolutionDir)\..\..\..\dists\codeblocks\</Command> <ClInclude Include="..\msbuild.h" /> <ClInclude Include="..\msvc.h" /> <ClInclude Include="..\visualstudio.h" /> + <ClInclude Include="..\xcode.h" /> </ItemGroup> <ItemGroup> <None Include="..\scripts\installer.vbs" /> diff --git a/devtools/create_project/msvc10/create_project.vcxproj.filters b/devtools/create_project/msvc10/create_project.vcxproj.filters index b5e870824e..5ecd6c3dde 100644 --- a/devtools/create_project/msvc10/create_project.vcxproj.filters +++ b/devtools/create_project/msvc10/create_project.vcxproj.filters @@ -27,6 +27,9 @@ <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> @@ -47,6 +50,9 @@ <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"> diff --git a/devtools/create_project/msvc8/create_project.vcproj b/devtools/create_project/msvc8/create_project.vcproj index 639b23d6e7..6e9e0d5cb0 100644 --- a/devtools/create_project/msvc8/create_project.vcproj +++ b/devtools/create_project/msvc8/create_project.vcproj @@ -184,6 +184,10 @@ RelativePath="..\visualstudio.cpp" > </File> + <File + RelativePath="..\xcode.cpp" + > + </File> </Filter> <Filter Name="Header Files" @@ -214,6 +218,10 @@ RelativePath="..\visualstudio.h" > </File> + <File + RelativePath="..\xcode.h" + > + </File> </Filter> <Filter Name="Scripts" diff --git a/devtools/create_project/msvc9/create_project.vcproj b/devtools/create_project/msvc9/create_project.vcproj index f56cbd711c..dc914248fb 100644 --- a/devtools/create_project/msvc9/create_project.vcproj +++ b/devtools/create_project/msvc9/create_project.vcproj @@ -185,6 +185,10 @@ RelativePath="..\visualstudio.cpp" > </File> + <File + RelativePath="..\xcode.cpp" + > + </File> </Filter> <Filter Name="Header Files" @@ -215,6 +219,10 @@ RelativePath="..\visualstudio.h" > </File> + <File + RelativePath="..\xcode.h" + > + </File> </Filter> <Filter Name="Scripts" diff --git a/devtools/create_project/visualstudio.cpp b/devtools/create_project/visualstudio.cpp index 4fadfd2509..b4c2b46ba4 100644 --- a/devtools/create_project/visualstudio.cpp +++ b/devtools/create_project/visualstudio.cpp @@ -269,6 +269,7 @@ void VisualStudioProvider::createBuildProp(const BuildSetup &setup, bool isRelea "\t\tStringPooling=\"true\"\n" "\t\tBufferSecurityCheck=\"false\"\n" "\t\tDebugInformationFormat=\"0\"\n" + "\t\tRuntimeLibrary=\"0\"\n" "\t\tAdditionalOption=\"" << (enableAnalysis ? "/analyze" : "") << "\"\n" "\t/>\n" "\t<Tool\n" diff --git a/devtools/create_project/xcode.cpp b/devtools/create_project/xcode.cpp new file mode 100755 index 0000000000..77ac88f85d --- /dev/null +++ b/devtools/create_project/xcode.cpp @@ -0,0 +1,933 @@ +/* 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 "xcode.h" + +#include <fstream> +#include <algorithm> + +#if defined(_WIN32) || defined(WIN32) +#include <windows.h> +#else +#include <sys/param.h> +#include <sys/stat.h> +#include <dirent.h> +#include <errno.h> +#endif + +namespace CreateProjectTool { + +#define DEBUG_XCODE_HASH 0 + +#define ADD_DEFINE(defines, name) \ + defines.push_back(name); + +#define ADD_SETTING(config, key, value) \ + config.settings[key] = Setting(value, "", SettingsNoQuote); + +#define ADD_SETTING_ORDER(config, key, value, order) \ + config.settings[key] = Setting(value, "", SettingsNoQuote, 0, order); + +#define ADD_SETTING_ORDER_NOVALUE(config, key, comment, order) \ + config.settings[key] = Setting("", comment, SettingsNoValue, 0, order); + +#define ADD_SETTING_QUOTE(config, key, value) \ + config.settings[key] = Setting(value); + +#define ADD_SETTING_QUOTE_VAR(config, key, value) \ + config.settings[key] = Setting(value, "", SettingsQuoteVariable); + +#define ADD_SETTING_LIST(config, key, values, flags, indent) \ + config.settings[key] = Setting(values, flags, indent); + +#define REMOVE_SETTING(config, key) \ + config.settings.erase(key); + +#define ADD_BUILD_FILE(id, name, comment) { \ + Object *buildFile = new Object(this, id, name, "PBXBuildFile", "PBXBuildFile", comment); \ + buildFile->addProperty("fileRef", getHash(name), name, SettingsNoValue); \ + _buildFile.add(buildFile); \ + _buildFile.flags = SettingsSingleItem; \ +} + +#define ADD_FILE_REFERENCE(name, properties) { \ + Object *fileRef = new Object(this, name, name, "PBXFileReference", "PBXFileReference", name); \ + if (!properties.fileEncoding.empty()) fileRef->addProperty("fileEncoding", properties.fileEncoding, "", SettingsNoValue); \ + if (!properties.lastKnownFileType.empty()) fileRef->addProperty("lastKnownFileType", properties.lastKnownFileType, "", SettingsNoValue); \ + if (!properties.fileName.empty()) fileRef->addProperty("name", properties.fileName, "", SettingsNoValue); \ + if (!properties.filePath.empty()) fileRef->addProperty("path", properties.filePath, "", SettingsNoValue); \ + if (!properties.sourceTree.empty()) fileRef->addProperty("sourceTree", properties.sourceTree, "", SettingsNoValue); \ + _fileReference.add(fileRef); \ + _fileReference.flags = SettingsSingleItem; \ +} + +XCodeProvider::XCodeProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version) + : ProjectProvider(global_warnings, project_warnings, version) { +} + +void XCodeProvider::createWorkspace(const BuildSetup &setup) { + // Create project folder + std::string workspace = setup.outputDir + '/' + "scummvm.xcodeproj"; + +#if defined(_WIN32) || defined(WIN32) + if (!CreateDirectory(workspace.c_str(), NULL)) + if (GetLastError() != ERROR_ALREADY_EXISTS) + error("Could not create folder \"" + setup.outputDir + '/' + "scummvm.xcodeproj\""); +#else + if (mkdir(workspace.c_str(), 0777) == -1) { + if (errno == EEXIST) { + // Try to open as a folder (might be a file / symbolic link) + DIR *dirp = opendir(workspace.c_str()); + if (dirp == NULL) { + error("Could not create folder \"" + setup.outputDir + '/' + "scummvm.xcodeproj\""); + } else { + // The folder exists, just close the stream and return + closedir(dirp); + } + } else { + error("Could not create folder \"" + setup.outputDir + '/' + "scummvm.xcodeproj\""); + } + } +#endif + + // Setup global objects + setupDefines(setup); + _targets.push_back("ScummVM-iPhone"); + _targets.push_back("ScummVM-OS X"); + _targets.push_back("ScummVM-Simulator"); + + setupCopyFilesBuildPhase(); + setupFrameworksBuildPhase(); + setupNativeTarget(); + setupProject(); + setupResourcesBuildPhase(); + setupBuildConfiguration(); +} + +// We are done with constructing all the object graph and we got through every project, output the main project file +// (this is kind of a hack since other providers use separate project files) +void XCodeProvider::createOtherBuildFiles(const BuildSetup &setup) { + // This needs to be done at the end when all build files have been accounted for + setupSourcesBuildPhase(); + + ouputMainProjectFile(setup); +} + +// Store information about a project here, for use at the end +void XCodeProvider::createProjectFile(const std::string &, const std::string &, const BuildSetup &setup, const std::string &moduleDir, + const StringList &includeList, const StringList &excludeList) { + std::string modulePath; + if (!moduleDir.compare(0, setup.srcDir.size(), setup.srcDir)) { + modulePath = moduleDir.substr(setup.srcDir.size()); + if (!modulePath.empty() && modulePath.at(0) == '/') + modulePath.erase(0, 1); + } + + std::ofstream project; + if (modulePath.size()) + addFilesToProject(moduleDir, project, includeList, excludeList, setup.filePrefix + '/' + modulePath); + else + addFilesToProject(moduleDir, project, includeList, excludeList, setup.filePrefix); +} + +////////////////////////////////////////////////////////////////////////// +// Main Project file +////////////////////////////////////////////////////////////////////////// +void XCodeProvider::ouputMainProjectFile(const BuildSetup &setup) { + std::ofstream project((setup.outputDir + '/' + "scummvm.xcodeproj" + '/' + "project.pbxproj").c_str()); + if (!project) + error("Could not open \"" + setup.outputDir + '/' + "scummvm.xcodeproj" + '/' + "project.pbxproj\" for writing"); + + ////////////////////////////////////////////////////////////////////////// + // Header + project << "// !$*UTF8*$!\n" + "{\n" + "\t" << writeSetting("archiveVersion", "1", "", SettingsNoQuote) << ";\n" + "\tclasses = {\n" + "\t};\n" + "\t" << writeSetting("objectVersion", "46", "", SettingsNoQuote) << ";\n" + "\tobjects = {\n"; + + ////////////////////////////////////////////////////////////////////////// + // List of objects + project << _buildFile.toString(); + project << _copyFilesBuildPhase.toString(); + project << _fileReference.toString(); + project << _frameworksBuildPhase.toString(); + project << _groups.toString(); + project << _nativeTarget.toString(); + project << _project.toString(); + project << _resourcesBuildPhase.toString(); + project << _sourcesBuildPhase.toString(); + project << _buildConfiguration.toString(); + project << _configurationList.toString(); + + ////////////////////////////////////////////////////////////////////////// + // Footer + project << "\t};\n" + "\t" << writeSetting("rootObject", getHash("PBXProject"), "Project object", SettingsNoQuote) << ";\n" + "}\n"; + +} + +////////////////////////////////////////////////////////////////////////// +// Files +////////////////////////////////////////////////////////////////////////// +void XCodeProvider::writeFileListToProject(const FileNode &dir, std::ofstream &projectFile, const int indentation, + const StringList &duplicate, const std::string &objPrefix, const std::string &filePrefix) { + + // Add comments for shared lists + _buildFile.comment = "PBXBuildFile"; + _fileReference.comment = "PBXFileReference"; + + // Init root group + _groups.comment = "PBXGroup"; + Object *group = new Object(this, "PBXGroup", "PBXGroup", "PBXGroup", "", ""); + + //Property children; + //children.flags = SettingsAsList; + //group->properties["children"] = children; + group->addProperty("children", "", "", SettingsNoValue|SettingsAsList); + + group->addProperty("sourceTree", "<group>", "", SettingsNoValue|SettingsQuoteVariable); + + _groups.add(group); + + // TODO Add files +} + +////////////////////////////////////////////////////////////////////////// +// Setup functions +////////////////////////////////////////////////////////////////////////// +void XCodeProvider::setupCopyFilesBuildPhase() { + // Nothing to do here +} + +/** + * Sets up the frameworks build phase. + * + * (each native target has different build rules) + */ +void XCodeProvider::setupFrameworksBuildPhase() { + _frameworksBuildPhase.comment = "PBXFrameworksBuildPhase"; + + // Setup framework file properties + std::map<std::string, FileProperty> properties; + + // Frameworks + properties["ApplicationServices.framework"] = FileProperty("wrapper.framework", "ApplicationServices.framework", "System/Library/Frameworks/ApplicationServices.framework", "SDKROOT"); + properties["AudioToolbox.framework"] = FileProperty("wrapper.framework", "AudioToolbox.framework", "System/Library/Frameworks/AudioToolbox.framework", "SDKROOT"); + properties["AudioUnit.framework"] = FileProperty("wrapper.framework", "AudioUnit.framework", "System/Library/Frameworks/AudioUnit.framework", "SDKROOT"); + properties["Carbon.framework"] = FileProperty("wrapper.framework", "Carbon.framework", "System/Library/Frameworks/Carbon.framework", "SDKROOT"); + properties["Cocoa.framework"] = FileProperty("wrapper.framework", "Cocoa.framework", "System/Library/Frameworks/Cocoa.framework", "SDKROOT"); + properties["CoreAudio.framework"] = FileProperty("wrapper.framework", "CoreAudio.framework", "System/Library/Frameworks/CoreAudio.framework", "SDKROOT"); + properties["CoreFoundation.framework"] = FileProperty("wrapper.framework", "CoreFoundation.framework", "System/Library/Frameworks/CoreFoundation.framework", "SDKROOT"); + properties["CoreMIDI.framework"] = FileProperty("wrapper.framework", "CoreMIDI.framework", "System/Library/Frameworks/CoreMIDI.framework", "SDKROOT"); + properties["Foundation.framework"] = FileProperty("wrapper.framework", "Foundation.framework", "System/Library/Frameworks/Foundation.framework", "SDKROOT"); + properties["IOKit.framework"] = FileProperty("wrapper.framework", "IOKit.framework", "System/Library/Frameworks/IOKit.framework", "SDKROOT"); + properties["OpenGLES.framework"] = FileProperty("wrapper.framework", "OpenGLES.framework", "System/Library/Frameworks/OpenGLES.framework", "SDKROOT"); + properties["QuartzCore.framework"] = FileProperty("wrapper.framework", "QuartzCore.framework", "System/Library/Frameworks/QuartzCore.framework", "SDKROOT"); + properties["QuickTime.framework"] = FileProperty("wrapper.framework", "QuickTime.framework", "System/Library/Frameworks/QuickTime.framework", "SDKROOT"); + properties["UIKit.framework"] = FileProperty("wrapper.framework", "UIKit.framework", "System/Library/Frameworks/UIKit.framework", "SDKROOT"); + + // Local libraries + properties["libFLAC.a"] = FileProperty("archive.ar", "libFLAC.a", "lib/libFLAC.a", "\"<group>\""); + properties["libmad.a"] = FileProperty("archive.ar", "libmad.a", "lib/libmad.a", "\"<group>\""); + //properties["libmpeg2.a"] = FileProperty("archive.ar", "libmpeg2.a", "lib/libmpeg2.a", "\"<group>\""); + properties["libvorbisidec.a"] = FileProperty("archive.ar", "libvorbisidec.a", "lib/libvorbisidec.a", "\"<group>\""); + + ////////////////////////////////////////////////////////////////////////// + // iPhone + Object *framework_iPhone = new Object(this, "PBXFrameworksBuildPhase_" + _targets[0], "PBXFrameworksBuildPhase", "PBXFrameworksBuildPhase", "", "Frameworks"); + + framework_iPhone->addProperty("buildActionMask", "2147483647", "", SettingsNoValue); + framework_iPhone->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue); + + // List of frameworks + Property iPhone_files; + iPhone_files.hasOrder = true; + iPhone_files.flags = SettingsAsList; + + ValueList frameworks_iPhone; + frameworks_iPhone.push_back("CoreAudio.framework"); + frameworks_iPhone.push_back("CoreFoundation.framework"); + frameworks_iPhone.push_back("Foundation.framework"); + frameworks_iPhone.push_back("UIKit.framework"); + frameworks_iPhone.push_back("AudioToolbox.framework"); + frameworks_iPhone.push_back("QuartzCore.framework"); + frameworks_iPhone.push_back("libmad.a"); + //frameworks_iPhone.push_back("libmpeg2.a"); + frameworks_iPhone.push_back("libFLAC.a"); + frameworks_iPhone.push_back("libvorbisidec.a"); + frameworks_iPhone.push_back("OpenGLES.framework"); + + int order = 0; + for (ValueList::iterator framework = frameworks_iPhone.begin(); framework != frameworks_iPhone.end(); framework++) { + std::string id = "Frameworks_" + *framework + "_iphone"; + std::string comment = *framework + " in Frameworks"; + + ADD_SETTING_ORDER_NOVALUE(iPhone_files, getHash(id), comment, order++); + ADD_BUILD_FILE(id, *framework, comment); + ADD_FILE_REFERENCE(*framework, properties[*framework]); + } + + framework_iPhone->properties["files"] = iPhone_files; + + _frameworksBuildPhase.add(framework_iPhone); + + ////////////////////////////////////////////////////////////////////////// + // ScummVM-OS X + Object *framework_OSX = new Object(this, "PBXFrameworksBuildPhase_" + _targets[1], "PBXFrameworksBuildPhase", "PBXFrameworksBuildPhase", "", "Frameworks"); + + framework_OSX->addProperty("buildActionMask", "2147483647", "", SettingsNoValue); + framework_OSX->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue); + + // List of frameworks + Property osx_files; + osx_files.hasOrder = true; + osx_files.flags = SettingsAsList; + + ValueList frameworks_osx; + frameworks_osx.push_back("CoreFoundation.framework"); + frameworks_osx.push_back("Foundation.framework"); + frameworks_osx.push_back("AudioToolbox.framework"); + frameworks_osx.push_back("QuickTime.framework"); + frameworks_osx.push_back("CoreMIDI.framework"); + frameworks_osx.push_back("CoreAudio.framework"); + frameworks_osx.push_back("QuartzCore.framework"); + frameworks_osx.push_back("Carbon.framework"); + frameworks_osx.push_back("ApplicationServices.framework"); + frameworks_osx.push_back("IOKit.framework"); + frameworks_osx.push_back("Cocoa.framework"); + frameworks_osx.push_back("AudioUnit.framework"); + + order = 0; + for (ValueList::iterator framework = frameworks_osx.begin(); framework != frameworks_osx.end(); framework++) { + std::string id = "Frameworks_" + *framework + "_osx"; + std::string comment = *framework + " in Frameworks"; + + ADD_SETTING_ORDER_NOVALUE(osx_files, getHash(id), comment, order++); + ADD_BUILD_FILE(id, *framework, comment); + ADD_FILE_REFERENCE(*framework, properties[*framework]); + } + + framework_OSX->properties["files"] = osx_files; + + _frameworksBuildPhase.add(framework_OSX); + + ////////////////////////////////////////////////////////////////////////// + // Simulator + Object *framework_simulator = new Object(this, "PBXFrameworksBuildPhase_" + _targets[2], "PBXFrameworksBuildPhase", "PBXFrameworksBuildPhase", "", "Frameworks"); + + framework_simulator->addProperty("buildActionMask", "2147483647", "", SettingsNoValue); + framework_simulator->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue); + + // List of frameworks + Property simulator_files; + simulator_files.hasOrder = true; + simulator_files.flags = SettingsAsList; + + ValueList frameworks_simulator; + frameworks_simulator.push_back("CoreAudio.framework"); + frameworks_simulator.push_back("CoreFoundation.framework"); + frameworks_simulator.push_back("Foundation.framework"); + frameworks_simulator.push_back("UIKit.framework"); + frameworks_simulator.push_back("AudioToolbox.framework"); + frameworks_simulator.push_back("QuartzCore.framework"); + frameworks_simulator.push_back("OpenGLES.framework"); + + order = 0; + for (ValueList::iterator framework = frameworks_simulator.begin(); framework != frameworks_simulator.end(); framework++) { + std::string id = "Frameworks_" + *framework + "_simulator"; + std::string comment = *framework + " in Frameworks"; + + ADD_SETTING_ORDER_NOVALUE(simulator_files, getHash(id), comment, order++); + ADD_BUILD_FILE(id, *framework, comment); + ADD_FILE_REFERENCE(*framework, properties[*framework]); + } + + framework_simulator->properties["files"] = simulator_files; + + _frameworksBuildPhase.add(framework_simulator); +} + +void XCodeProvider::setupNativeTarget() { + _nativeTarget.comment = "PBXNativeTarget"; + + // Output native target section + for (unsigned int i = 0; i < _targets.size(); i++) { + Object *target = new Object(this, "PBXNativeTarget_" + _targets[i], "PBXNativeTarget", "PBXNativeTarget", "", _targets[i]); + + target->addProperty("buildConfigurationList", getHash("XCConfigurationList_" + _targets[i]), "Build configuration list for PBXNativeTarget \"" + _targets[i] + "\"", SettingsNoValue); + + Property buildPhases; + buildPhases.hasOrder = true; + buildPhases.flags = SettingsAsList; + buildPhases.settings[getHash("PBXResourcesBuildPhase_" + _targets[i])] = Setting("", "Resources", SettingsNoValue, 0, 0); + buildPhases.settings[getHash("PBXSourcesBuildPhase_" + _targets[i])] = Setting("", "Sources", SettingsNoValue, 0, 1); + buildPhases.settings[getHash("PBXFrameworksBuildPhase_" + _targets[i])] = Setting("", "Frameworks", SettingsNoValue, 0, 2); + target->properties["buildPhases"] = buildPhases; + + target->addProperty("buildRules", "", "", SettingsNoValue|SettingsAsList); + + target->addProperty("dependencies", "", "", SettingsNoValue|SettingsAsList); + + target->addProperty("name", _targets[i], "", SettingsNoValue|SettingsQuoteVariable); + target->addProperty("productName", "scummvm", "", SettingsNoValue); + target->addProperty("productReference", getHash("PBXFileReference_ScummVM.app_" + _targets[i]), "ScummVM.app", SettingsNoValue); + target->addProperty("productType", "com.apple.product-type.application", "", SettingsNoValue|SettingsQuoteVariable); + + _nativeTarget.add(target); + } +} + +void XCodeProvider::setupProject() { + _project.comment = "PBXProject"; + + Object *project = new Object(this, "PBXProject", "PBXProject", "PBXProject", "", "Project object"); + + project->addProperty("buildConfigurationList", getHash("XCConfigurationList_scummvm"), "Build configuration list for PBXProject \"scummvm\"", SettingsNoValue); + project->addProperty("compatibilityVersion", "Xcode 3.2", "", SettingsNoValue|SettingsQuoteVariable); + project->addProperty("developmentRegion", "English", "", SettingsNoValue); + project->addProperty("hasScannedForEncodings", "1", "", SettingsNoValue); + + // List of known regions + Property regions; + regions.flags = SettingsAsList; + ADD_SETTING_ORDER_NOVALUE(regions, "English", "", 0); + ADD_SETTING_ORDER_NOVALUE(regions, "Japanese", "", 1); + ADD_SETTING_ORDER_NOVALUE(regions, "French", "", 2); + ADD_SETTING_ORDER_NOVALUE(regions, "German", "", 3); + project->properties["knownRegions"] = regions; + + project->addProperty("mainGroup", getHash("PBXGroup_CustomTemplate"), "CustomTemplate", SettingsNoValue); + project->addProperty("projectDirPath", "", "", SettingsNoValue|SettingsQuoteVariable); + project->addProperty("projectRoot", "", "", SettingsNoValue|SettingsQuoteVariable); + + // List of targets + Property targets; + targets.flags = SettingsAsList; + targets.settings[getHash("PBXNativeTarget_" + _targets[0])] = Setting("", _targets[0], SettingsNoValue, 0, 0); + targets.settings[getHash("PBXNativeTarget_" + _targets[1])] = Setting("", _targets[1], SettingsNoValue, 0, 1); + targets.settings[getHash("PBXNativeTarget_" + _targets[2])] = Setting("", _targets[2], SettingsNoValue, 0, 2); + project->properties["targets"] = targets; + + _project.add(project); +} + +void XCodeProvider::setupResourcesBuildPhase() { + _resourcesBuildPhase.comment = "PBXResourcesBuildPhase"; + + // Setup resource file properties + std::map<std::string, FileProperty> properties; + properties["scummclassic.zip"] = FileProperty("archive.zip", "", "scummclassic.zip", "\"<group>\""); + properties["scummmodern.zip"] = FileProperty("archive.zip", "", "scummmodern.zip", "\"<group>\""); + + properties["kyra.dat"] = FileProperty("file", "", "kyra.dat", "\"<group>\""); + properties["lure.dat"] = FileProperty("file", "", "lure.dat", "\"<group>\""); + properties["queen.tbl"] = FileProperty("file", "", "queen.tbl", "\"<group>\""); + properties["sky.cpt"] = FileProperty("file", "", "sky.cpt", "\"<group>\""); + properties["drascula.dat"] = FileProperty("file", "", "drascula.dat", "\"<group>\""); + properties["hugo.dat"] = FileProperty("file", "", "hugo.dat", "\"<group>\""); + properties["m4.dat"] = FileProperty("file", "", "m4.dat", "\"<group>\""); + properties["teenagent.dat"] = FileProperty("file", "", "teenagent.dat", "\"<group>\""); + properties["toon.dat"] = FileProperty("file", "", "toon.dat", "\"<group>\""); + + properties["Default.png"] = FileProperty("image.png", "", "Default.png", "\"<group>\""); + properties["icon.png"] = FileProperty("image.png", "", "icon.png", "\"<group>\""); + properties["icon-72.png"] = FileProperty("image.png", "", "icon-72.png", "\"<group>\""); + properties["icon4.png"] = FileProperty("image.png", "", "icon4.png", "\"<group>\""); + + // Same as for containers: a rule for each native target + for (unsigned int i = 0; i < _targets.size(); i++) { + Object *resource = new Object(this, "PBXResourcesBuildPhase_" + _targets[i], "PBXResourcesBuildPhase", "PBXResourcesBuildPhase", "", "Resources"); + + resource->addProperty("buildActionMask", "2147483647", "", SettingsNoValue); + + // Add default files + Property files; + files.hasOrder = true; + files.flags = SettingsAsList; + + ValueList files_list; + files_list.push_back("scummclassic.zip"); + files_list.push_back("scummmodern.zip"); + files_list.push_back("kyra.dat"); + files_list.push_back("lure.dat"); + files_list.push_back("queen.tbl"); + files_list.push_back("sky.cpt"); + files_list.push_back("Default.png"); + files_list.push_back("icon.png"); + files_list.push_back("icon-72.png"); + files_list.push_back("icon4.png"); + files_list.push_back("drascula.dat"); + files_list.push_back("hugo.dat"); + files_list.push_back("m4.dat"); + files_list.push_back("teenagent.dat"); + files_list.push_back("toon.dat"); + + int order = 0; + for (ValueList::iterator file = files_list.begin(); file != files_list.end(); file++) { + std::string id = "PBXResources_" + *file; + std::string comment = *file + " in Resources"; + + ADD_SETTING_ORDER_NOVALUE(files, getHash(id), comment, order++); + // TODO Fix crash when adding build file for data + //ADD_BUILD_FILE(id, *file, comment); + ADD_FILE_REFERENCE(*file, properties[*file]); + } + + // Add custom files depending on the target + if (_targets[i] == "ScummVM-OS X") { + files.settings[getHash("PBXResources_scummvm.icns")] = Setting("", "scummvm.icns in Resources", SettingsNoValue, 0, 6); + + // Remove 2 iphone icon files + files.settings.erase(getHash("PBXResources_Default.png")); + files.settings.erase(getHash("PBXResources_icon.png")); + } + + resource->properties["files"] = files; + + resource->addProperty("runOnlyForDeploymentPostprocessing", "0", "", SettingsNoValue); + + _resourcesBuildPhase.add(resource); + } +} + +void XCodeProvider::setupSourcesBuildPhase() { + // TODO +} + +// Setup all build configurations +void XCodeProvider::setupBuildConfiguration() { + + _buildConfiguration.comment = "XCBuildConfiguration"; + _buildConfiguration.flags = SettingsAsList; + + ///**************************************** + // * iPhone + // ****************************************/ + + // Debug + Object *iPhone_Debug_Object = new Object(this, "XCBuildConfiguration_ScummVM-iPhone_Debug", _targets[0] /* ScummVM-iPhone */, "XCBuildConfiguration", "PBXNativeTarget", "Debug"); + Property iPhone_Debug; + ADD_SETTING_QUOTE(iPhone_Debug, "ARCHS", "$(ARCHS_UNIVERSAL_IPHONE_OS)"); + ADD_SETTING_QUOTE(iPhone_Debug, "CODE_SIGN_IDENTITY", "iPhone Developer"); + ADD_SETTING_QUOTE_VAR(iPhone_Debug, "CODE_SIGN_IDENTITY[sdk=iphoneos*]", "iPhone Developer"); + ADD_SETTING(iPhone_Debug, "COMPRESS_PNG_FILES", "NO"); + ADD_SETTING(iPhone_Debug, "COPY_PHASE_STRIP", "NO"); + ADD_SETTING_QUOTE(iPhone_Debug, "DEBUG_INFORMATION_FORMAT", "dwarf-with-dsym"); + ValueList iPhone_FrameworkSearchPaths; + iPhone_FrameworkSearchPaths.push_back("$(inherited)"); + iPhone_FrameworkSearchPaths.push_back("\"$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks\""); + ADD_SETTING_LIST(iPhone_Debug, "FRAMEWORK_SEARCH_PATHS", iPhone_FrameworkSearchPaths, SettingsAsList, 5); + ADD_SETTING(iPhone_Debug, "GCC_DYNAMIC_NO_PIC", "NO"); + ADD_SETTING(iPhone_Debug, "GCC_ENABLE_CPP_EXCEPTIONS", "NO"); + ADD_SETTING(iPhone_Debug, "GCC_ENABLE_FIX_AND_CONTINUE", "NO"); + ADD_SETTING(iPhone_Debug, "GCC_OPTIMIZATION_LEVEL", "0"); + ADD_SETTING(iPhone_Debug, "GCC_PRECOMPILE_PREFIX_HEADER", "NO"); + ADD_SETTING_QUOTE(iPhone_Debug, "GCC_PREFIX_HEADER", ""); + ADD_SETTING(iPhone_Debug, "GCC_THUMB_SUPPORT", "NO"); + ADD_SETTING(iPhone_Debug, "GCC_UNROLL_LOOPS", "YES"); + ValueList iPhone_HeaderSearchPaths; + iPhone_HeaderSearchPaths.push_back("../../engines/"); + iPhone_HeaderSearchPaths.push_back("../../"); + iPhone_HeaderSearchPaths.push_back("include/"); + ADD_SETTING_LIST(iPhone_Debug, "HEADER_SEARCH_PATHS", iPhone_HeaderSearchPaths, SettingsAsList|SettingsNoQuote, 5); + ADD_SETTING(iPhone_Debug, "INFOPLIST_FILE", "Info.plist"); + ValueList iPhone_LibPaths; + iPhone_LibPaths.push_back("$(inherited)"); + iPhone_LibPaths.push_back("\"$(SRCROOT)/lib\""); + ADD_SETTING_LIST(iPhone_Debug, "LIBRARY_SEARCH_PATHS", iPhone_LibPaths, SettingsAsList, 5); + ADD_SETTING(iPhone_Debug, "ONLY_ACTIVE_ARCH", "YES"); + ADD_SETTING(iPhone_Debug, "PREBINDING", "NO"); + ADD_SETTING(iPhone_Debug, "PRODUCT_NAME", "ScummVM"); + ADD_SETTING_QUOTE(iPhone_Debug, "PROVISIONING_PROFILE", "EF590570-5FAC-4346-9071-D609DE2B28D8"); + ADD_SETTING_QUOTE_VAR(iPhone_Debug, "PROVISIONING_PROFILE[sdk=iphoneos*]", ""); + ADD_SETTING(iPhone_Debug, "SDKROOT", "iphoneos4.0"); + ADD_SETTING_QUOTE(iPhone_Debug, "TARGETED_DEVICE_FAMILY", "1,2"); + + iPhone_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue); + iPhone_Debug_Object->properties["buildSettings"] = iPhone_Debug; + + // Release + Object *iPhone_Release_Object = new Object(this, "XCBuildConfiguration_ScummVM-iPhone_Release", _targets[0] /* ScummVM-iPhone */, "XCBuildConfiguration", "PBXNativeTarget", "Release"); + Property iPhone_Release(iPhone_Debug); + ADD_SETTING(iPhone_Release, "GCC_OPTIMIZATION_LEVEL", "3"); + ADD_SETTING(iPhone_Release, "COPY_PHASE_STRIP", "YES"); + REMOVE_SETTING(iPhone_Release, "GCC_DYNAMIC_NO_PIC"); + ADD_SETTING(iPhone_Release, "WRAPPER_EXTENSION", "app"); + + iPhone_Release_Object->addProperty("name", "Release", "", SettingsNoValue); + iPhone_Release_Object->properties["buildSettings"] = iPhone_Release; + + _buildConfiguration.add(iPhone_Debug_Object); + _buildConfiguration.add(iPhone_Release_Object); + + /**************************************** + * scummvm + ****************************************/ + + // Debug + Object *scummvm_Debug_Object = new Object(this, "XCBuildConfiguration_scummvm_Debug", "scummvm", "XCBuildConfiguration", "PBXProject", "Debug"); + Property scummvm_Debug; + ADD_SETTING(scummvm_Debug, "ALWAYS_SEARCH_USER_PATHS", "NO"); + ADD_SETTING_QUOTE(scummvm_Debug, "ARCHS", "$(ARCHS_STANDARD_32_BIT)"); + ADD_SETTING_QUOTE(scummvm_Debug, "CODE_SIGN_IDENTITY", "Don't Code Sign"); + ADD_SETTING_QUOTE_VAR(scummvm_Debug, "CODE_SIGN_IDENTITY[sdk=iphoneos*]", "Don't Code Sign"); + ADD_SETTING_QUOTE(scummvm_Debug, "FRAMEWORK_SEARCH_PATHS", ""); + ADD_SETTING(scummvm_Debug, "GCC_C_LANGUAGE_STANDARD", "c99"); + ADD_SETTING(scummvm_Debug, "GCC_ENABLE_CPP_EXCEPTIONS", "NO"); + ADD_SETTING(scummvm_Debug, "GCC_ENABLE_CPP_RTTI", "NO"); + ADD_SETTING(scummvm_Debug, "GCC_INPUT_FILETYPE", "automatic"); + ADD_SETTING(scummvm_Debug, "GCC_OPTIMIZATION_LEVEL", "0"); + ValueList scummvm_defines(_defines); + ADD_DEFINE(scummvm_defines, "IPHONE"); + ADD_DEFINE(scummvm_defines, "XCODE"); + ADD_DEFINE(scummvm_defines, "IPHONE_OFFICIAL"); + ADD_SETTING_LIST(scummvm_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, SettingsNoQuote|SettingsAsList, 5); + ADD_SETTING(scummvm_Debug, "GCC_THUMB_SUPPORT", "NO"); + ADD_SETTING(scummvm_Debug, "GCC_USE_GCC3_PFE_SUPPORT", "NO"); + ADD_SETTING(scummvm_Debug, "GCC_WARN_ABOUT_RETURN_TYPE", "YES"); + ADD_SETTING(scummvm_Debug, "GCC_WARN_UNUSED_VARIABLE", "YES"); + ValueList scummvm_HeaderPaths; + scummvm_HeaderPaths.push_back("include/"); + scummvm_HeaderPaths.push_back("../../engines/"); + scummvm_HeaderPaths.push_back("../../"); + ADD_SETTING_LIST(scummvm_Debug, "HEADER_SEARCH_PATHS", scummvm_HeaderPaths, SettingsNoQuote|SettingsAsList, 5); + ADD_SETTING_QUOTE(scummvm_Debug, "LIBRARY_SEARCH_PATHS", ""); + ADD_SETTING(scummvm_Debug, "ONLY_ACTIVE_ARCH", "YES"); + ADD_SETTING_QUOTE(scummvm_Debug, "OTHER_CFLAGS", ""); + ADD_SETTING_QUOTE(scummvm_Debug, "OTHER_LDFLAGS", "-lz"); + ADD_SETTING(scummvm_Debug, "PREBINDING", "NO"); + ADD_SETTING(scummvm_Debug, "SDKROOT", "macosx10.6"); + + scummvm_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue); + scummvm_Debug_Object->properties["buildSettings"] = scummvm_Debug; + + // Release + Object *scummvm_Release_Object = new Object(this, "XCBuildConfiguration_scummvm_Release", "scummvm", "XCBuildConfiguration", "PBXProject", "Release"); + Property scummvm_Release(scummvm_Debug); + REMOVE_SETTING(scummvm_Release, "GCC_C_LANGUAGE_STANDARD"); // Not sure why we remove that, or any of the other warnings + REMOVE_SETTING(scummvm_Release, "GCC_WARN_ABOUT_RETURN_TYPE"); + REMOVE_SETTING(scummvm_Release, "GCC_WARN_UNUSED_VARIABLE"); + REMOVE_SETTING(scummvm_Release, "ONLY_ACTIVE_ARCH"); + + scummvm_Release_Object->addProperty("name", "Release", "", SettingsNoValue); + scummvm_Release_Object->properties["buildSettings"] = scummvm_Release; + + _buildConfiguration.add(scummvm_Debug_Object); + _buildConfiguration.add(scummvm_Release_Object); + + /**************************************** + * ScummVM-OS X + ****************************************/ + + // Debug + Object *scummvmOSX_Debug_Object = new Object(this, "XCBuildConfiguration_ScummVM-OSX_Debug", _targets[1] /* ScummVM-OS X */, "XCBuildConfiguration", "PBXNativeTarget", "Debug"); + Property scummvmOSX_Debug; + ADD_SETTING_QUOTE(scummvmOSX_Debug, "ARCHS", "$(NATIVE_ARCH)"); + ADD_SETTING(scummvmOSX_Debug, "COMPRESS_PNG_FILES", "NO"); + ADD_SETTING(scummvmOSX_Debug, "COPY_PHASE_STRIP", "NO"); + ADD_SETTING_QUOTE(scummvmOSX_Debug, "DEBUG_INFORMATION_FORMAT", "dwarf-with-dsym"); + ADD_SETTING_QUOTE(scummvmOSX_Debug, "FRAMEWORK_SEARCH_PATHS", ""); + ADD_SETTING(scummvmOSX_Debug, "GCC_C_LANGUAGE_STANDARD", "c99"); + ADD_SETTING(scummvmOSX_Debug, "GCC_ENABLE_CPP_EXCEPTIONS", "NO"); + ADD_SETTING(scummvmOSX_Debug, "GCC_ENABLE_CPP_RTTI", "NO"); + ADD_SETTING(scummvmOSX_Debug, "GCC_DYNAMIC_NO_PIC", "NO"); + ADD_SETTING(scummvmOSX_Debug, "GCC_ENABLE_FIX_AND_CONTINUE", "NO"); + ADD_SETTING(scummvmOSX_Debug, "GCC_OPTIMIZATION_LEVEL", "0"); + ADD_SETTING(scummvmOSX_Debug, "GCC_PRECOMPILE_PREFIX_HEADER", "NO"); + ADD_SETTING_QUOTE(scummvmOSX_Debug, "GCC_PREFIX_HEADER", ""); + ValueList scummvmOSX_defines(_defines); + ADD_DEFINE(scummvmOSX_defines, "SDL_BACKEND"); + ADD_DEFINE(scummvmOSX_defines, "MACOSX"); + ADD_SETTING_LIST(scummvmOSX_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvmOSX_defines, SettingsNoQuote|SettingsAsList, 5); + ADD_SETTING_QUOTE(scummvmOSX_Debug, "GCC_VERSION", ""); + ValueList scummvmOSX_HeaderPaths; + scummvmOSX_HeaderPaths.push_back("/opt/local/include/SDL"); + scummvmOSX_HeaderPaths.push_back("/opt/local/include"); + scummvmOSX_HeaderPaths.push_back("include/"); + scummvmOSX_HeaderPaths.push_back("../../engines/"); + scummvmOSX_HeaderPaths.push_back("../../"); + ADD_SETTING_LIST(scummvmOSX_Debug, "HEADER_SEARCH_PATHS", scummvmOSX_HeaderPaths, SettingsNoQuote|SettingsAsList, 5); + ADD_SETTING_QUOTE(scummvmOSX_Debug, "INFOPLIST_FILE", "$(SRCROOT)/../macosx/Info.plist"); + ValueList scummvmOSX_LibPaths; + scummvmOSX_LibPaths.push_back("/sw/lib"); + scummvmOSX_LibPaths.push_back("/opt/local/lib"); + scummvmOSX_LibPaths.push_back("\"$(inherited)\""); + scummvmOSX_LibPaths.push_back("\"\\\\\\\"$(SRCROOT)/lib\\\\\\\"\""); // mmmh, all those slashes, it's almost Christmas \o/ + ADD_SETTING_LIST(scummvmOSX_Debug, "LIBRARY_SEARCH_PATHS", scummvmOSX_LibPaths, SettingsNoQuote|SettingsAsList, 5); + ADD_SETTING_QUOTE(scummvmOSX_Debug, "OTHER_CFLAGS", ""); + ValueList scummvmOSX_LdFlags; + scummvmOSX_LdFlags.push_back("-lSDLmain"); + scummvmOSX_LdFlags.push_back("-logg"); + scummvmOSX_LdFlags.push_back("-lvorbisfile"); + scummvmOSX_LdFlags.push_back("-lvorbis"); + scummvmOSX_LdFlags.push_back("-lmad"); + scummvmOSX_LdFlags.push_back("-lFLAC"); + scummvmOSX_LdFlags.push_back("-lSDL"); + scummvmOSX_LdFlags.push_back("-lz"); + ADD_SETTING_LIST(scummvmOSX_Debug, "OTHER_LDFLAGS", scummvmOSX_LdFlags, SettingsAsList, 5); + ADD_SETTING(scummvmOSX_Debug, "PREBINDING", "NO"); + ADD_SETTING(scummvmOSX_Debug, "PRODUCT_NAME", "ScummVM"); + + scummvmOSX_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue); + scummvmOSX_Debug_Object->properties["buildSettings"] = scummvmOSX_Debug; + + // Release + Object *scummvmOSX_Release_Object = new Object(this, "XCBuildConfiguration_ScummVMOSX_Release", _targets[1] /* ScummVM-OS X */, "XCBuildConfiguration", "PBXNativeTarget", "Release"); + Property scummvmOSX_Release(scummvmOSX_Debug); + ADD_SETTING(scummvmOSX_Release, "COPY_PHASE_STRIP", "YES"); + REMOVE_SETTING(scummvmOSX_Release, "GCC_DYNAMIC_NO_PIC"); + REMOVE_SETTING(scummvmOSX_Release, "GCC_OPTIMIZATION_LEVEL"); + ADD_SETTING(scummvmOSX_Release, "WRAPPER_EXTENSION", "app"); + + scummvmOSX_Release_Object->addProperty("name", "Release", "", SettingsNoValue); + scummvmOSX_Release_Object->properties["buildSettings"] = scummvmOSX_Release; + + _buildConfiguration.add(scummvmOSX_Debug_Object); + _buildConfiguration.add(scummvmOSX_Release_Object); + + /**************************************** + * ScummVM-Simulator + ****************************************/ + + // Debug + Object *scummvmSimulator_Debug_Object = new Object(this, "XCBuildConfiguration_ScummVM-Simulator_Debug", _targets[2] /* ScummVM-Simulator */, "XCBuildConfiguration", "PBXNativeTarget", "Debug"); + Property scummvmSimulator_Debug(iPhone_Debug); + ADD_SETTING_QUOTE(scummvmSimulator_Debug, "FRAMEWORK_SEARCH_PATHS", "$(inherited)"); + ADD_SETTING_LIST(scummvmSimulator_Debug, "GCC_PREPROCESSOR_DEFINITIONS", scummvm_defines, SettingsNoQuote|SettingsAsList, 5); + ADD_SETTING(scummvmSimulator_Debug, "SDKROOT", "iphonesimulator3.2"); + REMOVE_SETTING(scummvmSimulator_Debug, "TARGETED_DEVICE_FAMILY"); + + scummvmSimulator_Debug_Object->addProperty("name", "Debug", "", SettingsNoValue); + scummvmSimulator_Debug_Object->properties["buildSettings"] = scummvmSimulator_Debug; + + // Release + Object *scummvmSimulator_Release_Object = new Object(this, "XCBuildConfiguration_ScummVM-Simulator_Release", _targets[2] /* ScummVM-Simulator */, "XCBuildConfiguration", "PBXNativeTarget", "Release"); + Property scummvmSimulator_Release(scummvmSimulator_Debug); + ADD_SETTING(scummvmSimulator_Release, "COPY_PHASE_STRIP", "YES"); + REMOVE_SETTING(scummvmSimulator_Release, "GCC_DYNAMIC_NO_PIC"); + ADD_SETTING(scummvmSimulator_Release, "WRAPPER_EXTENSION", "app"); + + scummvmSimulator_Release_Object->addProperty("name", "Release", "", SettingsNoValue); + scummvmSimulator_Release_Object->properties["buildSettings"] = scummvmSimulator_Release; + + _buildConfiguration.add(scummvmSimulator_Debug_Object); + _buildConfiguration.add(scummvmSimulator_Release_Object); + + ////////////////////////////////////////////////////////////////////////// + // Configuration List + _configurationList.comment = "XCConfigurationList"; + _configurationList.flags = SettingsAsList; + + // Warning: This assumes we have all configurations with a Debug & Release pair + for (std::vector<Object *>::iterator config = _buildConfiguration.objects.begin(); config != _buildConfiguration.objects.end(); config++) { + + Object *configList = new Object(this, "XCConfigurationList_" + (*config)->name, (*config)->name, "XCConfigurationList", "", "Build configuration list for " + (*config)->refType + " \"" + (*config)->name + "\""); + + Property buildConfigs; + buildConfigs.flags = SettingsAsList; + + buildConfigs.settings[getHash((*config)->id)] = Setting("", "Debug", SettingsNoValue, 0, 0); + buildConfigs.settings[getHash((*(++config))->id)] = Setting("", "Release", SettingsNoValue, 0, 1); + + configList->properties["buildConfigurations"] = buildConfigs; + + configList->addProperty("defaultConfigurationIsVisible", "0", "", SettingsNoValue); + configList->addProperty("defaultConfigurationName", "Release", "", SettingsNoValue); + + _configurationList.add(configList); + } +} + +////////////////////////////////////////////////////////////////////////// +// Misc +////////////////////////////////////////////////////////////////////////// + +// Setup global defines +void XCodeProvider::setupDefines(const BuildSetup &setup) { + + for (StringList::const_iterator i = setup.defines.begin(); i != setup.defines.end(); ++i) { + if (*i == "HAVE_NASM") // Not supported on Mac (TODO: change how it's handled in main class or add it only in MSVC/CodeBlocks providers?) + continue; + + ADD_DEFINE(_defines, *i); + } + // Add special defines for Mac support + ADD_DEFINE(_defines, "CONFIG_H"); + ADD_DEFINE(_defines, "SCUMM_NEED_ALIGNMENT"); + ADD_DEFINE(_defines, "SCUMM_LITTLE_ENDIAN"); + ADD_DEFINE(_defines, "UNIX"); + ADD_DEFINE(_defines, "SCUMMVM"); + ADD_DEFINE(_defines, "USE_TREMOR"); +} + +////////////////////////////////////////////////////////////////////////// +// Object hash +////////////////////////////////////////////////////////////////////////// + +// TODO use md5 to compute a file hash (and fall back to standard key generation if not passed a file) +std::string XCodeProvider::getHash(std::string key) { + +#if DEBUG_XCODE_HASH + return key; +#else + // Check to see if the key is already in the dictionary + std::map<std::string, std::string>::iterator hashIterator = _hashDictionnary.find(key); + if (hashIterator != _hashDictionnary.end()) + return hashIterator->second; + + // Generate a new key from the file hash and insert it into the dictionary + std::string hash = newHash(); + _hashDictionnary[key] = hash; + + return hash; +#endif +} + +bool isSeparator (char s) { return (s == '-'); } + +std::string XCodeProvider::newHash() const { + std::string hash = createUUID(); + + // Remove { and - from UUID and resize to 96-bits uppercase hex string + hash.erase(remove_if(hash.begin(), hash.end(), isSeparator), hash.end()); + + hash.resize(24); + std::transform(hash.begin(), hash.end(), hash.begin(), toupper); + + return hash; +} + +////////////////////////////////////////////////////////////////////////// +// Output +////////////////////////////////////////////////////////////////////////// + +std::string replace(std::string input, const std::string find, std::string replaceStr) { + std::string::size_type pos = 0; + std::string::size_type findLen = find.length(); + std::string::size_type replaceLen = replaceStr.length(); + + if (findLen == 0 ) + return input; + + for (;(pos = input.find(find, pos)) != std::string::npos;) { + input.replace(pos, findLen, replaceStr); + pos += replaceLen; + } + + return input; +} + +std::string XCodeProvider::writeProperty(const std::string &variable, Property &prop, int flags) const { + std::string output; + + output += (flags & SettingsSingleItem ? "" : "\t\t\t") + variable + " = "; + + if (prop.settings.size() > 1 || (prop.flags & SettingsSingleItem)) + output += (prop.flags & SettingsAsList) ? "(\n" : "{\n"; + + OrderedSettingList settings = prop.getOrderedSettingList(); + for (OrderedSettingList::const_iterator setting = settings.begin(); setting != settings.end(); ++setting) { + if (settings.size() > 1 || (prop.flags & SettingsSingleItem)) + output += (flags & SettingsSingleItem ? " " : "\t\t\t\t"); + + output += writeSetting((*setting).first, (*setting).second); + + if ((prop.flags & SettingsAsList) && prop.settings.size() > 1) { + output += (prop.settings.size() > 0) ? ",\n" : "\n"; + } else { + output += ";"; + output += (flags & SettingsSingleItem ? " " : "\n"); + } + } + + if (prop.settings.size() > 1 || (prop.flags & SettingsSingleItem)) + output += (prop.flags & SettingsAsList) ? "\t\t\t);\n" : "\t\t\t};\n"; + + return output; +} + +std::string XCodeProvider::writeSetting(const std::string &variable, std::string value, std::string comment, int flags, int indent) const { + return writeSetting(variable, Setting(value, comment, flags, indent)); +} +// Heavily modified (not in a good way) function, imported from QMake XCode project generator (licensed under the QT license) +std::string XCodeProvider::writeSetting(const std::string &variable, const Setting &setting) const { + std::string output; + const std::string quote = (setting.flags & SettingsNoQuote) ? "" : "\""; + const std::string escape_quote = quote.empty() ? "" : "\\" + quote; + std::string newline = "\n"; + + // Get indent level + for (int i = 0; i < setting.indent; ++i) + newline += "\t"; + + // Setup variable + std::string var = (setting.flags & SettingsQuoteVariable) ? "\"" + variable + "\"" : variable; + + // Output a list + if (setting.flags & SettingsAsList) { + + output += var + ((setting.flags & SettingsNoValue) ? "(" : " = (") + newline; + + for (unsigned int i = 0, count = 0; i < setting.entries.size(); ++i) { + + std::string value = setting.entries.at(i).value; + if(!value.empty()) { + if (count++ > 0) + output += "," + newline; + + output += quote + replace(value, quote, escape_quote) + quote; + + std::string comment = setting.entries.at(i).comment; + if (!comment.empty()) + output += " /* " + comment + " */"; + } + + } + // Add closing ")" on new line + newline.resize(newline.size() - 1); + output += (setting.flags & SettingsNoValue) ? "\t\t\t)" : "," + newline + ")"; + } else { + output += var; + + output += (setting.flags & SettingsNoValue) ? "" : " = " + quote; + + for(unsigned int i = 0; i < setting.entries.size(); ++i) { + std::string value = setting.entries.at(i).value; + if(i) + output += " "; + output += value; + + std::string comment = setting.entries.at(i).comment; + if (!comment.empty()) + output += " /* " + comment + " */"; + } + + output += (setting.flags & SettingsNoValue) ? "" : quote; + } + return output; +} + +} // End of CreateProjectTool namespace diff --git a/devtools/create_project/xcode.h b/devtools/create_project/xcode.h new file mode 100644 index 0000000000..f86e7c555c --- /dev/null +++ b/devtools/create_project/xcode.h @@ -0,0 +1,307 @@ +/* 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 TOOLS_CREATE_PROJECT_XCODE_H +#define TOOLS_CREATE_PROJECT_XCODE_H + +#include "create_project.h" + +#include <algorithm> +#include <vector> + +namespace CreateProjectTool { + +class XCodeProvider : public ProjectProvider { +public: + XCodeProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version = 0); + +protected: + + void createWorkspace(const BuildSetup &setup); + + void createOtherBuildFiles(const BuildSetup &setup); + + void createProjectFile(const std::string &name, const std::string &uuid, const BuildSetup &setup, const std::string &moduleDir, + const StringList &includeList, const StringList &excludeList); + + void writeFileListToProject(const FileNode &dir, std::ofstream &projectFile, const int indentation, + const StringList &duplicate, const std::string &objPrefix, const std::string &filePrefix); + +private: + enum { + SettingsAsList = 0x01, + SettingsSingleItem = 0x02, + SettingsNoQuote = 0x04, + SettingsQuoteVariable = 0x08, + SettingsNoValue = 0x10 + }; + + // File properties + struct FileProperty { + std::string fileEncoding; + std::string lastKnownFileType; + std::string fileName; + std::string filePath; + std::string sourceTree; + + FileProperty(std::string fileType = "", std::string name = "", std::string path = "", std::string source = "") : + fileEncoding(""), lastKnownFileType(fileType), fileName(name), filePath(path), sourceTree(source) + { + } + }; + + ////////////////////////////////////////////////////////////////////////// + // XCObject and children + typedef std::vector<std::string> ValueList; + + struct Entry { + std::string value; + std::string comment; + + Entry(std::string val, std::string cmt) : value(val), comment(cmt) {} + }; + + typedef std::vector<Entry> EntryList; + + struct Setting { + EntryList entries; + int flags; + int indent; + int order; + + explicit Setting(std::string value = "", std::string comment = "", int flgs = 0, int idt = 0, int ord = -1) : flags(flgs), indent(idt), order(ord) { + entries.push_back(Entry(value, comment)); + } + + explicit Setting(ValueList values, int flgs = 0, int idt = 0, int ord = -1) : flags(flgs), indent(idt), order(ord) { + for (unsigned int i = 0; i < values.size(); i++) + entries.push_back(Entry(values[i], "")); + } + + explicit Setting(EntryList ents, int flgs = 0, int idt = 0, int ord = -1) : entries(ents), flags(flgs), indent(idt), order(ord) {} + + void addEntry(std::string value, std::string comment = "") { + entries.push_back(Entry(value, comment)); + } + }; + + typedef std::map<std::string, Setting> SettingList; + typedef std::pair<std::string, Setting> SettingPair; + typedef std::vector<SettingPair> OrderedSettingList; + + static bool OrderSortPredicate(const SettingPair& s1, const SettingPair& s2) { + return s1.second.order < s2.second.order; + } + + struct Property { + public: + SettingList settings; + int flags; + bool hasOrder; + + Property() : flags(0), hasOrder(false) {} + + // Constructs a simple Property + explicit Property(std::string name, std::string value = "", std::string comment = "", int flgs = 0, int indent = 0, bool order = false) : flags(flgs), hasOrder(order) { + Setting setting(value, comment, flags, indent); + + settings[name] = setting; + } + + Property(std::string name, ValueList values, int flgs = 0, int indent = 0, bool order = false) : flags(flgs), hasOrder(order) { + Setting setting(values, flags, indent); + + settings[name] = setting; + } + + // Copy constructor + Property(const Property &rhs) { + settings = rhs.settings; + flags = rhs.flags; + } + + OrderedSettingList getOrderedSettingList() { + OrderedSettingList list; + + // Prepare vector to sort + for (SettingList::const_iterator setting = settings.begin(); setting != settings.end(); ++setting) + list.push_back(SettingPair(setting->first, setting->second)); + + // Sort vector using setting order + if (hasOrder) + std::sort(list.begin(), list.end(), OrderSortPredicate); + + return list; + } + }; + + typedef std::map<std::string, Property> PropertyList; + + // Main object struct + // This is all a big hack unfortunately, but making everything all properly abstracted would + // be overkill since we only have to generate a single project + struct Object { + public: + std::string id; // Unique identifier for this object + std::string name; // Name (may not be unique - for ex. configuration entries) + std::string refType; // Type of object this references (if any) + std::string comment; // Main comment (empty for no comment) + + PropertyList properties; // List of object properties, including output configuration + + // Constructs an object and add a default type property + Object(XCodeProvider *objectParent, std::string objectId, std::string objectName, std::string objectType, std::string objectRefType = "", std::string objectComment = "") + : id(objectId), name(objectName), refType(objectRefType), comment(objectComment), parent(objectParent) { + assert(objectParent); + assert(!objectId.empty()); + assert(!objectName.empty()); + assert(!objectType.empty()); + + addProperty("isa", objectType, "", SettingsNoQuote|SettingsNoValue); + } + + // Add a simple Property with just a name and a value + void addProperty(std::string propName, std::string propValue, std::string propComment = "", int propFlags = 0, int propIndent = 0) { + properties[propName] = Property(propValue, "", propComment, propFlags, propIndent); + } + + std::string toString(int flags = 0) { + std::string output; + output = "\t\t" + parent->getHash(id) + (comment.empty() ? "" : " /* " + comment + " */") + " = {"; + + if (flags & SettingsAsList) + output += "\n"; + + // Special case: always output the isa property first + output += parent->writeProperty("isa", properties["isa"], flags); + + // Write each property + for (PropertyList::iterator property = properties.begin(); property != properties.end(); ++property) { + if ((*property).first == "isa") + continue; + + output += parent->writeProperty((*property).first, (*property).second, flags); + } + + if (flags & SettingsAsList) + output += "\t\t"; + + output += "};\n"; + + return output; + } + + private: + XCodeProvider *parent; + + // Returns the type property (should always be the first in the properties map) + std::string getType() { + assert(!properties.empty()); + assert(!properties["isa"].settings.empty()); + + SettingList::iterator it = properties["isa"].settings.begin(); + + return (*it).first; + } + }; + + struct ObjectList { + private: + std::map<std::string, bool> objectMap; + + public: + std::vector<Object *> objects; + std::string comment; + int flags; + + void add(Object *obj) { + std::map<std::string, bool>::iterator it = objectMap.find(obj->id); + if (it != objectMap.end() && it->second == true) + return; + + objects.push_back(obj); + objectMap[obj->id] = true; + } + + std::string toString() { + std::string output; + + if (!comment.empty()) + output = "\n/* Begin " + comment + " section */\n"; + + for (std::vector<Object *>::iterator object = objects.begin(); object != objects.end(); ++object) + output += (*object)->toString(flags); + + if (!comment.empty()) + output += "/* End " + comment + " section */\n"; + + return output; + } + }; + + // All objects + std::map<std::string, std::string> _hashDictionnary; + ValueList _defines; + + // Targets + ValueList _targets; + + // Lists of objects + ObjectList _buildFile; + ObjectList _copyFilesBuildPhase; + ObjectList _fileReference; + ObjectList _frameworksBuildPhase; + ObjectList _groups; + ObjectList _nativeTarget; + ObjectList _project; + ObjectList _resourcesBuildPhase; + ObjectList _sourcesBuildPhase; + ObjectList _buildConfiguration; + ObjectList _configurationList; + + void ouputMainProjectFile(const BuildSetup &setup); + + // Setup objects + void setupCopyFilesBuildPhase(); + void setupFrameworksBuildPhase(); + void setupNativeTarget(); + void setupProject(); + void setupResourcesBuildPhase(); + void setupSourcesBuildPhase(); + void setupBuildConfiguration(); + + // Misc + void setupDefines(const BuildSetup &setup); // Setup the list of defines to be used on build configurations + + // Hash generation + std::string getHash(std::string key); + std::string newHash() const; + + // Output + std::string writeProperty(const std::string &variable, Property &property, int flags = 0) const; + std::string writeSetting(const std::string &variable, std::string name, std::string comment = "", int flags = 0, int indent = 0) const; + std::string writeSetting(const std::string &variable, const Setting &setting) const; +}; + +} // End of CreateProjectTool namespace + +#endif // TOOLS_CREATE_PROJECT_XCODE_H diff --git a/devtools/create_project/xcode/create_project.xcodeproj/project.pbxproj b/devtools/create_project/xcode/create_project.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..f13bcf6969 --- /dev/null +++ b/devtools/create_project/xcode/create_project.xcodeproj/project.pbxproj @@ -0,0 +1,255 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + F9A66C691396D4DF00CEE494 /* codeblocks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9A66C5F1396D4DF00CEE494 /* codeblocks.cpp */; }; + F9A66C6A1396D4DF00CEE494 /* create_project.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9A66C621396D4DF00CEE494 /* create_project.cpp */; }; + F9A66C6B1396D4DF00CEE494 /* msbuild.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9A66C651396D4DF00CEE494 /* msbuild.cpp */; }; + F9A66C6C1396D4DF00CEE494 /* msvc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9A66C671396D4DF00CEE494 /* msvc.cpp */; }; + F9A66C6F1396D4E800CEE494 /* visualstudio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9A66C6D1396D4E800CEE494 /* visualstudio.cpp */; }; + F9A66C871396E2F500CEE494 /* xcode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9A66C861396E2F500CEE494 /* xcode.cpp */; }; + F9A66C91139704A400CEE494 /* create_project in CopyFiles */ = {isa = PBXBuildFile; fileRef = F9A66C271396D36100CEE494 /* create_project */; }; + F9BA99141398064E00C276C2 /* create_project in CopyFiles */ = {isa = PBXBuildFile; fileRef = F9A66C271396D36100CEE494 /* create_project */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + F9A66C251396D36100CEE494 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 12; + dstPath = ../../../../../dists/iphone; + dstSubfolderSpec = 16; + files = ( + F9A66C91139704A400CEE494 /* create_project in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F9BA99131398063A00C276C2 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ../../../../../dists/macosx; + dstSubfolderSpec = 16; + files = ( + F9BA99141398064E00C276C2 /* create_project in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + F9A66C271396D36100CEE494 /* create_project */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = create_project; sourceTree = BUILT_PRODUCTS_DIR; }; + F9A66C491396D47500CEE494 /* installer.vbs */ = {isa = PBXFileReference; lastKnownFileType = text; name = installer.vbs; path = ../scripts/installer.vbs; sourceTree = "<group>"; }; + F9A66C4A1396D47500CEE494 /* postbuild.cmd */ = {isa = PBXFileReference; lastKnownFileType = text; name = postbuild.cmd; path = ../scripts/postbuild.cmd; sourceTree = "<group>"; }; + F9A66C4B1396D47500CEE494 /* prebuild.cmd */ = {isa = PBXFileReference; lastKnownFileType = text; name = prebuild.cmd; path = ../scripts/prebuild.cmd; sourceTree = "<group>"; }; + F9A66C4C1396D47500CEE494 /* revision.vbs */ = {isa = PBXFileReference; lastKnownFileType = text; name = revision.vbs; path = ../scripts/revision.vbs; sourceTree = "<group>"; }; + F9A66C5F1396D4DF00CEE494 /* codeblocks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = codeblocks.cpp; path = ../codeblocks.cpp; sourceTree = "<group>"; }; + F9A66C601396D4DF00CEE494 /* codeblocks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = codeblocks.h; path = ../codeblocks.h; sourceTree = "<group>"; }; + F9A66C611396D4DF00CEE494 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = config.h; path = ../config.h; sourceTree = "<group>"; }; + F9A66C621396D4DF00CEE494 /* create_project.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = create_project.cpp; path = ../create_project.cpp; sourceTree = "<group>"; }; + F9A66C631396D4DF00CEE494 /* create_project.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = create_project.h; path = ../create_project.h; sourceTree = "<group>"; }; + F9A66C641396D4DF00CEE494 /* module.mk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = module.mk; path = ../module.mk; sourceTree = "<group>"; }; + F9A66C651396D4DF00CEE494 /* msbuild.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = msbuild.cpp; path = ../msbuild.cpp; sourceTree = "<group>"; }; + F9A66C661396D4DF00CEE494 /* msbuild.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = msbuild.h; path = ../msbuild.h; sourceTree = "<group>"; }; + F9A66C671396D4DF00CEE494 /* msvc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = msvc.cpp; path = ../msvc.cpp; sourceTree = "<group>"; }; + F9A66C681396D4DF00CEE494 /* msvc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = msvc.h; path = ../msvc.h; sourceTree = "<group>"; }; + F9A66C6D1396D4E800CEE494 /* visualstudio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = visualstudio.cpp; path = ../visualstudio.cpp; sourceTree = "<group>"; }; + F9A66C6E1396D4E800CEE494 /* visualstudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = visualstudio.h; path = ../visualstudio.h; sourceTree = "<group>"; }; + F9A66C841396E2D800CEE494 /* xcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = xcode.h; path = ../xcode.h; sourceTree = "<group>"; }; + F9A66C861396E2F500CEE494 /* xcode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = xcode.cpp; path = ../xcode.cpp; sourceTree = "<group>"; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + F9A66C241396D36100CEE494 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + F9A66C1C1396D36100CEE494 = { + isa = PBXGroup; + children = ( + F9A66C861396E2F500CEE494 /* xcode.cpp */, + F9A66C841396E2D800CEE494 /* xcode.h */, + F9A66C6D1396D4E800CEE494 /* visualstudio.cpp */, + F9A66C6E1396D4E800CEE494 /* visualstudio.h */, + F9A66C5F1396D4DF00CEE494 /* codeblocks.cpp */, + F9A66C601396D4DF00CEE494 /* codeblocks.h */, + F9A66C611396D4DF00CEE494 /* config.h */, + F9A66C621396D4DF00CEE494 /* create_project.cpp */, + F9A66C631396D4DF00CEE494 /* create_project.h */, + F9A66C641396D4DF00CEE494 /* module.mk */, + F9A66C651396D4DF00CEE494 /* msbuild.cpp */, + F9A66C661396D4DF00CEE494 /* msbuild.h */, + F9A66C671396D4DF00CEE494 /* msvc.cpp */, + F9A66C681396D4DF00CEE494 /* msvc.h */, + F9A66C481396D45D00CEE494 /* Scripts */, + F9A66C281396D36100CEE494 /* Products */, + ); + sourceTree = "<group>"; + }; + F9A66C281396D36100CEE494 /* Products */ = { + isa = PBXGroup; + children = ( + F9A66C271396D36100CEE494 /* create_project */, + ); + name = Products; + sourceTree = "<group>"; + }; + F9A66C481396D45D00CEE494 /* Scripts */ = { + isa = PBXGroup; + children = ( + F9A66C491396D47500CEE494 /* installer.vbs */, + F9A66C4A1396D47500CEE494 /* postbuild.cmd */, + F9A66C4B1396D47500CEE494 /* prebuild.cmd */, + F9A66C4C1396D47500CEE494 /* revision.vbs */, + ); + name = Scripts; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + F9A66C261396D36100CEE494 /* create_project */ = { + isa = PBXNativeTarget; + buildConfigurationList = F9A66C301396D36100CEE494 /* Build configuration list for PBXNativeTarget "create_project" */; + buildPhases = ( + F9A66C231396D36100CEE494 /* Sources */, + F9A66C241396D36100CEE494 /* Frameworks */, + F9A66C251396D36100CEE494 /* CopyFiles */, + F9BA99131398063A00C276C2 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = create_project; + productName = create_project; + productReference = F9A66C271396D36100CEE494 /* create_project */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + F9A66C1E1396D36100CEE494 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = F9A66C211396D36100CEE494 /* Build configuration list for PBXProject "create_project" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = F9A66C1C1396D36100CEE494; + productRefGroup = F9A66C281396D36100CEE494 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + F9A66C261396D36100CEE494 /* create_project */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + F9A66C231396D36100CEE494 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F9A66C691396D4DF00CEE494 /* codeblocks.cpp in Sources */, + F9A66C6A1396D4DF00CEE494 /* create_project.cpp in Sources */, + F9A66C6B1396D4DF00CEE494 /* msbuild.cpp in Sources */, + F9A66C6C1396D4DF00CEE494 /* msvc.cpp in Sources */, + F9A66C6F1396D4E800CEE494 /* visualstudio.cpp in Sources */, + F9A66C871396E2F500CEE494 /* xcode.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + F9A66C2E1396D36100CEE494 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = DEBUG; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + F9A66C2F1396D36100CEE494 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; + SDKROOT = macosx; + }; + name = Release; + }; + F9A66C311396D36100CEE494 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + F9A66C321396D36100CEE494 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + F9A66C211396D36100CEE494 /* Build configuration list for PBXProject "create_project" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F9A66C2E1396D36100CEE494 /* Debug */, + F9A66C2F1396D36100CEE494 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F9A66C301396D36100CEE494 /* Build configuration list for PBXNativeTarget "create_project" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F9A66C311396D36100CEE494 /* Debug */, + F9A66C321396D36100CEE494 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = F9A66C1E1396D36100CEE494 /* Project object */; +} diff --git a/devtools/credits.pl b/devtools/credits.pl index 0f07641aae..bf48304af3 100755 --- a/devtools/credits.pl +++ b/devtools/credits.pl @@ -523,6 +523,11 @@ begin_credits("Credits"); add_person("Paweł Kołodziejski", "aquadran", ""); end_section(); + begin_section("DreamWeb"); + add_person("Vladimir Menshakov", "whoozle", ""); + add_person("Torbjörn Andersson", "eriktorbjorn", ""); + end_section(); + begin_section("Gob"); add_person("Torbjörn Andersson", "eriktorbjorn", ""); add_person("Arnaud Boutonné", "Strangerke", ""); @@ -712,7 +717,8 @@ begin_credits("Credits"); begin_section("PocketPC / WinCE"); add_person("Nicolas Bacca", "arisme", "(retired)"); - add_person("Kostas Nakos", "Jubanka", ""); + add_person("Ismail Khatib", "CeRiAl", ""); + add_person("Kostas Nakos", "Jubanka", "(retired)"); end_section(); begin_section("PlayStation 2"); diff --git a/devtools/tasmrecover/.gitignore b/devtools/tasmrecover/.gitignore new file mode 100644 index 0000000000..f2bff8e8d9 --- /dev/null +++ b/devtools/tasmrecover/.gitignore @@ -0,0 +1,4 @@ +*.pyc +dreamgen.* +_stubs* + diff --git a/devtools/tasmrecover/dreamweb/LICENSE b/devtools/tasmrecover/dreamweb/LICENSE new file mode 100644 index 0000000000..d159169d10 --- /dev/null +++ b/devtools/tasmrecover/dreamweb/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/devtools/tasmrecover/dreamweb/backdrop.asm b/devtools/tasmrecover/dreamweb/backdrop.asm new file mode 100644 index 0000000000..c02d95bbe9 --- /dev/null +++ b/devtools/tasmrecover/dreamweb/backdrop.asm @@ -0,0 +1,877 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +;----------------------------------------------Code to draw floor and panel---- + +Blockget proc near + + mov ah,al + mov al,0 + mov ds,backdrop + mov si,blocks + add si,ax + ret + + endp + + + + + + + + + + + + + + + + +;--------------------------------------------------------Background display---- + + + + + + + + +Drawfloor proc near + + push es bx ;in case this was called during + call eraseoldobs ;some sprite update. + call drawflags + call calcmapad + call doblocks + call showallobs + call showallfree + call showallex + call paneltomap + call initrain + mov newobs,0 + pop bx es + ret + + endp + + + + + + + + + + + + + + + + + + +Calcmapad proc near + + call getdimension + + push cx dx + + mov al,11 + sub al,dl + sub al,cl + sub al,cl + cbw + mov bx,8 + mul bx + add ax,mapoffsetx + mov mapadx,ax + pop dx cx + + mov al,10 + sub al,dh + sub al,ch + sub al,ch + cbw + mov bx,8 + mul bx + add ax,mapoffsety + mov mapady,ax + ret + + endp + + + + + + + + + +Getdimension proc near ;Routine finds width, length + ;and top corner of room + + mov es,buffers + mov bx,mapflags + mov ch,0 +dimloop1: call addalong + cmp al,0 + jnz finishdim1 + inc ch + jmp dimloop1 ;ch holds y of top corner + +finishdim1: mov bx,mapflags + mov cl,0 +dimloop2: push bx + call addlength + pop bx + cmp al,0 + jnz finishdim2 + inc cl + add bx,3 + jmp dimloop2 ;cl holds x of top corner + +finishdim2: mov bx,mapflags+(11*3*9) + mov dh,10 +dimloop3: push bx + call addalong + pop bx + cmp al,0 + jnz finishdim3 + dec dh + sub bx,11*3 + jmp dimloop3 ;dh holds y of bottom corner + +finishdim3: mov bx,mapflags+(3*10) + mov dl,11 +dimloop4: push bx + call addlength + pop bx + cmp al,0 + jnz finishdim4 + dec dl + sub bx,3 + jmp dimloop4 ;dl holds x of bottom corner + +finishdim4: mov al,cl ;cl holds x start + mov ah,0 + shl ax,1 + shl ax,1 + shl ax,1 + shl ax,1 + mov mapxstart,ax + mov al,ch ;ch holds y start + mov ah,0 + shl ax,1 + shl ax,1 + shl ax,1 + shl ax,1 + mov mapystart,ax + + sub dl,cl + sub dh,ch + ;dx holds x and y size of room + mov al,dl ;dl holds x size + mov ah,0 + shl ax,1 + shl ax,1 + shl ax,1 + shl ax,1 + mov mapxsize,al + mov al,dh ;dh holds y size + mov ah,0 + shl ax,1 + shl ax,1 + shl ax,1 + shl ax,1 + mov mapysize,al ;cx still holds top left corner + ret + + endp + + + + + + + + + + + + +Addalong proc near + + mov ah,11 +addloop: cmp byte ptr [es:bx],0 + jnz gotalong + add bx,3 + dec ah + jnz addloop + mov al,0 + ret +gotalong: mov al,1 + ret + + endp + + + + + +Addlength proc near + + mov ah,10 +addloop2: cmp byte ptr [es:bx],0 + jnz gotlength + add bx,3*11 + dec ah + jnz addloop2 + mov al,0 + ret +gotlength: mov al,1 + ret + + endp + + + + + + + + + + + + + + + + + + + + +Drawflags proc near + + mov es,buffers + mov di,mapflags + mov al,mapy + mov ah,0 + mov cx,mapwidth + mul cx + mov bl,mapx + mov bh,0 + add ax,bx + mov si,map + add si,ax + + mov cx,10 +$28: push cx + mov cx,11 +$28a: mov ds,mapdata + lodsb + mov ds,backdrop + push si ax + mov ah,0 + add ax,ax + mov si,flags + add si,ax + movsw + pop ax + stosb + pop si + loop $28a + add si,mapwidth-11 + pop cx + loop $28 + ret + + endp + + + + + + + + + + + + + + +;-------------------------------------------------------Set object printing---- + +Eraseoldobs proc near + + cmp newobs,0 + jz donterase + + mov es,buffers + mov bx,spritetable + + mov cx,16 +oberase: push cx bx + mov ax,[es:bx+20] + cmp ax,0ffffh + jz notthisob + mov di,bx + mov al,255 + mov cx,tablesize + rep stosb +notthisob: pop bx cx + add bx,tablesize + loop oberase + +donterase: ret + + endp + + + + + + + + + + + + + + + + + + + + +Showallobs proc near + + mov es,buffers + mov bx,setlist + mov listpos,bx + mov di,bx + mov cx,128*5 + mov al,255 + rep stosb + + mov es,setframes + mov frsegment,es + mov ax,framedata + mov dataad,ax + mov ax,frames + mov framesad,ax + mov currentob,0 + + mov ds,setdat + mov si,0 + + mov cx,128 +showobsloop: push cx si + + push si + add si,58 + mov es,setdat + call getmapad + pop si + cmp ch,0 + jz blankframe + + mov al,[es:si+18] + mov ah,0 + mov currentframe,ax + cmp al,255 + jz blankframe + + push es si + call calcfrframe + call finalframe + pop si es + + mov al,[es:si+18] + mov [es:si+17],al + cmp byte ptr [es:si+8],0 + jnz animating + cmp byte ptr [es:si+5],5 + jz animating + cmp byte ptr [es:si+5],6 + jz animating + mov ax,currentframe + mov ah,0 + add di,mapadx + add bx,mapady + call showframe + jmp drawnsetob + +animating: call makebackob + +drawnsetob: mov si,listpos + mov es,buffers + mov al,savex + mov ah,savey + mov [es:si],ax + mov cx,ax + mov ax,savesize + add al,cl + add ah,ch + mov [es:si+2],ax + mov al,currentob + mov [es:si+4],al + add si,5 + mov listpos,si + +blankframe: inc currentob + pop si cx + add si,64 + dec cx + jz finishedsetobs + jmp showobsloop + +finishedsetobs: ret + + endp + + + + + + + + + + + + + + +Makebackob proc near + + cmp newobs,0 + jz nomake + + mov al,[es:si+5] ; priority + mov ah,[es:si+8] ; type - steady, constant,random,door etc. + push si ax si + mov ax,objectx + mov bx,objecty + mov ah,bl + mov si,ax + mov cx,offset cs:backobject + mov dx,setframes + mov di,framedata + call makesprite + pop ax + mov [es:bx+20],ax + pop ax + cmp al,255 + jnz usedpriority ; forgotten to specify priority + mov al,0 +usedpriority: mov [es:bx+23],al + mov [es:bx+30],ah + mov byte ptr [es:bx+16],0 + mov byte ptr [es:bx+18],0 + mov byte ptr [es:bx+19],0 + pop si +nomake: ret + + endp + + + + +;------------------------------------------------------Free object printing---- + +Showallfree proc near + + mov es,buffers + mov bx,freelist + mov listpos,bx + mov di,freelist + mov cx,80*5 + mov al,255 + rep stosb + + mov es,freeframes + mov frsegment,es + mov ax,frframedata + mov dataad,ax + mov ax,frframes + mov framesad,ax + mov al,0 + mov currentfree,al + + mov ds,freedat + mov si,2 + + mov cx,0 +loop127: push cx si + + push si + mov es,freedat + call getmapad + pop si + cmp ch,0 + jz over138 + + mov al,currentfree + mov ah,0 + mov dx,ax + add ax,ax + add ax,dx + mov currentframe,ax + + push es si + call calcfrframe + mov es,mapstore + mov ds,frsegment + call finalframe + pop si es + cmp cx,0 + jz over138 + + mov ax,currentframe + mov ah,0 + add di,mapadx + add bx,mapady + call showframe + mov si,listpos + mov es,buffers + mov al,savex + mov ah,savey + mov [es:si],ax + mov cx,ax + mov ax,savesize + add al,cl + add ah,ch + mov [es:si+2],ax + pop ax cx + push cx ax + mov [es:si+4],cl + add si,5 + mov listpos,si + +over138: inc currentfree + pop si cx + add si,16 + inc cx + cmp cx,80 + jz finfree + jmp loop127 + +finfree: ret + + endp + + + + + + + + + + + + +Showallex proc near + + mov es,buffers + mov bx,exlist + mov listpos,bx + mov di,exlist + mov cx,100*5 + mov al,255 + rep stosb + + mov es,extras + mov frsegment,es + mov ax,exframedata + mov dataad,ax + mov ax,exframes + mov framesad,ax + mov currentex,0 + + mov si,exdata+2 + + mov cx,0 +exloop: push cx si + + mov es,extras + + push si + mov ch,0 + cmp byte ptr [es:si],255 + jz notinroom + mov al,[es:si-2] + cmp al,reallocation + jnz notinroom + call getmapad +notinroom: pop si + cmp ch,0 + jz blankex + + mov al,currentex + mov ah,0 + mov dx,ax + add ax,ax + add ax,dx + mov currentframe,ax + + push es si + call calcfrframe + mov es,mapstore + mov ds,frsegment + call finalframe + pop si es + cmp cx,0 + jz blankex + + mov ax,currentframe + mov ah,0 + add di,mapadx + add bx,mapady + call showframe + mov si,listpos + mov es,buffers + mov al,savex + mov ah,savey + mov [es:si],ax + mov cx,ax + mov ax,savesize + add al,cl + add ah,ch + mov [es:si+2],ax + pop ax cx + push cx ax + mov [es:si+4],cl + add si,5 + mov listpos,si + +blankex: inc currentex + pop si cx + add si,16 + inc cx + cmp cx,100 + jz finex + jmp exloop + +finex: ret + + endp + + + + + + + +Calcfrframe proc near + + mov dx,frsegment + mov ax,framesad + push ax + mov cx,dataad + mov ax,currentframe + mov ds,dx + mov bx,6 + mul bx + add ax,cx + mov bx,ax + mov cx,[bx] + mov ax,[bx+2] + mov dx,[bx+4] + pop bx + push dx + add ax,bx ;ax=source add, cx=x,y + ;need this later + mov savesource,ax + mov savesize,cx + pop ax + push ax + mov ah,0 + mov offsetx,ax + pop ax + mov al,ah + mov ah,0 + mov offsety,ax + ret +nullframe: pop ax + mov cx,0 + mov savesize,cx + ret + + endp + + + + + + + + + + + + + + + + + + +Finalframe proc near + + mov ax,objecty + add ax,offsety + mov bx,objectx + add bx,offsetx + mov savex,bl + mov savey,al + mov di,objectx + mov bx,objecty + ret + + endp + + + + + + + + + + + + + +Adjustlen proc near + + mov ah,al + add al,ch + cmp al,100 + jc over242 + mov al,224 + sub al,ch + mov ch,al +over242: ret + + endp + + + + + + + + + +Getmapad proc near + + call getxad + cmp ch,0 + jz over146 + mov objectx,ax + call getyad + cmp ch,0 + jz over146 + mov objecty,ax + mov ch,1 +over146: ret + + endp + + + + + + + + + +Getxad proc near + + mov cl,[es:si] + inc si + mov al,[es:si] + inc si + mov ah,[es:si] + inc si + cmp cl,0 + jnz over148 + sub al,mapx + jc over148 + cmp al,11 + jnc over148 + mov cl,4 + shl al,cl + or al,ah + mov ah,0 + mov ch,1 + ret +over148: mov ch,0 + ret + + endp + + + + + + + + + +Getyad proc near + + mov al,[es:si] + inc si + mov ah,[es:si] + inc si + sub al,mapy + jc over147 + cmp al,10 + jnc over147 + mov cl,4 + shl al,cl + or al,ah + mov ah,0 + mov ch,1 + ret + +over147: mov ch,0 + ret + + endp + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/debug.asm b/devtools/tasmrecover/dreamweb/debug.asm new file mode 100644 index 0000000000..991e240fd1 --- /dev/null +++ b/devtools/tasmrecover/dreamweb/debug.asm @@ -0,0 +1,382 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text + + if debuglevel2 + + +Debugkeys proc near + + ret + + endp + + + +Debugstart proc near + + call allpalette + mov reeltohold,-1 + mov newlocation,23 + mov dreamnumber,0 + mov al,"W" + mov ah,"S" + mov cl,"H" + mov ch,"D" + call findexobject + mov byte ptr [es:bx+12],"S"-"A" + mov byte ptr [es:bx+13],"C"-"A" + mov byte ptr [es:bx+14],"R"-"A" + mov byte ptr [es:bx+15],"W"-"A" + mov al,"W" + mov ah,"E" + mov cl,"T" + mov ch,"A" + call findexobject + mov byte ptr [es:bx+12],"G"-"A" + mov byte ptr [es:bx+13],"U"-"A" + mov byte ptr [es:bx+14],"N"-"A" + mov byte ptr [es:bx+15],"A"-"A" + mov al,"W" + mov ah,"E" + mov cl,"T" + mov ch,"B" + call findexobject + mov byte ptr [es:bx+12],"S"-"A" + mov byte ptr [es:bx+13],"H"-"A" + mov byte ptr [es:bx+14],"L"-"A" + mov byte ptr [es:bx+15],"D"-"A" + mov card1money,12342 + + ret + + endp + + + + + +Debuggreen proc near + + push ax dx + mov al,0 + mov dx,3c8h + out dx,al + mov dx,3c9h + mov al,0 + out dx,al + mov al,63 + out dx,al + mov al,0 + out dx,al + pop dx ax + ret + + endp + + + + + + + + +Debugred proc near + + push ax dx + mov al,0 + mov dx,3c8h + out dx,al + mov dx,3c9h + mov al,63 + out dx,al + mov al,0 + out dx,al + mov al,0 + out dx,al + pop dx ax + ret + + endp + + + + +Debugblue proc near + + push ax dx + mov al,0 + mov dx,3c8h + out dx,al + mov dx,3c9h + mov al,0 + out dx,al + mov al,0 + out dx,al + mov al,63 + out dx,al + pop dx ax + ret + + endp + + + + + +Debugblack proc near + + push dx ax + mov al,0 + mov dx,3c8h + out dx,al + mov dx,3c9h + mov al,0 + out dx,al + mov al,0 + out dx,al + mov al,0 + out dx,al + pop ax dx + ret + + endp + + + + + + + + + + + +Debug proc near + + push ds dx cx + mov ah,3ch + mov cx,0 + mov dx,seg filenamed + mov ds,dx + mov dx,offset filenamed + int 21h + mov bx,ax + pop cx dx ds + push bx + mov ah,40h + int 21h + pop bx + mov ah,3eh + int 21h + ret + +filenamed db "DREAMWEB.TXT",0 + + endp + + + + + + + + +Shout proc near + + push ax bx cx dx si di es ds + call debugblue + mov cx,50 + call hangon + call debugblack + mov cx,10 + call hangon + pop ds es di si dx cx bx ax + ret + + endp + + +Shoutred proc near + + push ax bx cx dx si di es ds + call debugred + mov cx,4 + call hangon + call debugblack + mov cx,40 + call hangon + pop ds es di si dx cx bx ax + ret + + endp + + + +Shoutgreen proc near + + push ax bx cx dx si di es ds + call debuggreen + mov cx,4 + call hangon + call debugblack + mov cx,40 + call hangon + pop ds es di si dx cx bx ax + ret + + endp + + + + + + + + + +;Checkmemingame proc near + +; cmp charset1,0 +; jz nodebug +; mov bx,60000 +; mov ah,48h +; int 21h +; mov ax,bx +; mov cl,6 +; shr ax,cl +; mov di,offset cs:debugtextig +; call showword + +; mov ax,soundbufferwrite +; ;mov ax,exframepos +; mov di,offset cs:debugtextex +; call showword + +; ;mov ax,extextpos +; ;mov di,offset cs:debugtextex2 +; ;call showword + +; push cs +; pop es +; mov si,offset cs:debugtextig +; mov al,0 +; mov ah,0 +; mov dl,100 +; mov di,204 +; mov bx,14 +; call printdirect +; push cs +; pop es +; mov si,offset cs:debugtextex +; mov al,0 +; mov ah,0 +; mov dl,100 +; mov di,204 +; mov bx,22 +; call printdirect +; push cs +; pop es +; mov si,offset cs:debugtextex2 +; mov al,0 +; mov ah,0 +; mov dl,100 +; mov di,204 +; mov bx,30 +; call printdirect +; mov di,204 +; mov bx,14 +; mov cl,40 +; mov ch,24 +; call multidump +;nodebug: ret + + endp + +debugtextig: db "00000K",0 + +debugtextex: db "00000b",0 + +debugtextex2: db "00000b",0 + + + + + + + if recording + + mov ax,recordpos + mov di,offset cs:debugtextr + call showword + + mov al,0 + call print + dw 4,4,100 +debugtextr: db "00000",0 + + mov si,0 + mov di,0 + mov cl,40 + mov ch,12 + call multidump + + endif + + ret + + endp + + + + + + + + + + + + + + + + + + +;Debugax proc near +; +; push ax +; call showpanel +; pop ax +; mov di,offset cs:debugaxtext +; call showword +; +; mov di,204 +; mov bx,14 +; mov al,0 +; mov ah,0 +; mov dl,100 +; push cs +; pop es +; mov si,offset cs:debugaxtext +; call printdirect +; mov di,204 +; mov bx,14 +; mov cl,40 +; mov ch,24 +; call multidump +; ret +; +;debugaxtext db "00000 ",0 +; +; endp + + + + + + + + endif +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/dreamweb.asm b/devtools/tasmrecover/dreamweb/dreamweb.asm new file mode 100644 index 0000000000..5d2a60a0c7 --- /dev/null +++ b/devtools/tasmrecover/dreamweb/dreamweb.asm @@ -0,0 +1,6269 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text + + + + + + + + + +;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ +;³ ³ +;³ DREAMWEB ³ +;³ ³ +;³ ³ +;³ ³ +;³ ³ +;³ Written by Neil Dodwell. Graphics by Dave Dew. ³ +;³ ³ +;³ Started on Friday 28 December 1990 at 1:20 pm ³ +;³ ³ +;³ Copyright 1990/1991 Creative Reality ³ ³ +;³ ³ +;³ ³ +;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ + + + + + + + + + + + + + + + +;----------------------------------------------------------Assembly options---- + +JUMPS + +playback equ 0 +recording equ 0 +debuglevel1 equ 0 ;memory debug on +debuglevel2 equ 0 ;debug keys on+shouts +demo equ 0 +CD equ 1 +Foreign equ 0 +Spanish equ 0 +German equ 0 + +;----------------------------------------------------------------Code start---- + +DREAMWEBPROG segment para public 'CODE' + + assume cs:DREAMWEBPROG,ss:STACKSPACE + + + + +;------------------------------------------------------------------Includes---- + +include \pc\dreamweb\vars.asm ;variables and equates +include \pc\dreamweb\sprite.asm ;sprite routines +include \pc\dreamweb\vgagrafx.asm ;screen routines for vga +include \pc\dreamweb\vgafades.asm ;fade routines +include \pc\dreamweb\titles.asm ;guess! +include \pc\dreamweb\print.asm ;text printing routines +include \pc\dreamweb\object.asm ;pickup +include \pc\dreamweb\backdrop.asm ;draws floor etc. +include \pc\dreamweb\look.asm ;look command +include \pc\dreamweb\talk.asm ;conversations +include \pc\dreamweb\newplace.asm ;travel +include \pc\dreamweb\monitor.asm ;network machine +include \pc\dreamweb\use.asm ;individual use routines +include \pc\dreamweb\keypad.asm ;accept code with keypad +include \pc\dreamweb\saveload.asm ;in game options +include \pc\dreamweb\sblaster.asm + if debuglevel1 +include \pc\dreamweb\debug.asm + else + if debuglevel2 +include \pc\dreamweb\debug.asm + endif + endif + +;-----------------------------------------------------------------Main loop---- + + +Dreamweb proc near + + call seecommandtail + + call checkbasemem + call soundstartup + call setkeyboardint + call setupemm + call allocatebuffers + call setmouse + call fadedos + call gettime + + call clearbuffers + call clearpalette + call set16colpalette + call readsetdata + if demo + call changeroomnums + endif + mov wongame,0 + + mov dx,offset cs:basicsample + call loadsample + call setsoundoff + + if demo + else + call scanfornames + cmp al,0 + jnz dodecisions + endif + + call setmode + call loadpalfromiff + + call titles + call credits + jmp playgame + +dodecisions: call cls + call setmode + call decide + cmp getback,4 + jz mainloop + + call titles + call credits + +playgame: call clearchanges + call setmode + call loadpalfromiff + mov location,255 + mov roomafterdream,1 + if demo + mov newlocation,5 + else + mov newlocation,35 + endif + mov volume,7 + call loadroom + call clearsprites + call initman + call entrytexts + call entryanims + mov destpos,3 + call initialinv + mov lastflag,32 + call startup1 + mov volumeto,0 + mov volumedirection,-1 + mov commandtype,255 + jmp mainloop + +loadnew: if demo + cmp newlocation,27 + jnz not27 + call fadescreendowns + mov cx,260 + call hangon + call clearbeforeload + jmp playgame +not27: + endif + call clearbeforeload + call loadroom + call clearsprites + call initman + call entrytexts + call entryanims + mov newlocation,255 + call startup + mov commandtype,255 + call worktoscreenm + jmp mainloop + +alreadyloaded: mov newlocation,255 + call clearsprites + call initman + call startup + mov commandtype,255 + +mainloop: + cmp quitrequested, 0 + jz $1 + ret +$1: + call screenupdate + cmp wongame,0 + jnz endofgame + cmp mandead,1 + jz gameover + cmp mandead,2 + jz gameover + cmp watchingtime,0 + jz notwatching + mov al,finaldest + cmp al,manspath + jnz mainloop + dec watchingtime + jnz mainloop + +notwatching: cmp mandead,4 + jz gameover + cmp newlocation,255 + jnz loadnew + jmp mainloop + +gameover: if demo + call fadescreendowns + mov cx,260 + call hangon + call clearbeforeload + jmp playgame + endif + call clearbeforeload + call showgun + call fadescreendown + mov cx,100 + call hangon + jmp dodecisions + +endofgame: call clearbeforeload + call fadescreendowns + mov cx,200 + call hangon + call endgame + jmp quickquit2 + + endp + + + + + endp + + + + if demo + +Changeroomnums proc near + + mov di,offset cs:roomdata+10 + mov cx,50 +changenumloop: mov al,[cs:di] + cmp al,"0" + jnz nochange + mov al,[cs:di+1] + cmp al,"5" + jnz nochange + mov al,"6" + mov ah,"0" + mov [cs:di],ax +nochange: add di,32 + loop changenumloop + ret + + endp + + endif + + + + +Entrytexts proc near + + cmp location,21 + jnz notloc15 + mov al,28 + mov cx,60 + mov dx,11 + mov bl,68 + mov bh,64 + call setuptimeduse + ret +notloc15: cmp location,30 + jnz notloc43 + mov al,27 + mov cx,60 + mov dx,11 + mov bl,68 + mov bh,64 + call setuptimeduse + ret +notloc43: cmp location,23 + jnz notloc23 + mov al,29 + mov cx,60 + mov dx,11 + mov bl,68 + mov bh,64 + call setuptimeduse + ret +notloc23: cmp location,31 + jnz notloc44 + mov al,30 + mov cx,60 + mov dx,11 + mov bl,68 + mov bh,64 + call setuptimeduse + ret +notloc44: cmp location,20 + jnz notsarters2 + mov al,31 + mov cx,60 + mov dx,11 + mov bl,68 + mov bh,64 + call setuptimeduse + ret +notsarters2: cmp location,24 + jnz notedenlob + mov al,32 + mov cx,60 + mov dx,3 + mov bl,68 + mov bh,64 + call setuptimeduse + ret +notedenlob: cmp location,34 + jnz noteden2 + mov al,33 + mov cx,60 + mov dx,3 + mov bl,68 + mov bh,64 + call setuptimeduse + ret +noteden2: ret + + endp + + + + + + + + +Entryanims proc near + + mov reeltowatch,-1 + mov watchmode,-1 + cmp location,33 + jnz notinthebeach + call switchryanoff + mov watchingtime,76*2 + mov reeltowatch,0 + mov endwatchreel,76 + mov watchspeed,1 + mov speedcount,1 + ret +notinthebeach: cmp location,44 + jnz notsparkys + mov al,8 + call resetlocation + mov watchingtime,50*2 + mov reeltowatch,247 + mov endwatchreel,297 + mov watchspeed,1 + mov speedcount,1 + call switchryanoff + ret +notsparkys: cmp location,22 + jnz notinthelift + mov watchingtime,31*2 + mov reeltowatch,0 + mov endwatchreel,30 + mov watchspeed,1 + mov speedcount,1 + call switchryanoff + ret +notinthelift: cmp location,26 + jnz notunderchurch + mov symboltopnum,2 + mov symbolbotnum,1 + ret +notunderchurch: cmp location,45 + jnz notenterdream + mov keeperflag,0 + mov watchingtime,296 + mov reeltowatch,45 + mov endwatchreel,198 + mov watchspeed,1 + mov speedcount,1 + call switchryanoff + ret +notenterdream: cmp reallocation,46 + jnz notcrystal + cmp sartaindead,1 + jnz notcrystal + mov al,0 + call removefreeobject + ret +notcrystal: cmp location,9 + jnz nottopchurch + mov al,2 + call checkifpathison + jz nottopchurch + cmp aidedead,0 + jz nottopchurch + mov al,3 + call checkifpathison + jnz makedoorsopen + mov al,2 + call turnpathon +makedoorsopen: mov al,4 + call removesetobject + mov al,5 + call placesetobject + ret +nottopchurch: cmp location,47 + jnz notdreamcentre + mov al,4 + call placesetobject + mov al,5 + call placesetobject + ret +notdreamcentre: cmp location,38 + jnz notcarpark + mov watchingtime,57*2 + mov reeltowatch,4 + mov endwatchreel,57 + mov watchspeed,1 + mov speedcount,1 + call switchryanoff + ret +notcarpark: cmp location,32 + jnz notalley + mov watchingtime,66*2 + mov reeltowatch,0 + mov endwatchreel,66 + mov watchspeed,1 + mov speedcount,1 + call switchryanoff + ret +notalley: cmp location,24 + jnz notedensagain + mov al,2 + mov ah,roomnum + dec ah + call turnanypathon +notedensagain: ret + + endp + + + + + + + if demo +Initialinv proc near + + mov al,11 + mov ah,5 + call pickupob + mov al,12 + mov ah,6 + call pickupob + mov al,13 + mov ah,7 + call pickupob + mov al,14 + mov ah,8 + call pickupob + mov al,18 + mov ah,0 + call pickupob + mov al,19 + mov ah,1 + call pickupob + mov al,20 + mov ah,9 + call pickupob + mov al,16 + mov ah,2 + call pickupob + + mov al,2 + mov ah,4 + call pickupob + + mov al,29 + mov ah,10 + call pickupob + mov al,33 + mov ah,11 + call pickupob + mov al,44 + mov ah,12 + call pickupob + mov card1money,12342 + ret + + endp + else +Initialinv proc near + + cmp reallocation,24 + jz isedens + ret + +isedens: mov al,11 + mov ah,5 + call pickupob + mov al,12 + mov ah,6 + call pickupob + mov al,13 + mov ah,7 + call pickupob + mov al,14 + mov ah,8 + call pickupob + mov al,18 + mov al,18 + mov ah,0 + call pickupob + mov al,19 + mov ah,1 + call pickupob + mov al,20 + mov ah,9 + call pickupob + mov al,16 + mov ah,2 + call pickupob + + mov watchmode,1 + mov reeltohold,0 + mov endofholdreel,6 + mov watchspeed,1 + mov speedcount,1 + call switchryanoff + ret + + endp + + endif + + + + + + + + + + + +Pickupob proc near + + mov lastinvpos,ah + mov objecttype,2 + mov itemframe,al + mov command,al + call getanyad + call transfertoex + ret + + endp + + + + + + + + + + + + + + + +;---------------------------------------------------------Memory allocation---- + + + + +Setupemm proc near + + cmp soundint,255 + jz noneedforemm + call checkforemm + + mov ah,43h ;allocate handle and 160 pages + mov bx,176 ;was 176 + int 67h + cmp ah,0 + jnz emmerror1 ;if there's an error drop to DOS + mov emmhandle,dx + mov ah,41h ;get the page frame base address + int 67h + cmp ah,0 + jnz emmerror1 + mov emmpageframe,bx + mov ax,bx + mov cl,12 + shr ax,cl + mov emmhardwarepage,al +noneedforemm: ret +emmerror1: mov gameerror,1 + jmp quickquit2 + + endp + + + + + + + + +Removeemm proc near + + cmp soundint,255 + jz noneedtoremove + mov ah,45h + mov dx,emmhandle + int 67h +noneedtoremove: ret + + endp + + + + + +Checkforemm proc near + + ret + + endp + + + + +Checkbasemem proc near + + mov bx,howmuchalloc + cmp bx,9360h + jnc enoughmem + mov gameerror,5 + jmp quickquit +enoughmem: ret + + endp + + + +Allocatebuffers proc near + + mov bx,lengthofextra/16 + call allocatemem + mov extras,ax + + call trysoundalloc + mov bx,lengthofmap/16 + call allocatemem + mov mapdata,ax + + call trysoundalloc + mov bx,lengthofbuffer/16 + call allocatemem + mov buffers,ax + + call trysoundalloc + mov bx,freedatlen/16 + call allocatemem + mov freedat,ax + + call trysoundalloc + mov bx,setdatlen/16 + call allocatemem + mov setdat,ax + + call trysoundalloc + mov bx,lenofmapstore/16 + call allocatemem + mov mapstore,ax + + if recording + mov bx,1028 + call allocatemem + mov recordspace,ax + endif + + if playback + mov bx,1028 + call allocatemem + mov recordspace,ax + endif + + call allocatework + + mov bx,2048/16 + call allocatemem + mov sounddata,ax + + mov bx,2048/16 + call allocatemem + mov sounddata2,ax + ret + + endp + + + + + + + + + + +Clearbuffers proc near + + mov es,buffers + mov cx,lengthofbuffer/2 + mov ax,0 + mov di,0 + rep stosw + + mov es,extras + mov cx,lengthofextra/2 + mov ax,0ffffh + mov di,0 + rep stosw + + mov es,buffers + mov di,initialreelrouts + push cs + pop ds + mov si,offset cs:reelroutines + mov cx,lenofreelrouts + rep movsb + + mov es,buffers + mov di,initialvars + push cs + pop ds + mov si,offset cs:startvars + mov cx,lengthofvars + rep movsb + call clearchanges + ret + + endp + + + + + + +Clearchanges proc near + + mov es,buffers + mov cx,numchanges*2 + mov ax,0ffffh + mov di,listofchanges + rep stosw + mov ds,buffers + mov si,initialreelrouts + push cs + pop es + mov di,offset cs:reelroutines + mov cx,lenofreelrouts + rep movsb + + mov ds,buffers + mov si,initialvars + push cs + pop es + mov di,offset cs:startvars + mov cx,lengthofvars + rep movsb + + mov expos,0 + mov exframepos,0 + mov extextpos,0 + mov es,extras + mov cx,lengthofextra/2 + mov ax,0ffffh + mov di,0 + rep stosw + + push cs + pop es + mov di,offset cs:roomscango + mov al,1 + stosb + stosb + mov al,0 + stosb + mov al,1 + stosb + mov ax,0 + mov cx,6 + rep stosw + ret + + endp + + + + + + + +Clearbeforeload proc near ;deallocates variable buffers + ;and clears out fixed ones + cmp roomloaded,1 + jnz noclear + call clearreels + call clearrest + mov roomloaded,0 +noclear: ret + + endp + + + +;Clearnoreels proc near +; +; cmp roomloaded,1 +; jnz noclear2 +; call clearrest +; mov roomloaded,0 +;noclear2: ret +; +; endp + + + + + + +Clearreels proc near + + mov es,reel1 + call deallocatemem + mov es,reel2 + call deallocatemem + mov es,reel3 + call deallocatemem + ret + + endp + + + +Clearrest proc near + + mov es,mapdata + mov cx,maplen/2 + mov ax,0 + mov di,map + rep stosw + + mov es,backdrop + call deallocatemem + mov es,setframes + call deallocatemem + mov es,reels + call deallocatemem + mov es,people + call deallocatemem + mov es,setdesc + call deallocatemem + mov es,blockdesc + call deallocatemem + mov es,roomdesc + call deallocatemem + mov es,freeframes + call deallocatemem + mov es,freedesc + call deallocatemem + ret + + endp + + + + + + +Deallocatemem proc near + + mov ah,49h + int 21h + jc deallerror + ret +deallerror: mov gameerror,4 + jmp quickquit2 + ret + + endp + + + + + + + + +Allocatemem proc near + + add bx,2 + mov ah,48h + int 21h + jc memerror + ret + +memerror: mov gameerror,3 + jmp quickquit2 + + endp + + + + +Seecommandtail proc near + + mov soundbaseadd,220h + mov soundint,5 + mov sounddmachannel,1 + mov brightness,0 + + mov bx,2 + mov ax,[es:bx] + mov dx,es + sub ax,dx + mov howmuchalloc,ax + + mov bx,02ch + mov ax,[es:bx] + push es bx + + mov es,ax + mov bx,0 +findblaster: mov ax,[es:bx] + cmp ax,0 + jz endofenvironment + cmp al,"B" + jnz notblast + cmp ah,"L" + jnz notblast + cmp byte ptr [es:bx+2],"A" + jnz notblast + cmp byte ptr [es:bx+3],"S" + jnz notblast + cmp byte ptr [es:bx+4],"T" + jnz notblast + cmp byte ptr [es:bx+5],"E" + jnz notblast + cmp byte ptr [es:bx+6],"R" + jnz notblast + add bx,7 + call parseblaster + jmp endofenvironment +notblast: inc bx + jmp findblaster + +endofenvironment: pop bx es + mov bx,81h + call parseblaster + ret + + endp + + + +Parseblaster proc near + +lookattail: mov al,[es:bx] + cmp al,0 + jz endtail + cmp al,13 + jz endtail + cmp al,"i" + jz issoundint + cmp al,"I" + jz issoundint + cmp al,"b" + jz isbright + cmp al,"B" + jz isbright + cmp al,"a" + jz isbaseadd + cmp al,"A" + jz isbaseadd + cmp al,"n" + jz isnosound + cmp al,"N" + jz isnosound + cmp al,"d" + jz isdma + cmp al,"D" + jz isdma + inc bx + loop lookattail + ret + +issoundint: mov al,[es:bx+1] + sub al,"0" + mov soundint,al + inc bx + jmp lookattail +isdma: mov al,[es:bx+1] + sub al,"0" + mov sounddmachannel,al + inc bx + jmp lookattail +isbaseadd: push cx + mov al,[es:bx+2] + sub al,"0" + mov ah,0 + mov cl,4 + shl ax,cl + add ax,200h + mov soundbaseadd,ax + pop cx + inc bx + jmp lookattail +isbright: mov brightness,1 + inc bx + jmp lookattail +isnosound: mov soundint,255 + inc bx + jmp lookattail +endtail: ret + + endp + + + + +;-------------------------------------------------------High level routines---- + +Startup proc near + + mov currentkey,0 + mov mainmode,0 + call createpanel + mov newobs,1 + call drawfloor + call showicon + call getunderzoom + call spriteupdate + call printsprites + call undertextline + call reelsonscreen + call atmospheres + ret + + endp + + + + +Startup1 proc near + + + call clearpalette + mov throughdoor,0 + mov currentkey,"0" + mov mainmode,0 + call createpanel + mov newobs,1 + call drawfloor + + call showicon + call getunderzoom + call spriteupdate + call printsprites + call undertextline + call reelsonscreen + call atmospheres + call worktoscreen + call fadescreenup + ret + + endp + + + + + + + + +;--------------------------------------------------Scroll location routines---- + + + + + +Screenupdate proc near + + call newplace + call mainscreen + call animpointer + call showpointer + cmp watchingtime,0 + jnz iswatchingmode + cmp newlocation,255 + jnz finishearly +iswatchingmode: call vsync + call readmouse1 + call dumppointer + call dumptextline + call delpointer + call autolook + call spriteupdate + call watchcount + call zoom + call showpointer + cmp wongame,0 + jnz finishearly + + call vsync + call readmouse2 + call dumppointer + call dumpzoom + call delpointer + call deleverything + call printsprites + call reelsonscreen + call afternewroom + call showpointer + + call vsync + call readmouse3 + call dumppointer + call dumpmap + call dumptimedtext + call delpointer + call showpointer + + call vsync + call readmouse4 + call dumppointer + call dumpwatch + call delpointer + +finishearly: ret + + endp + + + + + + + + + + + + + + + +Watchreel proc near + + cmp reeltowatch,-1 + jz notplayingreel + mov al,manspath + cmp al,finaldest + jnz waitstopwalk + mov al,turntoface + cmp al,facing + jz notwatchpath +waitstopwalk: ret + +notwatchpath: dec speedcount + cmp speedcount,-1 + jnz showwatchreel + mov al,watchspeed + mov speedcount,al + mov ax,reeltowatch + cmp ax,endwatchreel + jnz ismorereel + cmp watchingtime,0 + jnz showwatchreel + mov reeltowatch,-1 + mov watchmode,-1 + cmp reeltohold,-1 + jz nomorereel + mov watchmode,1 + jmp notplayingreel +ismorereel: inc reeltowatch +showwatchreel: mov ax,reeltowatch + mov reelpointer,ax + call plotreel + mov ax,reelpointer + mov reeltowatch,ax + call checkforshake +nomorereel: ret + + +notplayingreel: cmp watchmode,1 + jnz notholdingreel + mov ax,reeltohold + mov reelpointer,ax + call plotreel + ret + +notholdingreel: cmp watchmode,2 + jnz notreleasehold + dec speedcount + cmp speedcount,-1 + jnz notlastspeed2 + mov al,watchspeed + mov speedcount,al + inc reeltohold +notlastspeed2: mov ax,reeltohold + cmp ax,endofholdreel + jnz ismorereel2 + mov reeltohold,-1 + mov watchmode,-1 + mov al,destafterhold + mov destination,al + mov finaldest,al + call autosetwalk + ret +ismorereel2: mov ax,reeltohold + mov reelpointer,ax + call plotreel + ret + +notreleasehold: ret + + endp + + + + + +Checkforshake proc near + + cmp reallocation,26 + jnz notstartshake + cmp ax,104 + jnz notstartshake + mov shakecounter,-1 +notstartshake: ret + + endp + + + + + +Watchcount proc near + + cmp watchon,0 + jz nowatchworn + inc timercount + cmp timercount,9 + jz flashdots + cmp timercount,18 + jz uptime +nowatchworn: ret + +flashdots: mov ax,91*3+21 + mov di,268+4 + mov bx,21 + mov ds,charset1 + call showframe + jmp finishwatch + +uptime: mov timercount,0 + add secondcount,1 + cmp secondcount,60 + jnz finishtime + mov secondcount,0 + inc minutecount + cmp minutecount,60 + jnz finishtime + mov minutecount,0 + inc hourcount + cmp hourcount,24 + jnz finishtime + mov hourcount,0 + +finishtime: call showtime +finishwatch: mov watchdump,1 + ret + + endp + + + +Showtime proc near + + cmp watchon,0 + jz nowatch + + mov al,secondcount + mov cl,0 + call twodigitnum + push ax + mov al,ah + mov ah,0 + add ax,91*3+10 + mov ds,charset1 + mov di,282+5 + mov bx,21 + call showframe + pop ax + mov ah,0 + add ax,91*3+10 + mov ds,charset1 + mov di,282+9 + mov bx,21 + call showframe + + mov al,minutecount + mov cl,0 + call twodigitnum + push ax + mov al,ah + mov ah,0 + add ax,91*3 + mov ds,charset1 + mov di,270+5 + mov bx,21 + call showframe + pop ax + mov ah,0 + add ax,91*3 + mov ds,charset1 + mov di,270+11 + mov bx,21 + call showframe + + mov al,hourcount + mov cl,0 + call twodigitnum + push ax + mov al,ah + mov ah,0 + add ax,91*3 + mov ds,charset1 + mov di,256+5 + mov bx,21 + call showframe + pop ax + mov ah,0 + add ax,91*3 + mov ds,charset1 + mov di,256+11 + mov bx,21 + call showframe + + mov ax,91*3+20 + mov ds,charset1 + mov di,267+5 + mov bx,21 + call showframe +nowatch: ret + + + endp + + + + +Dumpwatch proc near + + cmp watchdump,1 + jnz nodumpwatch + mov di,256 + mov bx,21 + mov cl,40 + mov ch,12 + call multidump + mov watchdump,0 +nodumpwatch: ret + + endp + + + + +Showbyte proc near + + mov dl,al + shr dl,1 + shr dl,1 + shr dl,1 + shr dl,1 + call onedigit + mov [es:di],dl + mov dl,al + and dl,15 + call onedigit + mov [es:di+1],dl + add di,3 + ret + + endp + + +Onedigit proc near + + cmp dl,10 + jnc morethan10 + add dl,"0" + ret +morethan10: sub dl,10 + add dl,"A" + ret + + endp + + + + + +Twodigitnum proc near + + mov ah,cl + dec ah +numloop1: inc ah + sub al,10 + jnc numloop1 + add al,10 + add al,cl + ret + + endp + + + + + +Showword proc near + + mov ch,0 + mov bx,10000 + mov cl,47 +word1: inc cl + sub ax,bx + jnc word1 + add ax,bx + call convnum + mov [cs:di],cl + mov bx,1000 + mov cl,47 +word2: inc cl + sub ax,bx + jnc word2 + add ax,bx + call convnum + mov [cs:di+1],cl + mov bx,100 + mov cl,47 +word3: inc cl + sub ax,bx + jnc word3 + add ax,bx + call convnum + mov [cs:di+2],cl + mov bx,10 + mov cl,47 +word4: inc cl + sub ax,bx + jnc word4 + add ax,bx + call convnum + mov [cs:di+3],cl + add al,48 + mov cl,al + call convnum + mov [cs:di+4],cl + ret + + endp + + + + +Convnum proc near + + cmp ch,0 + jnz noconvnum + cmp cl,"0" + jnz notzeronum + mov cl,32 + jmp noconvnum +notzeronum: mov ch,1 +noconvnum: ret + + endp + + + + + + + + +;---------------------------------------------Handling of pointer on screen---- + +Mainscreen proc near + + mov inmaparea,0 + mov bx,offset cs:mainlist + cmp watchon,1 + jz checkmain + mov bx,offset cs:mainlist2 +checkmain: call checkcoords + cmp walkandexam,0 + jz finishmain + call walkandexamine +finishmain: ret + +mainlist: dw 44,70,32,46,look + dw 0,50,0,180,inventory + dw 226,244,10,26,zoomonoff + dw 226,244,26,40,saveload + dw 240,260,100,124,madmanrun + dw 0,320,0,200,identifyob + dw 0ffffh + +mainlist2: dw 44,70,32,46,look + dw 0,50,0,180,inventory + dw 226+48,244+48,10,26,zoomonoff + dw 226+48,244+48,26,40,saveload + dw 240,260,100,124,madmanrun + dw 0,320,0,200,identifyob + dw 0ffffh + + endp + + + + + + +Madmanrun proc near + + cmp location,14 + jnz identifyob + cmp mapx,22 + jnz identifyob + cmp pointermode,2 + jnz identifyob + cmp madmanflag,0 + jnz identifyob + + cmp commandtype,211 + jz alreadyrun + mov commandtype,211 + mov al,52 + call commandonly +alreadyrun: cmp mousebutton,1 + jnz norun + mov ax,mousebutton + cmp ax,oldbutton + jz norun + mov lastweapon,8 +norun: ret + + endp + + + + + + +Checkcoords proc near + cmp newlocation,255 ;objects keep enumerated even in loading state, fixme + jz loop048 + ret + +loop048: mov ax,[cs:bx] + cmp ax,0ffffh + jz nonefound + push bx + cmp mousex,ax + jl over045 + mov ax,[cs:bx+2] + cmp mousex,ax + jge over045 + mov ax,[cs:bx+4] + cmp mousey,ax + jl over045 + mov ax,[cs:bx+6] + cmp mousey,ax + jge over045 + mov ax,[cs:bx+8] + call ax +finished: pop ax + ret +over045: pop bx + add bx,10 + jmp loop048 +nonefound: ret + + endp + + + + + +;-------------------------------------------Printing of icons during scroll---- + + + + + +Identifyob proc near + + cmp watchingtime,0 + jnz blank + + mov ax,mousex + sub ax,mapadx + cmp ax,22*8 + jc notover1 + call blank + ret + +notover1: mov bx,mousey + sub bx,mapady + cmp bx,20*8 + jc notover2 + call blank + ret + +notover2: mov inmaparea,1 + mov ah,bl + push ax + call findpathofpoint + mov pointerspath,dl + pop ax + push ax + call findfirstpath + mov pointerfirstpath,al + pop ax + + call checkifex + jnz finishidentify + call checkiffree + jnz finishidentify + call checkifperson + jnz finishidentify + call checkifset + jnz finishidentify + + mov ax,mousex + sub ax,mapadx + mov cl,al + mov ax,mousey + sub ax,mapady + mov ch,al + call checkone + cmp al,0 + jz nothingund + ;cmp watchingtime,0 + ;jnz nothingund + cmp mandead,1 + jz nothingund + mov ah,3 + call obname +finishidentify: ret + +nothingund: call blank + ret + + endp + + + + + + + + +Checkifperson proc near + + mov es,buffers + mov bx,peoplelist + mov cx,12 +identifyreel: push cx + + cmp byte ptr [es:bx+4],255 + jz notareelid + + push es bx ax + mov ax,[es:bx+0] + mov reelpointer,ax + call getreelstart + cmp [es:si+2],0ffffh + jnz notblankpers + add si,5 +notblankpers: mov cx,[es:si+2] ;x,y of reel slot + mov ax,[es:si+0] ;frame number + push cx + call getreelframeax + pop cx + add cl,[es:bx+4] + add ch,[es:bx+5] + mov dx,cx + add dl,[es:bx+0] + add dh,[es:bx+1] + pop ax bx es + + cmp al,cl + jc notareelid + cmp ah,ch + jc notareelid + cmp al,dl + jnc notareelid + cmp ah,dh + jnc notareelid + + pop cx + mov ax,[es:bx+2] + mov persondata,ax + mov al,[es:bx+4] + mov ah,5 + call obname + mov al,0 + cmp al,1 + ret + +notareelid: pop cx + add bx,5 + dec cx + jnz identifyreel + ret + + endp + + + + + + + + +Checkifset proc near + + mov es,buffers + mov bx,setlist+(127*5) + mov cx,127 +identifyset: cmp byte ptr [es:bx+4],255 + jz notasetid + cmp al,[es:bx] + jc notasetid + cmp al,[es:bx+2] + jnc notasetid + cmp ah,[es:bx+1] + jc notasetid + cmp ah,[es:bx+3] + jnc notasetid + call pixelcheckset + jz notasetid + call isitdescribed + jz notasetid + mov al,[es:bx+4] + mov ah,1 + call obname + mov al,0 + cmp al,1 + ret +notasetid: sub bx,5 + dec cx + cmp cx,-1 + jnz identifyset + ret + + endp + + + + + + + + + + +Checkifex proc near + + mov es,buffers + mov bx,exlist+(99*5) + mov cx,99 +identifyex: cmp byte ptr [es:bx+4],255 + jz notanexid + cmp al,[es:bx] + jc notanexid + cmp al,[es:bx+2] + jnc notanexid + cmp ah,[es:bx+1] + jc notanexid + cmp ah,[es:bx+3] + jnc notanexid + mov al,[es:bx+4] + mov ah,4 + call obname + mov al,1 + cmp al,0 + ret +notanexid: sub bx,5 + dec cx + cmp cx,-1 + jnz identifyex + ret + + endp + + + + + + +Checkiffree proc near + + mov es,buffers + mov bx,freelist+(79*5) + mov cx,79 +identifyfree: cmp byte ptr [es:bx+4],255 + jz notafreeid + cmp al,[es:bx] + jc notafreeid + cmp al,[es:bx+2] + jnc notafreeid + cmp ah,[es:bx+1] + jc notafreeid + cmp ah,[es:bx+3] + jnc notafreeid + mov al,[es:bx+4] + mov ah,2 + call obname + mov al,0 + cmp al,1 + ret +notafreeid: sub bx,5 + dec cx + cmp cx,-1 + jnz identifyfree + ret + + endp + + + + + + +Isitdescribed proc near + + push ax cx es bx + mov al,[es:bx+4] ;get object number + mov ah,0 + add ax,ax + mov bx,ax + mov es,setdesc + add bx,settextdat + mov ax,[es:bx] + add ax,settext + mov bx,ax + mov dl,[es:bx] + pop bx es cx ax + cmp dl,0 + ret + + endp + + + + + + + + +;Getcurrentpath proc near ;routine finds out which path +; ;block the pointer is in. +; push ax ;used to see if an object is +; call findpathofpoint ;close or not +; pop ax +; mov pointerspath,dl +; ret +; +; endp + + + + + +Findpathofpoint proc near + + push ax + mov bx,pathdata + mov es,reels + mov al,roomnum + mov ah,0 + mov cx,144 + mul cx + add bx,ax + pop cx + + mov dl,0 +pathloop: mov al,[es:bx+6] + cmp al,255 + jnz flunkedit + mov ax,[es:bx+2] + cmp ax,0ffffh + jz flunkedit + cmp cl,al + jc flunkedit + cmp ch,ah + jc flunkedit + mov ax,[es:bx+4] + cmp cl,al + jnc flunkedit + cmp ch,ah + jnc flunkedit + jmp gotvalidpath +flunkedit: add bx,8 + inc dl + cmp dl,12 + jnz pathloop + mov dl,255 +gotvalidpath: ret + + endp + + + + + +Findfirstpath proc near ;similar to last routine, but it + ;searches each path to see if + push ax ;pointer is within it, regardless + mov bx,pathdata ;of whether the path is on or off + mov es,reels ;it returns the on or off state in + mov al,roomnum ;al (255=on 0=off) 0 if no path + mov ah,0 + mov cx,144 + mul cx + add bx,ax + pop cx + + mov dl,0 +fpathloop: mov ax,[es:bx+2] + cmp ax,0ffffh + jz nofirst + cmp cl,al + jc nofirst + cmp ch,ah + jc nofirst + mov ax,[es:bx+4] + cmp cl,al + jnc nofirst + cmp ch,ah + jnc nofirst + jmp gotfirst +nofirst: add bx,8 + inc dl + cmp dl,12 + jnz fpathloop + mov al,0 + ret +gotfirst: mov al,[es:bx+6] + ret + + endp + + + + + + + + +Turnpathon proc near ;turns path on permanently + + push ax ax + mov cl,255 + mov ch,roomnum + add ch,100 + call findormake + pop ax + call getroomspaths + pop ax + cmp al,255 + jz nopathon + mov ah,0 + add ax,ax + add ax,ax + add ax,ax + add bx,ax + mov al,255 + mov [es:bx+6],al +nopathon: ret + + endp + + + + + + + +Turnpathoff proc near ;turns path on permanently + + push ax ax + mov cl,0 + mov ch,roomnum + add ch,100 + call findormake + pop ax + call getroomspaths + pop ax + cmp al,255 + jz nopathoff + mov ah,0 + add ax,ax + add ax,ax + add ax,ax + add bx,ax + mov al,0 + mov [es:bx+6],al +nopathoff: ret + + endp + + + + + + + + + + + + + + + +Turnanypathon proc near + + push ax ax + mov cl,255 + mov ch,ah + add ch,100 + call findormake + pop ax + mov al,ah + mov ah,0 + mov cx,144 + mul cx + mov es,reels + mov bx,pathdata + add bx,ax + pop ax + mov ah,0 + add ax,ax + add ax,ax + add ax,ax + add bx,ax + mov al,255 + mov [es:bx+6],al + ret + + endp + + + + + + +Turnanypathoff proc near + + push ax ax + mov cl,0 + mov ch,ah + add ch,100 + call findormake + pop ax + mov al,ah + mov ah,0 + mov cx,144 + mul cx + mov es,reels + mov bx,pathdata + add bx,ax + pop ax + mov ah,0 + add ax,ax + add ax,ax + add ax,ax + add bx,ax + mov al,0 + mov [es:bx+6],al + ret + + endp + + + + + +Checkifpathison proc near + + push ax + call getroomspaths + pop ax + mov ah,0 + add ax,ax + add ax,ax + add ax,ax + add bx,ax + mov al,[es:bx+6] + cmp al,255 + ret + + endp + + + + + +Afternewroom proc near + + cmp nowinnewroom,0 + jz notnew + mov timecount,0 + call createpanel + mov commandtype,0 + call findroominloc + + cmp ryanon,1 + jz ryansoff + + mov al,ryanx + add al,12 + mov ah,ryany + add ah,12 + call findpathofpoint + mov manspath,dl + call findxyfrompath + mov resetmanxy,1 + +ryansoff: mov newobs,1 + call drawfloor + mov lookcounter,160 + mov nowinnewroom,0 + + call showicon + call spriteupdate + call printsprites + call undertextline + call reelsonscreen + call mainscreen + call getunderzoom + call zoom + call worktoscreenm + call walkintoroom + call reminders + call atmospheres +notnew: ret + + endp + + + + + + +Atmospheres proc near + + mov cl,mapx + mov ch,mapy + mov bx,offset cs:atmospherelist +nextatmos: mov al,[cs:bx] + cmp al,255 + jz nomoreatmos + cmp al,reallocation + jnz wrongatmos + mov ax,[cs:bx+1] + cmp ax,cx + jnz wrongatmos + mov ax,[cs:bx+3] + cmp al,ch0playing + jz playingalready + cmp location,45 + jnz notweb + cmp reeltowatch,45 + jz wrongatmos +notweb: call playchannel0 + cmp reallocation,2 + cmp mapy,0 + jz fullvol + jnz notlouisvol + cmp mapy,10 + jnz notlouisvol + cmp mapx,22 + jnz notlouisvol + mov volume,5 +notlouisvol: if cd + cmp reallocation,14 + jnz notmad1 + cmp mapx,33 + jz ismad2 + cmp mapx,22 + jnz notmad1 + mov volume,5 + ret +ismad2: mov volume,0 + ret +notmad1: endif +playingalready: cmp reallocation,2 + jnz notlouisvol2 + cmp mapx,22 + jz louisvol + cmp mapx,11 + jnz notlouisvol2 +fullvol: mov volume,0 +notlouisvol2: ret +louisvol: mov volume,5 + ret +wrongatmos: add bx,5 + jmp nextatmos +nomoreatmos: call cancelch0 + ret + +atmospherelist: db 0,33,10,15,255 + db 0,22,10,15,255 + db 0,22,0,15,255 + db 0,11,0,15,255 + db 0,11,10,15,255 + db 0,0,10,15,255 + + db 1,44,10,6,255 ;location,map x,y,sound,repeat + db 1,44,0,13,255 + + db 2,33,0,6,255 + db 2,22,0,5,255 + db 2,22,10,16,255 + db 2,11,10,16,255 + + db 3,44,0,15,255 + db 3,33,10,6,255 + db 3,33,0,5,255 + + db 4,11,30,6,255 + db 4,22,30,5,255 + db 4,22,20,13,255 + + db 10,33,30,6,255 + db 10,22,30,6,255 + + db 9,22,10,6,255 + db 9,22,20,16,255 + db 9,22,30,16,255 + db 9,22,40,16,255 + db 9,22,50,16,255 + + db 6,11,30,6,255 + db 6,0,10,15,255 + db 6,0,20,15,255 + db 6,11,20,15,255 + db 6,22,20,15,255 + + db 7,11,20,6,255 + db 7,0,20,6,255 + db 7,0,30,6,255 + + db 55,44,0,5,255 + db 55,44,10,5,255 + + db 5,22,30,6,255 + if demo + db 5,22,20,16,255 + db 5,22,10,16,255 + else + db 5,22,20,15,255 + db 5,22,10,15,255 + endif + + db 24,22,0,15,255 + db 24,33,0,15,255 + db 24,44,0,15,255 + db 24,33,10,15,255 + + db 8,0,10,6,255 + db 8,11,10,6,255 + db 8,22,10,6,255 + db 8,33,10,6,255 + db 8,33,20,6,255 + db 8,33,30,6,255 + db 8,33,40,6,255 + db 8,22,40,6,255 + db 8,11,40,6,255 + + db 11,11,20,12,255 + db 11,11,30,12,255 + db 11,22,20,12,255 + db 11,22,30,12,255 + + db 12,22,20,12,255 + db 13,22,20,12,255 + db 13,33,20,12,255 + + db 14,44,20,12,255 + db 14,33,0,12,255 + db 14,33,10,12,255 + db 14,33,20,12,255 + db 14,33,30,12,255 + db 14,33,40,12,255 + db 14,22,0,16,255 + + db 19,0,0,12,255 + + db 20,0,20,16,255 + db 20,0,30,16,255 + db 20,11,30,16,255 + db 20,0,40,16,255 + db 20,11,40,16,255 + + if demo + db 21,11,10,16,255 + db 21,11,20,16,255 + db 21,0,20,16,255 + db 21,22,20,16,255 + db 21,33,20,16,255 + db 21,44,20,16,255 + db 21,44,10,16,255 + else + db 21,11,10,15,255 + db 21,11,20,15,255 + db 21,0,20,15,255 + db 21,22,20,15,255 + db 21,33,20,15,255 + db 21,44,20,15,255 + db 21,44,10,15,255 + endif + + db 22,22,10,16,255 + db 22,22,20,16,255 + + db 23,22,30,13,255 + db 23,22,40,13,255 + db 23,33,40,13,255 + db 23,11,40,13,255 + db 23,0,40,13,255 + db 23,0,50,13,255 + + db 25,11,40,16,255 + db 25,11,50,16,255 + db 25,0,50,16,255 + + db 27,11,20,16,255 + db 27,11,30,16,255 + + db 29,11,10,16,255 + + db 45,22,30,12,255 + db 45,22,40,12,255 + db 45,22,50,12,255 + + db 46,22,40,12,255 + db 46,11,50,12,255 + db 46,22,50,12,255 + db 46,33,50,12,255 + + db 47,0,0,12,255 + + db 26,22,20,16,255 + db 26,33,10,16,255 + db 26,33,20,16,255 + db 26,33,30,16,255 + db 26,44,30,16,255 + db 26,22,30,16,255 + db 26,11,30,16,255 + db 26,11,20,16,255 + db 26,0,20,16,255 + db 26,11,40,16,255 + db 26,0,40,16,255 + db 26,22,40,16,255 + db 26,11,50,16,255 + + db 28,0,30,15,255 + db 28,0,20,15,255 + db 28,0,40,15,255 + db 28,11,30,15,255 + db 28,11,20,15,255 + db 28,22,30,15,255 + db 28,22,20,15,255 + + db 255 + + endp + + + + + + +Walkintoroom proc near + + cmp location,14 + jnz notlair + cmp mapx,22 + jnz notlair + mov destination,1 + mov finaldest,1 + call autosetwalk +notlair: ret + + endp + + + + + + + + + + + + +Afterintroroom proc near + + cmp nowinnewroom,0 + jz notnewintro + call clearwork + call findroominloc + mov newobs,1 + call drawfloor + call reelsonscreen + call spriteupdate + call printsprites + call worktoscreen + mov nowinnewroom,0 +notnewintro: ret + + endp + + + + + + + + + + + +Obname proc near + + cmp reasseschanges,0 + jz notnewpath + mov reasseschanges,0 + jmp diff + +notnewpath: cmp ah,commandtype + jz notdiffob + jmp diff +notdiffob: cmp al,command + jnz diff + cmp walkandexam,1 + jz walkandexamine + cmp mousebutton,0 + jz noobselect + cmp commandtype,3 + jnz isntblock + cmp lastflag,2 + jc noobselect +isntblock: mov bl,manspath + cmp bl,pointerspath + jnz wantstowalk + cmp commandtype,3 + jz wantstowalk + call finishedwalking + jnz noobselect + cmp commandtype,5 + jz wantstotalk + cmp watchingtime,0 + jnz noobselect + call examineob + ret +wantstotalk: cmp watchingtime,0 + jnz noobselect + call talk + ret +walkandexamine: call finishedwalking + jnz noobselect + mov al,walkexamtype + mov commandtype,al + mov al,walkexamnum + mov command,al + mov walkandexam,0 + cmp commandtype,5 + jz noobselect + call examineob + ret +wantstowalk: call setwalk + mov reasseschanges,1 +noobselect: ret + + +diff: mov command,al + mov commandtype,ah +diff2: cmp linepointer,254 + jnz middleofwalk + cmp watchingtime,0 + jnz middleofwalk + mov al,facing + cmp al,turntoface + jnz middleofwalk + cmp commandtype,3 + jnz notblock + mov bl,manspath + cmp bl,pointerspath + jnz dontcheck + mov cl,ryanx ;look under feet to see if + add cl,12 ;any flags are there + mov ch,ryany + add ch,12 + call checkone + cmp cl,2 + jc isblock +dontcheck: call getflagunderp + cmp lastflag,2 + jc isblock + cmp lastflag,128 + jnc isblock + jmp toofaraway ; only here for turning on doorstep +notblock: mov bl,manspath + cmp bl,pointerspath + jnz toofaraway + cmp commandtype,3 + jz isblock + cmp commandtype,5 + jz isaperson + call examineobtext + ret +middleofwalk: call blocknametext + ret +isblock: call blocknametext + ret +isaperson: call personnametext + ret +toofaraway: call walktotext + ret + + endp + + + + + + + +Finishedwalking proc near + + cmp linepointer,254 + jnz iswalking + mov al,facing + cmp al,turntoface +iswalking: ret + + endp + + + + + + + +Examineobtext proc near + + mov bl,command + mov bh,commandtype + mov al,1 + call commandwithob + ret + + endp + + + + + +Commandwithob proc near + + push ax + push ax bx cx dx es ds si di + call deltextline + pop di si ds es dx cx bx ax + + push bx + mov ah,0 + add ax,ax + mov bx,ax + mov es,commandtext + mov ax,[es:bx] + add ax,textstart + mov si,ax + + mov di,textaddressx + mov bx,textaddressy + mov dl,textlen + mov al,0 + mov ah,0 + call printdirect + + pop ax + mov di,offset cs:commandline + call copyname + pop ax + + mov di,lastxpos + cmp al,0 + jz noadd + add di,5 +noadd: mov bx,textaddressy + push cs + pop es + mov si,offset cs:commandline + mov dl,textlen + mov al,0 + mov ah,0 + call printdirect + mov newtextline,1 + ret + +commandline: db "OBJECT NAME ONE ",0 + + endp + + + + +Commandonly proc near + + push ax bx cx dx es ds si di + call deltextline + pop di si ds es dx cx bx ax + + mov ah,0 + add ax,ax + mov bx,ax + mov es,commandtext + mov ax,[es:bx] + add ax,textstart + mov si,ax + + mov di,textaddressx + mov bx,textaddressy + mov dl,textlen + mov al,0 + mov ah,0 + call printdirect + mov newtextline,1 + ret + + endp + + + + + +Printmessage proc near + + push dx bx di + mov ah,0 + add ax,ax + mov bx,ax + mov es,commandtext + mov ax,[es:bx] + add ax,textstart + mov si,ax + pop di bx dx + mov al,0 + mov ah,0 + call printdirect + ret + + endp + + + +Printmessage2 proc near + + push dx bx di + push ax + mov ah,0 + add ax,ax + mov bx,ax + mov es,commandtext + mov ax,[es:bx] + add ax,textstart + mov si,ax + pop ax + +searchmess: push ax + call findnextcolon + pop ax + dec ah + jnz searchmess + + pop di bx dx + mov al,0 + mov ah,0 + call printdirect + ret + + endp + + + + + + + + + +Blocknametext proc near + + mov bl,command + mov bh,commandtype + mov al,0 + call commandwithob + ret + + endp + + + + +Personnametext proc near + + mov bl,command + and bl,127 + mov bh,commandtype + mov al,2 + call commandwithob + ret + + endp + + + + + + + +Walktotext proc near + + mov bl,command + mov bh,commandtype + mov al,3 + call commandwithob + ret + + endp + + + + + +Getflagunderp proc near + + mov cx,mousex + sub cx,mapadx + mov ax,mousey + sub ax,mapady + mov ch,al + call checkone + mov lastflag,cl + mov lastflagex,ch + ret + + endp + + + + + +Setwalk proc near + + cmp linepointer,254 + jnz alreadywalking + mov al,pointerspath + cmp al,manspath + jz cantwalk2 + cmp watchmode,1 + jz holdingreel + cmp watchmode,2 + jz cantwalk + mov destination,al + mov finaldest,al + cmp mousebutton,2 + jnz notwalkandexam + cmp commandtype,3 + jz notwalkandexam + mov walkandexam,1 + mov al,commandtype + mov walkexamtype,al + mov al,command + mov walkexamnum,al +notwalkandexam: call autosetwalk +cantwalk: ret +cantwalk2: call facerightway + ret +alreadywalking: mov al,pointerspath + mov finaldest,al + ret + +holdingreel: mov destafterhold,al + mov watchmode,2 + ret + + endp + + + + + + + +Autosetwalk proc near + + mov al,manspath + cmp finaldest,al + jnz notsamealready + ret +notsamealready: call getroomspaths + call checkdest + push bx + mov al,manspath + mov ah,0 + add ax,ax + add ax,ax + add ax,ax + add bx,ax + mov al,[es:bx] + mov ah,0 + sub ax,12 + mov linestartx,ax + mov al,[es:bx+1] + mov ah,0 + sub ax,12 + mov linestarty,ax + pop bx + + mov al,destination + mov ah,0 + add ax,ax + add ax,ax + add ax,ax + add bx,ax + mov al,[es:bx] + mov ah,0 + sub ax,12 + mov lineendx,ax + mov al,[es:bx+1] + mov ah,0 + sub ax,12 + mov lineendy,ax + call bresenhams + + cmp linedirection,0 + jz normalline + mov al,linelength + dec al + mov linepointer,al + mov linedirection,1 + ret + +normalline: mov linepointer,0 + ret + + endp + + + + + + + + +Checkdest proc near + + push bx + add bx,12*8 + mov ah,manspath + mov cl,4 + shl ah,cl + mov al,destination + + mov cl,24 + mov ch,destination +checkdestloop: mov dh,[es:bx] + and dh,11110000b + mov dl,[es:bx] + and dl,00001111b + cmp ax,dx + jnz nextcheck + mov al,[es:bx+1] + and al,15 + mov destination,al + pop bx + ret +nextcheck: mov dl,[es:bx] + and dl,11110000b + shr dl,1 + shr dl,1 + shr dl,1 + shr dl,1 + mov dh,[es:bx] + and dh,00001111b + shl dh,1 + shl dh,1 + shl dh,1 + shl dh,1 + cmp ax,dx + jnz nextcheck2 + mov ch,[es:bx+1] + and ch,15 +nextcheck2: add bx,2 + dec cl + jnz checkdestloop + mov destination,ch + pop bx + ret + + endp + + + + + + + + + + + + + + +Bresenhams proc near + + call workoutframes + + mov dx,seg linedata + mov es,dx + mov di,offset es:linedata + mov si,1 + mov linedirection,0 + + mov cx,lineendx + sub cx,linestartx + jz vertline + jns line1 + + neg cx + mov bx,lineendx + xchg bx,linestartx + mov lineendx,bx + + mov bx,lineendy + xchg bx,linestarty + mov lineendy,bx + mov linedirection,1 + +line1: mov bx,lineendy + sub bx,linestarty + jz horizline + jns line3 + + neg bx + neg si + +line3: push si + mov lineroutine,0 ; means lo slope + cmp bx,cx + jle line4 + mov lineroutine,1 ; means hi slope + xchg bx,cx + +line4: shl bx,1 + mov increment1,bx + sub bx,cx + mov si,bx + sub bx,cx + mov increment2,bx + + mov ax,linestartx + mov bx,linestarty + mov ah,bl + inc cx + pop bx + cmp lineroutine,1 + jz hislope + jmp loslope + +vertline: mov ax,linestarty + mov bx,lineendy + mov cx,bx + sub cx,ax + jge line31 + + neg cx + mov ax,bx + mov linedirection,1 + +line31: inc cx + mov bx,linestartx + xchg ax,bx + mov ah,bl + mov bx,si +line32: stosw + add ah,bl + loop line32 + jmp lineexit + + +horizline: mov ax,linestartx + mov bx,linestarty + mov ah,bl + inc cx +horizloop: stosw + inc al + loop horizloop + jmp lineexit + + +loslope: +loloop: stosw + inc al + or si,si + jns line12 + add si,increment1 + loop loloop + jmp lineexit + +line12: add si,increment2 + add ah,bl + loop loloop + jmp lineexit + + + +hislope: +hiloop: stosw + add ah,bl + or si,si + jns line23 + add si,increment1 + loop hiloop + jmp lineexit + +line23: add si,increment2 + inc al + loop hiloop + +lineexit: sub di,offset es:linedata + mov ax,di + shr ax,1 + mov linelength,al + ret + + endp + + + + + + + +Workoutframes proc near + + mov bx,linestartx + add bx,32 + mov ax,lineendx + add ax,32 + sub bx,ax + jnc notneg1 + neg bx +notneg1: mov cx,linestarty + add cx,32 + mov ax,lineendy + add ax,32 + sub cx,ax + jnc notneg2 + neg cx +notneg2: cmp bx,cx + jnc tendstohoriz + mov dl,2 + mov ax,cx + shr ax,1 + cmp bx,ax + jc gotquad + mov dl,1 + jmp gotquad +tendstohoriz: mov dl,0 + mov ax,bx + shr ax,1 + cmp cx,ax + jc gotquad + mov dl,1 + jmp gotquad + +gotquad: mov bx,linestartx + add bx,32 + mov ax,lineendx + add ax,32 + sub bx,ax + jc isinright +isinleft: mov cx,linestarty + add cx,32 + mov ax,lineendy + add ax,32 + sub cx,ax + jnc topleft + cmp dl,1 + jz noswap1 + xor dl,2 +noswap1: add dl,4 + jmp success +topleft: add dl,6 + jmp success + +isinright: mov cx,linestarty + add cx,32 + mov ax,lineendy + add ax,32 + sub cx,ax + jnc botright + add dl,2 + jmp success +botright: cmp dl,1 + jz noswap2 + xor dl,2 +noswap2: + +success: and dl,7 + mov turntoface,dl + mov turndirection,0 + ret + + endp + + + + + + + + + + + + + + + + + + +;Multiply8 proc near +; +; mov ah,0 +; mov cx,8 +; mul cx +; ret +; +; endp + + + + + + +Getroomspaths proc near + + mov al,roomnum + mov ah,0 + mov cx,144 + mul cx + mov es,reels + mov bx,pathdata + add bx,ax + ret + + endp + + + + + + + + + + + + + + + + +Copyname proc near + + push di + call findobname + pop di + push cs + pop es + +copytext: mov cx,28 +make: lodsb + cmp al,":" + jz finishmakename + cmp al,0 + jz finishmakename + stosb + loop make + +finishmakename: inc cx + mov al,0 + stosb + ret + mov al,255 + rep stosb + ret + + endp + + + + + + + + + +Findobname proc near + + push ax + mov ah,0 + add ax,ax + mov bx,ax + pop ax + + cmp ah,5 + jnz notpersonname + + push ax + and al,127 + mov ah,0 + mov bx,64*2 + mul bx + mov si,ax + mov ds,people + add si,persontxtdat + mov cx,persontext + mov ax,[si] + add ax,cx + mov si,ax + pop ax + ret + +notpersonname: cmp ah,4 + jnz notextraname + mov ds,extras + add bx,extextdat + mov ax,[bx] + add ax,extext + mov si,ax + ret + +notextraname: cmp ah,2 + jnz notfreename + mov ds,freedesc + add bx,freetextdat + mov ax,[bx] + add ax,freetext + mov si,ax + ret + +notfreename: cmp ah,1 + jnz notsetname + mov ds,setdesc + add bx,settextdat + mov ax,[bx] + add ax,settext + mov si,ax + ret + +notsetname: mov ds,blockdesc + add bx,blocktextdat + mov ax,[bx] + add ax,blocktext + mov si,ax + ret + + endp + + + + + + + + + + + + + +;-------------------------------------------Printing of non scrolling icons---- + +Showicon proc near + + cmp reallocation,50 + jnc isdream1 + call showpanel + call showman + call roomname + call panelicons1 + call zoomicon + ret + +isdream1: mov ds,tempsprites + mov di,72 + mov bx,2 + mov al,45 + mov ah,0 + call showframe + mov ds,tempsprites + mov di,72+47 + mov bx,2 + mov al,46 + mov ah,0 + call showframe + mov ds,tempsprites + mov di,69-10 + mov bx,21 + mov al,49 + mov ah,0 + call showframe + + mov ds,tempsprites + mov di,160+88 + mov bx,2 + mov al,45 + mov ah,4 + call showframe + mov ds,tempsprites + mov di,160+43 + mov bx,2 + mov al,46 + mov ah,4 + call showframe + mov ds,tempsprites + mov di,160+101 + mov bx,21 + mov al,49 + mov ah,4 + call showframe + call middlepanel + ret + + endp + + + + + +Middlepanel proc near + + mov ds,tempsprites + mov di,72+47+20 + mov bx,0 + mov al,48 + mov ah,0 + call showframe + mov ds,tempsprites + mov di,72+19 + mov bx,21 + mov al,47 + mov ah,0 + call showframe + mov ds,tempsprites + mov di,160+23 + mov bx,0 + mov al,48 + mov ah,4 + call showframe + mov ds,tempsprites + mov di,160+71 + mov bx,21 + mov al,47 + mov ah,4 + call showframe + ret + + endp + + + + + + + + + + +Showman proc near + + mov ds,icons1 + mov di,0 + mov bx,0 + mov al,0 + mov ah,0 + call showframe + mov ds,icons1 + mov di,0 + mov bx,114 + mov al,1 + mov ah,0 + call showframe + + cmp shadeson,0 + jz notverycool + + mov ds,icons1 + mov di,28 + mov bx,25 + mov al,2 + mov ah,0 + call showframe +notverycool: ret + + endp + + + + + + + + + + + + + + + + + + + +Showpanel proc near + + mov ds,icons1 + mov di,72 + mov bx,0 + mov al,19 + mov ah,0 + call showframe + mov ds,icons1 + mov di,192 + mov bx,0 + mov al,19 + mov ah,0 + call showframe + ret + + endp + + + + + + + + + + + + + + + + + + + + + + +Roomname proc near + + mov di,88 + mov bx,18 + mov al,53 + mov dl,240 + call printmessage + + mov bl,roomnum + cmp bl,32 + jc notover32 + sub bl,32 + +notover32: mov bh,0 + add bx,bx + mov es,roomdesc + add bx,intextdat + mov ax,[es:bx] + add ax,intext + mov si,ax + + mov linespacing,7 + mov di,88 + mov bx,25 + mov dl,120 + cmp watchon,1 + jz gotpl + mov dl,160 +gotpl: mov al,0 + mov ah,0 + call printdirect + mov linespacing,10 + + call usecharset1 + ret + + endp + + + + + + +Usecharset1 proc near + + mov ax,charset1 + mov currentset,ax + ret + + endp + + + + + + + + + + + +Usetempcharset proc near + + mov ax,tempcharset + mov currentset,ax + ret + + endp + + + + + +Showexit proc near + + mov ds,icons1 + mov di,274 + mov bx,154 + mov al,11 + mov ah,0 + call showframe + ret + + endp + + + + +Panelicons1 proc near + + mov di,0 + cmp watchon,1 + jz watchison + mov di,48 +watchison: push di + mov ds,icons2 + add di,204 + mov bx,4 + mov al,2 + mov ah,0 + call showframe + pop di + push di + cmp zoomon,1 + jz zoomisoff + mov ds,icons1 + add di,228 + mov bx,8 + mov al,5 + mov ah,0 + call showframe +zoomisoff: pop di + call showwatch + ret + + endp + + + + + + + + + + + + +Showwatch proc near + + cmp watchon,0 + jz nowristwatch + mov ds,icons1 + mov di,250 + mov bx,1 + mov al,6 + mov ah,0 + call showframe + call showtime +nowristwatch: ret + + endp + + +Gettime proc near + + mov ah,2ch + int 21h + mov secondcount,dh + mov minutecount,cl + mov hourcount,ch + ret + + endp + + + + + +Zoomicon proc near + + cmp zoomon,0 + jz nozoom1 + mov ds,icons1 + mov di,zoomx + mov bx,zoomy-1 + mov al,8 + mov ah,0 + call showframe +nozoom1: ret + + endp + + + + + + +Showblink proc near + + cmp manisoffscreen,1 + jz finblink1 + inc blinkcount + cmp shadeson,0 + jnz finblink1 + cmp reallocation,50 + jnc eyesshut + mov al,blinkcount + cmp al,3 + jnz finblink1 + mov blinkcount,0 + mov al,blinkframe + inc al + mov blinkframe,al + cmp al,6 + jc nomorethan6 + mov al,6 +nomorethan6: mov ah,0 + mov bx,offset cs:blinktab + add bx,ax + + mov al,[cs:bx] + mov ds,icons1 + mov di,44 + mov bx,32 + mov ah,0 + call showframe +finblink1: ret + +eyesshut: ;mov al,32 + ;mov ds,icons1 + ;mov di,44 + ;mov bx,32 + ;mov ah,0 + ;call showframe + ret + +blinktab: db 16,18,18,17,16,16,16 + + endp + + + + + + +Dumpblink proc near + + cmp shadeson,0 + jnz nodumpeye + cmp blinkcount,0 + jnz nodumpeye + mov al,blinkframe + cmp al,6 + jnc nodumpeye + push ds + mov di,44 + mov bx,32 + mov cl,16 + mov ch,12 + call multidump + pop ds +nodumpeye: ret + + endp + + + + + + + + + + + + + + + + + + +Worktoscreenm proc near + + call animpointer + call readmouse + call showpointer + call vsync + call worktoscreen + call delpointer + ret + + endp + + + + + + + + + + + + + +;-------------------------------------------------------------Blank routine---- + + + + +Blank proc near + + cmp commandtype,199 + jz alreadyblnk + mov commandtype,199 + mov al,0 + call commandonly +alreadyblnk: ret + + endp + + + + + + + + + + + + + + + + + + + + + + +;---------------------------------------------------------Standard routines---- + + + + + + + + + + + + + +Allpointer proc near + + call readmouse + call showpointer + call dumppointer + ret + + endp + + + + + + + +Hangonp proc near + + push cx + add cx,cx + pop ax + add cx,ax + mov maintimer,0 + mov al,pointerframe + mov ah,pickup + push ax + mov pointermode,3 + mov pickup,0 + push cx + mov commandtype,255 + call readmouse + call animpointer + call showpointer + call vsync + call dumppointer + pop cx + +hangloop: push cx + call delpointer + call readmouse + call animpointer + call showpointer + call vsync + call dumppointer + pop cx + mov ax,mousebutton + cmp ax,0 + jz notpressed + cmp ax,oldbutton + jnz getoutofit +notpressed: loop hangloop + +getoutofit: call delpointer + pop ax + mov pointerframe,al + mov pickup,ah + mov pointermode,0 + ret + + endp + + + + + +Hangonw proc near + +hangloopw: push cx + call delpointer + call readmouse + call animpointer + call showpointer + call vsync + call dumppointer + pop cx + loop hangloopw + ret + + endp + + + + +Hangoncurs proc near + +monloop1: push cx + call printcurs + call vsync + call delcurs + pop cx + loop monloop1 + ret + + endp + + + + + + + + +Getunderzoom proc near + + mov di,zoomx+5 + mov bx,zoomy+4 + mov ds,buffers + mov si,zoomspace + mov cl,46 + mov ch,40 + call multiget + ret + + endp + + + + + +Dumpzoom proc near + + cmp zoomon,1 + jnz notzoomon + mov di,zoomx+5 + mov bx,zoomy+4 + mov cl,46 + mov ch,40 + call multidump +notzoomon: ret + + endp + + + + + + + +Putunderzoom proc near + + mov di,zoomx+5 + mov bx,zoomy+4 + mov ds,buffers + mov si,zoomspace + mov cl,46 + mov ch,40 + call multiput + ret + + endp + + + + + +Crosshair proc near + + cmp commandtype,3 + jz nocross + cmp commandtype,10 + jnc nocross + + mov es,workspace + mov ds,icons1 + mov di,zoomx+24 + mov bx,zoomy+19 + mov al,9 + mov ah,0 + call showframe + ret + +nocross: mov es,workspace + mov ds,icons1 + mov di,zoomx+24 + mov bx,zoomy+19 + mov al,29 + mov ah,0 + call showframe + ret + + endp + + + + + + +Showpointer proc near + + call showblink + mov di,mousex + mov oldpointerx,di + mov bx,mousey + mov oldpointery,bx + cmp pickup,1 + jz itsanobject + + push bx di + mov ds,icons1 + mov al,pointerframe + add al,20 + mov ah,0 + add ax,ax + mov si,ax + add ax,ax + add si,ax + mov cx,[si] + cmp cl,12 + jnc notsmallx + mov cl,12 +notsmallx: cmp ch,12 + jnc notsmally + mov ch,12 +notsmally: mov pointerxs,cl + mov pointerys,ch + push ds + mov ds,buffers + mov si,pointerback + call multiget + pop ds di bx + push di bx + mov al,pointerframe + add al,20 + mov ah,0 + call showframe + pop bx di + ret + +itsanobject: mov al,itemframe + mov ds,extras + cmp objecttype,4 + jz itsfrominv + mov ds,freeframes +itsfrominv: mov cl,al + add al,al + add al,cl + inc al + mov ah,0 + + push ax + add ax,ax + mov si,ax + add ax,ax + add si,ax + mov ax,2080 + mov cx,[si] + cmp cl,12 + jnc notsmallx2 + mov cl,12 +notsmallx2: cmp ch,12 + jnc notsmally2 + mov ch,12 +notsmally2: mov pointerxs,cl + mov pointerys,ch + pop ax + + push di bx + push ax bx di ds + mov al,cl + mov ah,0 + shr ax,1 + sub oldpointerx,ax + sub di,ax + mov al,ch + shr ax,1 + sub oldpointery,ax + sub bx,ax + mov ds,buffers + mov si,pointerback + call multiget + pop ds di bx ax + mov ah,128 + call showframe + pop bx di + mov ds,icons1 + mov al,3 + mov ah,128 + call showframe + ret + + endp + + + + + + + +Delpointer proc near + + mov ax,oldpointerx + cmp ax,0ffffh + jz nevershown + mov delherex,ax + mov ax,oldpointery + mov delherey,ax + mov cl,pointerxs + mov delxs,cl + mov ch,pointerys + mov delys,ch + mov ds,buffers + mov si,pointerback + mov di,delherex + mov bx,delherey + call multiput +nevershown: ret + + endp + + + + + + + + + +Dumppointer proc near + + call dumpblink + mov cl,delxs + mov ch,delys + mov di,delherex + mov bx,delherey + call multidump + + mov bx,oldpointery + mov di,oldpointerx + cmp di,delherex + jnz difffound + cmp bx,delherey + jz notboth +difffound: mov cl,pointerxs + mov ch,pointerys + call multidump +notboth: ret + + endp + + + + + + + + + + + +Undertextline proc near + + mov di,textaddressx + mov bx,textaddressy + if foreign + sub bx,3 + endif + mov ds,buffers + mov si,textunder + mov cl,undertextsizex + mov ch,undertextsizey + call multiget + ret + + endp + + + + + + + + +Deltextline proc near + + mov di,textaddressx + mov bx,textaddressy + if foreign + sub bx,3 + endif + mov ds,buffers + mov si,textunder + mov cl,undertextsizex + mov ch,undertextsizey + call multiput + ret + + endp + + + + + +Dumptextline proc near + + cmp newtextline,1 + jnz nodumptextline + mov newtextline,0 + mov di,textaddressx + mov bx,textaddressy + if foreign + sub bx,3 + endif + mov cl,undertextsizex + mov ch,undertextsizey + call multidump +nodumptextline: ret + + endp + + + + + + + + + + + + + + + + + +Animpointer proc near + + cmp pointermode,2 + jz combathand + cmp pointermode,3 + jz mousehand + + cmp watchingtime,0 + jz notwatchpoint + mov pointerframe,11 + ret +notwatchpoint: mov pointerframe,0 + cmp inmaparea,0 + jz gothand + cmp pointerfirstpath,0 + jz gothand +arrow: call getflagunderp + cmp cl,2 + jc gothand + cmp cl,128 + jnc gothand + mov pointerframe,3 + test cl,4 + jnz gothand + mov pointerframe,4 + test cl,16 + jnz gothand + mov pointerframe,5 + test cl,2 + jnz gothand + mov pointerframe,6 + test cl,8 + jnz gothand + mov pointerframe,8 +gothand: ret + +mousehand: cmp pointerspeed,0 + jz rightspeed3 + dec pointerspeed + jmp finflashmouse +rightspeed3: mov pointerspeed,5 + inc pointercount + cmp pointercount,16 + jnz finflashmouse + mov pointercount,0 +finflashmouse: mov al,pointercount + mov ah,0 + mov bx,offset cs:flashmousetab + add bx,ax + mov al,[cs:bx] + mov pointerframe,al + ret + +combathand: mov pointerframe,0 + cmp reallocation,14 + jnz notarrow + cmp commandtype,211 + jnz notarrow + mov pointerframe,5 +notarrow: ret + +flashmousetab: db 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2 + + endp + + + + +;------------------------------------------------Mouse and keyboard-readers---- + +Setmouse proc near + + if recording + mov recordpos,-8 + mov dx,seg recname + mov ds,dx + mov dx,offset recname + mov cx,0 + mov ah,3ch + mov al,2 + int 21h + mov rechandle,ax + endif + + if playback + mov dx,seg recname + mov ds,dx + mov dx,offset recname + mov ah,3dh + mov al,2 + int 21h + mov rechandle,ax + call loadrec + endif + + mov oldpointerx,0ffffh + + mov ax,0 + int 33h + mov ax,8 + mov cx,15 + mov dx,184 + int 33h + mov ax,7 + mov cx,15 + mov dx,298*2 + int 33h + ret + + endp + + + + + +Readmouse proc near + + mov ax,mousebutton + mov oldbutton,ax + mov ax,mousex + mov oldx,ax + mov ax,mousey + mov oldy,ax + call mousecall + mov mousex,cx + mov mousey,dx + mov mousebutton,bx + ret + + endp + + + + + + + +Mousecall proc near + + if playback + call playmouse + ret + endif + + mov ax,3 + int 33h + shr cx,1 + cmp cx,298 + jc notxover + mov cx,298 +notxover: cmp cx,15 + jnc notxover2 + mov cx,15 +notxover2: cmp dx,184 + jc notyover + mov dx,184 +notyover: cmp dx,15 + jnc notyover2 + mov dx,15 +notyover2: + if recording + call recmouse + endif + ret + + endp + + + + + + + if playback + +Playmouse proc near + + mov es,recordspace + mov di,recordpos + cmp word ptr [es:di+6],0 + jnz isthisplay + add di,8 + add recordpos,8 + cmp di,16384 + jnz isthisplay + call loadrec +isthisplay: mov cx,[es:di] + mov dx,[es:di+2] + mov bx,[es:di+4] + dec word ptr [es:di+6] + ret + + endp + + endif + + if recording + +Recmouse proc near + + mov es,recordspace + mov di,recordpos + cmp di,-8 + jz diffrec + cmp [es:di],cx + jnz diffrec + cmp [es:di+2],dx + jnz diffrec + cmp [es:di+4],bx + jnz diffrec + inc word ptr [es:di+6] + cmp word ptr [es:di+5],0ffffh + jz diffrec + ret +diffrec: add recordpos,8 + add di,8 + cmp di,16384 + jnz notsaverec + push cx dx bx + call saverec + pop bx dx cx +notsaverec: mov [es:di],cx + mov [es:di+2],dx + mov [es:di+4],bx + mov word ptr [es:di+6],1 + ret + + endp + + + + + +Saverec proc near + + mov bx,rechandle + mov ds,recordspace + mov dx,0 + mov cx,recordpos + add cx,8 + mov ah,40h + int 21h + mov di,0 + mov recordpos,0 + ret + + endp + + + + + + +Loadrec proc near + + mov bx,rechandle + mov ds,recordspace + mov dx,0 + mov cx,16384+8 + mov ah,3fh + int 21h + mov di,0 + mov recordpos,0 + ret + + endp + + + endif + + + + + + + +Readmouse1 proc near + + mov ax,mousex + mov oldx,ax + mov ax,mousey + mov oldy,ax + call mousecall + mov mousex,cx + mov mousey,dx + mov mousebutton1,bx + ret + + endp + + + +Readmouse2 proc near + + mov ax,mousex + mov oldx,ax + mov ax,mousey + mov oldy,ax + call mousecall + mov mousex,cx + mov mousey,dx + mov mousebutton2,bx + ret + + endp + + +Readmouse3 proc near + + mov ax,mousex + mov oldx,ax + mov ax,mousey + mov oldy,ax + call mousecall + mov mousex,cx + mov mousey,dx + mov mousebutton3,bx + ret + + endp + + + + + + +Readmouse4 proc near + + mov ax,mousebutton + mov oldbutton,ax + mov ax,mousex + mov oldx,ax + mov ax,mousey + mov oldy,ax + call mousecall + mov mousex,cx + mov mousey,dx + mov ax,mousebutton1 + or ax,mousebutton2 + or ax,mousebutton3 + or bx,ax + mov mousebutton,bx + ret + + endp + + + + + +Readkey proc near + + mov bx,bufferout + cmp bx,bufferin + jz nokey + inc bx + and bx,15 + mov bufferout,bx + mov di,offset cs:keybuffer + add di,bx + mov al,[cs:di] + mov currentkey,al + ret +nokey: mov currentkey,0 + ret + + + endp + +keybuffer: db 16 dup (0) + + + +Convertkey proc near + + and al,127 + mov ah,0 + mov di,offset cs:keyconverttab + add di,ax + mov al,[cs:di] + ret + +keyconverttab: db 0,0,"1","2","3","4","5","6","7","8","9","0","-",0,8,0 + db "Q","W","E","R","T","Y","U","I","O","P",0,0,13,0,"A","S" + db "D","F","G","H","J","K","L",0,0,0,0,0,"Z","X","C","V","B","N","M" + db 0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + endp + + + + +;-------------------------------------------------------------Miscellaneous---- + +Randomnum1 proc near + + push ds es di bx cx + call randomnumber + pop cx bx di es ds + ret + + endp + + + + + +Randomnum2 proc near + + push ds es di bx ax + call randomnumber + mov cl,al + pop ax bx di es ds + ret + + endp + + + + + +Randomnumber proc near + + mov al,seed + and al,48h + add al,38h + sal al,1 + sal al,1 + rcl seed+2,1 + rcl seed+1,1 + rcl seed+0,1 + mov al,seed + and al,48h + add al,38h + sal al,1 + sal al,1 + rcl seed+2,1 + rcl seed+1,1 + rcl seed+0,1 + mov al,seed + and al,48h + add al,38h + sal al,1 + sal al,1 + rcl seed+2,1 + rcl seed+1,1 + rcl seed+0,1 + mov al,seed + and al,48h + add al,38h + sal al,1 + sal al,1 + rcl seed+2,1 + rcl seed+1,1 + rcl seed+0,1 + mov al,seed + and al,48h + add al,38h + sal al,1 + sal al,1 + rcl seed+2,1 + rcl seed+1,1 + rcl seed+0,1 + mov al,seed + and al,48h + add al,38h + sal al,1 + sal al,1 + rcl seed+2,1 + rcl seed+1,1 + rcl seed+0,1 + mov al,seed + and al,48h + add al,38h + sal al,1 + sal al,1 + rcl seed+2,1 + rcl seed+1,1 + rcl seed+0,1 + mov al,seed + and al,48h + add al,38h + sal al,1 + sal al,1 + rcl seed+2,1 + rcl seed+1,1 + rcl seed+0,1 + + mov al,seed + ret + + endp + + + + + + +Hangon proc near + +hangonloop: push cx + call vsync + pop cx + loop hangonloop + ret + + endp + + + + + +;-------------------------------------------------------------Disc handling---- + + +Loadtraveltext proc near + + mov dx,offset cs:traveltextname + call standardload + mov traveltext,ax + ret + + endp + + + + + + +Loadintotemp proc near + + push cs + pop ds + call standardload + mov tempgraphics,ax + ret + + endp + + + + + + +Loadintotemp2 proc near + + push cs + pop ds + call standardload + mov tempgraphics2,ax + ret + + endp + + + + +Loadintotemp3 proc near + + push cs + pop ds + call standardload + mov tempgraphics3,ax + ret + + endp + + + +Loadtempcharset proc near + + call standardload + mov tempcharset,ax + ret + + endp + + + + + + +Standardload proc near + + call openfile + call readheader + mov bx,[es:di] + push bx + mov cl,4 + shr bx,cl + call allocatemem + mov ds,ax + pop cx + push ax + mov dx,0 + call readfromfile + call closefile + pop ax + ret + + endp + + + + + + +Loadtemptext proc near + + call standardload + mov textfile1,ax + ret + + endp + + + + + + + +Loadroom proc near + + mov roomloaded,1 + mov timecount,0 + mov maintimer,0 + mov mapoffsetx,104 + mov mapoffsety,38 + mov textaddressx,13 + mov textaddressy,182 + mov textlen,240 + mov al,newlocation + mov location,al + call getroomdata + call startloading + call loadroomssample + call switchryanon + call drawflags + call getdimension + ret + + endp + + + + +Loadroomssample proc near + + mov al,roomssample + cmp al,255 + jz loadedalready + cmp al,currentsample + jz loadedalready + mov currentsample,al + mov al,currentsample + mov cl,"0" + call twodigitnum + mov di,offset cs:samplename + xchg al,ah + mov [cs:di+10],ax + mov dx,di + call loadsecondsample +loadedalready: ret + + endp + + + + + +Getridofreels proc near + + cmp roomloaded,0 + jz dontgetrid + mov es,reel1 + call deallocatemem + mov es,reel2 + call deallocatemem + mov es,reel3 + call deallocatemem +dontgetrid: ret + + endp + + + + + +Getridofall proc near + + mov es,backdrop + call deallocatemem + mov es,setframes + call deallocatemem + mov es,reel1 + call deallocatemem + mov es,reel2 + call deallocatemem + mov es,reel3 + call deallocatemem + mov es,reels + call deallocatemem + mov es,people + call deallocatemem + mov es,setdesc + call deallocatemem + mov es,blockdesc + call deallocatemem + mov es,roomdesc + call deallocatemem + mov es,freeframes + call deallocatemem + mov es,freedesc + call deallocatemem + ret + + endp + + + + + +Restorereels proc near + + cmp roomloaded,0 + jz dontrestore + mov al,reallocation + call getroomdata + mov dx,bx + call openfile + call readheader + + call dontloadseg + call dontloadseg + call dontloadseg + call dontloadseg + + call allocateload + mov reel1,ax + mov ds,ax + mov dx,0 + call loadseg + call allocateload + mov reel2,ax + mov ds,ax + mov dx,0 + call loadseg + call allocateload + mov reel3,ax + mov ds,ax + mov dx,0 + call loadseg + call closefile +dontrestore: ret + + endp + + + + + + + +Restoreall proc near + + mov al,location + call getroomdata + mov dx,bx + call openfile + call readheader + + call allocateload + mov ds,ax + mov backdrop,ax + mov dx,flags + call loadseg + + mov ds,workspace ;mapdata + mov dx,map + mov cx,132*66 ;maplen + mov al,0 + call fillspace + call loadseg + call sortoutmap + + call allocateload + mov setframes,ax + mov ds,ax + mov dx,framedata + call loadseg + + ;mov ds,setdat + ;mov dx,0 + ;mov cx,setdatlen + ;mov al,255 + ;call fillspace + call dontloadseg + + call allocateload + mov reel1,ax + mov ds,ax + mov dx,0 + ;call bloc + ;BIG FIXME: undefined bloc, replaced with loadseg. dunno! + call loadseg + call allocateload + mov reel2,ax + mov ds,ax + mov dx,0 + call loadseg + call allocateload + mov reel3,ax + mov ds,ax + mov dx,0 + call loadseg + + call allocateload + mov reels,ax + mov ds,ax + mov dx,0 + call loadseg + + call allocateload + mov people,ax + mov ds,ax + mov dx,0 + call loadseg + + call allocateload + mov setdesc,ax + mov ds,ax + mov dx,0 + call loadseg + + call allocateload + mov blockdesc,ax + mov ds,ax + mov dx,0 + call loadseg + + call allocateload + mov roomdesc,ax + mov ds,ax + mov dx,0 + call loadseg + + call allocateload + mov freeframes,ax + mov ds,ax + mov dx,0 + call loadseg + + ;mov ds,freedat + ;mov dx,0 + ;mov cx,freedatlen + ;mov al,255 + ;call fillspace + call dontloadseg + + call allocateload + mov freedesc,ax + mov ds,ax + mov dx,freetextdat + call loadseg + + call closefile + + call setallchanges + ret + + endp + + + +Sortoutmap proc near + + push es di + mov ds,workspace + mov si,0 + mov es,mapdata + mov di,0 + + mov cx,maplength +blimey: push cx si + mov cx,mapwidth + rep movsb + pop si cx + add si,132 + loop blimey + pop di es + ret + + endp + + + + +Startloading proc near + + mov combatcount,0 + mov al,[cs:bx+13] + mov roomssample,al + mov al,[cs:bx+15] + mov mapx,al + mov al,[cs:bx+16] + mov mapy,al + + mov al,[cs:bx+20] ; start path pos + mov liftflag,al + mov al,[cs:bx+21] ; start path pos + mov manspath,al + mov destination,al + mov finaldest,al + mov al,[cs:bx+22] + mov facing,al + mov turntoface,al + mov al,[cs:bx+23] + mov counttoopen,al + mov al,[cs:bx+24] + mov liftpath,al + mov al,[cs:bx+25] + mov doorpath,al + mov lastweapon,-1 + mov al,[cs:bx+27] + push ax + + mov al,[cs:bx+31] + mov ah,reallocation + mov reallocation,al + + mov dx,bx + call openfile + call readheader + + call allocateload + mov ds,ax + mov backdrop,ax + mov dx,flags + call loadseg + + mov ds,workspace ;mapdata + mov dx,map + mov cx,132*66 ;maplen + mov al,0 + call fillspace + call loadseg + call sortoutmap + + call allocateload + mov setframes,ax + mov ds,ax + mov dx,framedata + call loadseg + + mov ds,setdat + mov dx,0 + mov cx,setdatlen + mov al,255 + call fillspace + call loadseg + + call allocateload + mov reel1,ax + mov ds,ax + mov dx,0 + call loadseg + call allocateload + mov reel2,ax + mov ds,ax + mov dx,0 + call loadseg + call allocateload + mov reel3,ax + mov ds,ax + mov dx,0 + call loadseg + + call allocateload + mov reels,ax + mov ds,ax + mov dx,0 + call loadseg + + call allocateload + mov people,ax + mov ds,ax + mov dx,0 + call loadseg + + call allocateload + mov setdesc,ax + mov ds,ax + mov dx,0 + call loadseg + + call allocateload + mov blockdesc,ax + mov ds,ax + mov dx,0 + call loadseg + + call allocateload + mov roomdesc,ax + mov ds,ax + mov dx,0 + call loadseg + + call allocateload + mov freeframes,ax + mov ds,ax + mov dx,0 + call loadseg + + mov ds,freedat + mov dx,0 + mov cx,freedatlen + mov al,255 + call fillspace + call loadseg + + call allocateload + mov freedesc,ax + mov ds,ax + mov dx,freetextdat + call loadseg + + call closefile + + + call findroominloc + call deletetaken + call setallchanges + call autoappear + mov al,newlocation + call getroomdata + mov lastweapon,-1 + mov mandead,0 + mov lookcounter,160 + mov newlocation,255 + mov linepointer,254 + pop ax + cmp al,255 + jz dontwalkin + mov manspath,al + push bx + call autosetwalk + pop bx +dontwalkin: call findxyfrompath + ret + + endp + + + + + + + + + + +Disablepath proc near ;needs al,ah map x,y cl=path + + push cx + xchg al,ah + mov cx,-6 +looky2: add cx,6 + sub al,10 + jnc looky2 + mov al,ah + dec cx +lookx2: inc cx + sub al,11 + jnc lookx2 + mov al,cl + mov ah,0 + mov cx,144 + mul cx + mov es,reels + mov bx,pathdata + add bx,ax + pop ax + mov ah,0 + add ax,ax + add ax,ax + add ax,ax + add bx,ax + mov al,0 + mov [es:bx+6],al + ret + + endp + + + + + + + + +Findxyfrompath proc near ;path number was found from + ;room data. Fill ryanxy from + call getroomspaths ;the pathdata. + mov al,manspath + mov ah,0 + add ax,ax + add ax,ax + add ax,ax + add bx,ax + mov ax,[es:bx] + sub al,12 + sub ah,12 + mov ryanx,al + mov ryany,ah + ret + + endp + + + + + +Findroominloc proc near + + mov al,mapy + mov cx,-6 +looky: add cx,6 + sub al,10 + jnc looky + mov al,mapx + dec cx +lookx: inc cx + sub al,11 + jnc lookx + mov roomnum,cl + ret + + endp + + + + + + +Getroomdata proc near + + mov ah,0 + mov cx,32 + mul cx + mov bx,offset cs:roomdata + add bx,ax + ret + + endp + + + + + + + + + + + + + +Readheader proc near + + push cs + pop ds + mov dx,offset cs:fileheader + mov cx,headerlen + call readfromfile + push cs + pop es + mov di,offset cs:filedata + ret + + endp + + + + + + + + +Dontloadseg proc neqr + + mov ax,[es:di] + add di,2 + push bx di es + mov cx,0 + mov dx,ax + mov al,1 + mov ah,42h + int 21h + pop es di bx + ret + + endp + + + + + + +Allocateload proc near + + push es di + mov bx,[es:di] + mov cl,4 + shr bx,cl + call allocatemem + pop di es + ret + + endp + + + + +Fillspace proc near + + push es ds dx di bx + mov di,dx + push ds + pop es + rep stosb + pop bx di dx ds es + ret + + endp + + + + + + + +Getridoftemp proc near + + mov es,tempgraphics + call deallocatemem + ret + + endp + + + + + +Getridoftemptext proc near + + mov es,textfile1 + call deallocatemem + ret + + endp + + + + + +Getridoftemp2 proc near + + mov es,tempgraphics2 + call deallocatemem + ret + + endp + + + +Getridoftemp3 proc near + + mov es,tempgraphics3 + call deallocatemem + ret + + endp + + + +Getridoftempcharset proc near + + mov es,tempcharset + call deallocatemem + ret + + endp + + + +Getridoftempsp proc near + + mov es,tempsprites + call deallocatemem + ret + + endp + + + + + + + + + + + + + + + + + + + + + + + +Readsetdata proc near + + mov dx,offset cs:characterset1 + call standardload + mov charset1,ax + + mov dx,offset cs:icongraphics0 + call standardload + mov icons1,ax + + mov dx,offset cs:icongraphics1 + call standardload + mov icons2,ax + + mov dx,offset cs:spritename1 + call standardload + mov mainsprites,ax + + mov dx,offset cs:puzzletextname + call standardload + mov puzzletext,ax + + mov dx,offset cs:commandtextname + call standardload + mov commandtext,ax + + mov ax,charset1 + mov currentset,ax + + cmp soundint,255 + jz novolumeload + mov dx,offset cs:volumetabname + call openfile + mov cx,2048-256 + mov ds,soundbuffer + mov dx,16384 + call readfromfile + call closefile +novolumeload: ret + + endp + + + + + + + + + + + +Createfile proc near + + mov ah,3ch + mov cx,0 + int 21h + mov bx,ax + ret + + endp + + + + + + + +Openfile proc near + + if cd + call makename + endif + push cs + pop ds + mov ah,3dh + mov al,2 + push dx + int 21h + pop dx + jc fileerror + mov handle,ax + ret +fileerror: mov gameerror,8 + jmp quickquit2 + + endp + + + if cd +Openfilefromc proc near + + push cs + pop ds + mov ah,3dh + mov al,2 + push dx + int 21h + pop dx + mov handle,ax + ret + + endp + endif + + + if cd +Makename proc near + + if demo + ret + endif + mov si,dx + mov di,offset cs:place +transfer: mov al,[cs:si] + mov [cs:di],al + inc si + inc di + cmp al,0 + jnz transfer + mov dx,offset cs:id + ret +id: db "D:\" +place: db 30 dup (0) + + endp + endif + + + + + +Openfilenocheck proc near + + if cd + call makename + endif + push cs + pop ds + mov ah,3dh + mov al,2 + int 21h + mov handle,ax + ret + + endp + + + +Openforsave proc near + + mov cx,0 + mov ah,3ch + mov al,2 + int 21h + mov handle,ax + ret + + endp + + + +Closefile proc near + + mov bx,handle + mov ah,3eh + int 21h + ret + + endp + + + + +Readfromfile proc near + + mov bx,handle + mov ah,3fh + int 21h + ret + + endp + + + + +Setkeyboardint proc near + + mov ah,35h + mov al,9 + int 21h + mov oldint9seg,es ; Save es:bx to temp memory + mov oldint9add,bx + push cs + pop ds + mov dx,offset cs:keyboardread + mov ah,25h + mov al,9 + int 21h ; Set to new + ret + + endp + + + + +Resetkeyboard proc near + + cmp oldint9add,-1 + jz noreset + mov dx,oldint9add ;Restore old interupt vector + mov ax,oldint9seg ;for keys + mov ds,ax + mov ah,25h + mov al,9 + int 21h +noreset: ret + + endp + + + + + + + + + + + + + + + + + + + + + + +Keyboardread proc near + + push ax dx di ds es + in al,60h + cmp al,lasthardkey + jz same + mov lasthardkey,al + cmp al,128 + jnc same + mov dx,bufferin + inc dx + and dx,15 + cmp dx,bufferout + jz same ;buffer is full + mov bufferin,dx + call convertkey + mov di,offset cs:keybuffer + mov dx,bufferin + add di,dx + mov [cs:di],al +same: in al,61h + mov ah,al + or al,80h ; Mask for Akn + out 61h,al ; Set Akn. + and al,7fh + out 61h,al + cli + mov al,20h ; 8259 end of interrupt + out 20h,al + pop es ds di dx ax + iret + + endp + + + +;------------------------------------------------------Text and tables data---- + + + +Fileheader db "DREAMWEB DATA FILE " + db "COPYRIGHT 1992 " + db "CREATIVE REALITY" +Filedata dw 20 dup (0) +Extradata db 6 dup (0) +Headerlen equ $-Fileheader + + +Roomdata db "DREAMWEB.R00",0 ;Ryan's apartment + db 5,255,33,10 + db 255,255,255,0 + db 1,6,2,255,3,255,255,255,255,255,0 + + db "DREAMWEB.R01",0 + db 1,255,44,10 + db 255,255,255,0 + db 7,2,255,255,255,255,6,255,255,255,1 + + db "DREAMWEB.R02",0 + db 2,255,33,0 + db 255,255,255,0 + db 1,0,255,255,1,255,3,255,255,255,2 + + db "DREAMWEB.R03",0 + db 5,255,33,10 + db 255,255,255,0 + db 2,2,0,2,4,255,0,255,255,255,3 + + db "DREAMWEB.R04",0 + db 23,255,11,30 + db 255,255,255,0 + db 1,4,0,5,255,255,3,255,255,255,4 + + db "DREAMWEB.R05",0 + if demo + db 22,255,22,30 + else + db 5,255,22,30 + endif + db 255,255,255,0 + db 1,2,0,4,255,255,3,255,255,255,5 + + db "DREAMWEB.R06",0 + db 5,255,11,30 + db 255,255,255,0 + db 1,0,0,1,2,255,0,255,255,255,6 + + db "DREAMWEB.R07",0 + db 255,255,0,20 + db 255,255,255,0 + db 2,2,255,255,255,255,0,255,255,255,7 + + db "DREAMWEB.R08",0 + db 8,255,0,10 + db 255,255,255,0 + db 1,2,255,255,255,255,0,11,40,0,8 + + db "DREAMWEB.R09",0 + db 9,255,22,10 + db 255,255,255,0 + db 4,6,255,255,255,255,0,255,255,255,9 + + db "DREAMWEB.R10",0 + db 10,255,33,30 + db 255,255,255,0 + db 2,0,255,255,2,2,4,22,30,255,10 ;22,30,0 switches + ;off path 0 in skip + db "DREAMWEB.R11",0 + db 11,255,11,20 + db 255,255,255,0 + db 0,4,255,255,255,255,255,255,255,255,11 + + db "DREAMWEB.R12",0 + db 12,255,22,20 + db 255,255,255,0 + db 1,4,255,255,255,255,255,255,255,255,12 + + db "DREAMWEB.R13",0 + db 12,255,22,20 + db 255,255,255,0 + db 1,4,255,255,255,255,255,255,255,255,13 + + db "DREAMWEB.R14",0 + db 14,255,44,20 + db 255,255,255,0 + db 0,6,255,255,255,255,255,255,255,255,14 + + db 32 dup (0) + db 32 dup (0) + db 32 dup (0) + db 32 dup (0) + + db "DREAMWEB.R19",0 + db 19,255,0,0 + db 255,255,255,0 + db 0,4,255,255,255,255,255,255,255,255,19 + + db "DREAMWEB.R20",0 + db 22,255,0,20 + db 255,255,255,0 + db 1,4,2,15,255,255,255,255,255,255,20 + + db "DREAMWEB.R21",0 + if demo + db 22,255,11,10 + else + db 5,255,11,10 + endif + db 255,255,255,0 + db 1,4,2,15,1,255,255,255,255,255,21 + + db "DREAMWEB.R22",0 + db 22,255,22,10 + db 255,255,255,0 + db 0,4,255,255,1,255,255,255,255,255,22 + + db "DREAMWEB.R23",0 + db 23,255,22,30 + db 255,255,255,0 + db 1,4,2,15,3,255,255,255,255,255,23 + + db "DREAMWEB.R24",0 + db 5,255,44,0 + db 255,255,255,0 + db 1,6,2,15,255,255,255,255,255,255,24 + + db "DREAMWEB.R25",0 + db 22,255,11,40 + db 255,255,255,0 + db 1,0,255,255,255,255,255,255,255,255,25 + + db "DREAMWEB.R26",0 + db 9,255,22,20 + db 255,255,255,0 + db 4,2,255,255,255,255,255,255,255,255,26 + + db "DREAMWEB.R27",0 + db 22,255,11,20 + db 255,255,255,0 + db 0,6,255,255,255,255,255,255,255,255,27 + + db "DREAMWEB.R28",0 + db 5,255,11,30 + db 255,255,255,0 + db 0,0,255,255,2,255,255,255,255,255,28 + + db "DREAMWEB.R29",0 + db 22,255,11,10 + db 255,255,255,0 + db 0,2,255,255,255,255,255,255,255,255,29 + + + + db "DREAMWEB.R05",0 ;Duplicate of hotel lobby, + if demo + db 22,255,22,10 ;but emerging from the lift. + else + db 5,255,22,10 + endif + db 255,255,255,0 + db 1,4,1,15,255,255,255,255,255,255,5 + + db "DREAMWEB.R04",0 ;Duplicate of pool hall lobby, + db 23,255,22,20 ;but emerging from the lift. + db 255,255,255,0 + db 1,4,2,15,255,255,255,255,255,255,4 + + db "DREAMWEB.R10",0 ;entering alley via skip + db 10,255,22,30 + db 255,255,255,0 + db 3,6,255,255,255,255,255,255,255,255,10 + + db "DREAMWEB.R12",0 ;on the beach, getting up. + db 12,255,22,20 + db 255,255,255,0 + db 0,2,255,255,255,255,255,255,255,255,12 + + db "DREAMWEB.R03",0 ;Duplicate of Eden's lobby + db 5,255,44,0 ;but emerging from the lift + db 255,255,255,0 + db 1,6,2,255,4,255,255,255,255,255,3 + + db "DREAMWEB.R24",0 ;Duplicate of Eden's flat + db 5,255,22,0 ;but starting on the bed + db 255,255,255,0 + db 3,6,0,255,255,255,255,33,0,3,24 ; 33,0,3 turns off + ; path for lift + db "DREAMWEB.R22",0 ;Duplicate + db 22,255,22,20 ;of hotel but in pool room + db 255,255,255,0 + db 1,4,255,255,255,255,255,255,255,255,22 + + db "DREAMWEB.R22",0 ;Duplicate + db 22,255,22,20 ;of hotel but in pool room + db 255,255,255,0 ;coming out of bedroom + db 0,2,255,255,255,255,255,255,255,255,22 + + db "DREAMWEB.R11",0 ;Duplicate + db 11,255,22,30 ;of carpark but getting + db 255,255,255,0 ;up off the floor + db 0,0,255,255,255,255,255,255,255,255,11 + + db "DREAMWEB.R28",0 + db 5,255,11,20 + db 255,255,255,0 + db 0,6,255,255,2,255,255,255,255,255,28 + + db "DREAMWEB.R21",0 + if demo + db 22,255,11,10 + else + db 5,255,11,10 + endif + db 255,255,255,0 + db 1,4,2,15,1,255,255,255,255,255,21 + + db "DREAMWEB.R26",0 + db 9,255,0,40 + db 255,255,255,0 + db 0,0,255,255,255,255,255,255,255,255,26 + + db "DREAMWEB.R19",0 + db 19,255,0,0 + db 255,255,255,0 + db 2,2,255,255,255,255,255,255,255,255,19 + + db "DREAMWEB.R08",0 ;leaving tvstudio into street + db 8,255,11,40 + db 255,255,255,0 + db 0,4,255,255,255,255,255,255,255,255,8 + + db "DREAMWEB.R01",0 + db 1,255,44,10 + db 255,255,255,0 + db 3,6,255,255,255,255,255,255,255,255,1 + + + + db "DREAMWEB.R45",0 ;Dream room + db 35,255,22,30 + db 255,255,255,0 + db 0,6,255,255,255,255,255,255,255,255,45 + + db "DREAMWEB.R46",0 ;Dream room + db 35,255,22,40 + db 255,255,255,0 + db 0,4,255,255,255,255,255,255,255,255,46 + + db "DREAMWEB.R47",0 ;Dream room + db 35,255,0,0 + db 255,255,255,0 + db 0,0,255,255,255,255,255,255,255,255,47 + + db "DREAMWEB.R45",0 ;Dream room + db 35,255,22,30 + db 255,255,255,0 + db 4,0,255,255,255,255,255,255,255,255,45 + + db "DREAMWEB.R46",0 ;Dream room + db 35,255,22,50 + db 255,255,255,0 + db 0,4,255,255,255,255,255,255,255,255,46 + + + + db "DREAMWEB.R50",0 ; Intro sequence one + db 35,255,22,30 + db 255,255,255,0 + db 0,0,255,255,255,255,255,255,255,255,50 + + db "DREAMWEB.R51",0 ; Intro sequence two + db 35,255,11,30 + db 255,255,255,0 + db 0,0,255,255,255,255,255,255,255,255,51 + + db "DREAMWEB.R52",0 ; Intro sequence three + db 35,255,22,30 + db 255,255,255,0 + db 0,0,255,255,255,255,255,255,255,255,52 + + db "DREAMWEB.R53",0 ; Intro sequence four + db 35,255,33,0 + db 255,255,255,0 + db 0,0,255,255,255,255,255,255,255,255,53 + + db "DREAMWEB.R54",0 ; Intro sequence five - wasteland + db 35,255,0,0 + db 255,255,255,0 + db 0,0,255,255,255,255,255,255,255,255,54 + + db "DREAMWEB.R55",0 ; End sequence + db 14,255,44,0 + db 255,255,255,0 + db 0,0,255,255,255,255,255,255,255,255,55 + + +Madeuproomdat db 32 dup (0) + +Roomscango db 1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0 + +Roompics db 5,0,3,2,4,1,10,9,8,6,11,4,7,7,0 + +Oplist db 3 dup (0) + +Inputline db 128 dup (0) + +linedata dw 200 dup (0ffffh) + +presslist db 6 dup (255) + +savenames db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + + + +savefiles db "DREAMWEB.D00",0 + db "DREAMWEB.D01",0 + db "DREAMWEB.D02",0 + db "DREAMWEB.D03",0 + db "DREAMWEB.D04",0 + db "DREAMWEB.D05",0 + db "DREAMWEB.D06",0 + +Recname db "DREAMWEB.DEM",0 + +Quitrequested db 0 + + +;-------------------------------------------------------End of code segment---- + +DREAMWEBPROG ends + + + + +;---------------------------------------------------------------Stack space----s + +STACKSPACE segment para stack 'STACK' + +stak db 256 dup (?) + +STACKSPACE ends + + + +;-----------------------------------------------------------End of all code---- + + end Dreamweb + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/keypad.asm b/devtools/tasmrecover/dreamweb/keypad.asm new file mode 100644 index 0000000000..d75a4fde82 --- /dev/null +++ b/devtools/tasmrecover/dreamweb/keypad.asm @@ -0,0 +1,1758 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +Entercode proc near + + mov keypadax,ax + mov keypadcx,cx + call getridofreels + call loadkeypad + call createpanel + call showicon + call showouterpad + call showkeypad + call readmouse + call showpointer + call worktoscreen + call delpointer + mov presspointer,0 + mov getback,0 + +keypadloop: call delpointer + call readmouse + call showkeypad + call showpointer + cmp presscount,0 + jz nopresses + dec presscount + jmp afterpress +nopresses: mov pressed,255 + mov graphicpress,255 + call vsync + +afterpress: call dumppointer + call dumpkeypad + call dumptextline + mov bx,offset cs:keypadlist + call checkcoords + cmp getback,1 + jz numberright + + cmp lightcount,1 + jnz notendkey + cmp lockstatus,0 + jz numberright + jmp keypadloop + +notendkey: cmp presscount,40 + jnz keypadloop + call addtopresslist + cmp pressed,11 + jnz keypadloop + mov ax,keypadax + mov cx,keypadcx + call isitright + jnz incorrect + mov lockstatus,0 + mov al,11 + call playchannel1 + mov lightcount,120 + mov presspointer,0 + jmp keypadloop +incorrect: mov al,11 + call playchannel1 + mov lightcount,120 + mov presspointer,0 + jmp keypadloop + +numberright: mov manisoffscreen,0 + call getridoftemp + call restorereels + call redrawmainscrn + call worktoscreenm + ret + +keypadlist: dw keypadx+9,keypadx+30,keypady+9,keypady+22,buttonone + dw keypadx+31,keypadx+52,keypady+9,keypady+22,buttontwo + dw keypadx+53,keypadx+74,keypady+9,keypady+22,buttonthree + dw keypadx+9,keypadx+30,keypady+23,keypady+40,buttonfour + dw keypadx+31,keypadx+52,keypady+23,keypady+40,buttonfive + dw keypadx+53,keypadx+74,keypady+23,keypady+40,buttonsix + dw keypadx+9,keypadx+30,keypady+41,keypady+58,buttonseven + dw keypadx+31,keypadx+52,keypady+41,keypady+58,buttoneight + dw keypadx+53,keypadx+74,keypady+41,keypady+58,buttonnine + dw keypadx+9,keypadx+30,keypady+59,keypady+73,buttonnought + dw keypadx+31,keypadx+74,keypady+59,keypady+73,buttonenter + dw keypadx+72,keypadx+86,keypady+80,keypady+94,quitkey + dw 0,320,0,200,blank + dw 0ffffh + + endp + + + + + + + + +Loadkeypad proc near + + mov dx,offset cs:extragraphics1 + call loadintotemp + ret + + endp + + + + +Quitkey proc near + + cmp commandtype,222 + jz alreadyqk + mov commandtype,222 + mov al,4 + call commandonly +alreadyqk: mov ax,mousebutton + cmp ax,oldbutton + jz notqk + and ax,1 + jnz doqk +notqk: ret + +doqk: mov getback,1 + ret + + endp + + + + + + + + + + + + + + + + + + +Addtopresslist proc near + + cmp presspointer,5 + jz nomorekeys + mov al,pressed + cmp al,10 + jnz not10 + mov al,0 +not10: mov bx,presspointer + mov dx,seg presslist + mov es,dx + add bx,offset es:presslist + mov [es:bx],al + inc presspointer +nomorekeys: ret + + endp + + + + +Buttonone proc near + + mov cl,1 + call buttonpress + ret + + endp + + +Buttontwo proc near + + mov cl,2 + call buttonpress + ret + + endp + + + +Buttonthree proc near + + mov cl,3 + call buttonpress + ret + + endp + + + +Buttonfour proc near + + mov cl,4 + call buttonpress + ret + + endp + + +Buttonfive proc near + + mov cl,5 + call buttonpress + ret + + endp + + + +Buttonsix proc near + + mov cl,6 + call buttonpress + ret + + endp + + +Buttonseven proc near + + mov cl,7 + call buttonpress + ret + + endp + + +Buttoneight proc near + + mov cl,8 + call buttonpress + ret + + endp + +Buttonnine proc near + + mov cl,9 + call buttonpress + ret + + endp + + + +Buttonnought proc near + + mov cl,10 + call buttonpress + ret + + endp + + + + + + +Buttonenter proc near + + mov cl,11 + call buttonpress + ret + + endp + + + +Buttonpress proc near + + mov ch,cl + add ch,100 + cmp commandtype,ch + jz alreadyb + mov commandtype,ch + mov al,cl + add al,4 + push cx + call commandonly + pop cx +alreadyb: mov ax,mousebutton + cmp ax,oldbutton + jz notb + and ax,1 + jnz dob +notb: ret + +dob: mov pressed,cl + add cl,21 + mov graphicpress,cl + mov presscount,40 + cmp cl,32 + jz nonoise + mov al,10 + call playchannel1 +nonoise: ret + + endp + + + + + + + + + + + + + + +Showouterpad proc near + + mov di,keypadx-3 + mov bx,keypady-4 + mov ds,tempgraphics + mov al,1 + mov ah,0 + call showframe + mov di,keypadx+74 + mov bx,keypady+76 + mov ds,tempgraphics + mov al,37 + mov ah,0 + call showframe + ret + + endp + + + + + + + + + + +Showkeypad proc near + + mov al,22 + mov di,keypadx+9 + mov bx,keypady+5 + call singlekey + mov al,23 + mov di,keypadx+31 + mov bx,keypady+5 + call singlekey + mov al,24 + mov di,keypadx+53 + mov bx,keypady+5 + call singlekey + + mov al,25 + mov di,keypadx+9 + mov bx,keypady+23 + call singlekey + mov al,26 + mov di,keypadx+31 + mov bx,keypady+23 + call singlekey + mov al,27 + mov di,keypadx+53 + mov bx,keypady+23 + call singlekey + + mov al,28 + mov di,keypadx+9 + mov bx,keypady+41 + call singlekey + mov al,29 + mov di,keypadx+31 + mov bx,keypady+41 + call singlekey + mov al,30 + mov di,keypadx+53 + mov bx,keypady+41 + call singlekey + + mov al,31 + mov di,keypadx+9 + mov bx,keypady+59 + call singlekey + mov al,32 + mov di,keypadx+31 + mov bx,keypady+59 + call singlekey + + cmp lightcount,0 + jz notenter + dec lightcount + mov al,36 + mov bx,keypady-1+63 + cmp lockstatus,0 + jnz changelight + mov al,41 + mov bx,keypady+4+63 +changelight: cmp lightcount,60 + jc gotlight + cmp lightcount,100 + jnc gotlight + dec al +gotlight: mov ds,tempgraphics + mov ah,0 + mov di,keypadx+60 + call showframe + +notenter: ret + + endp + + + + + +Singlekey proc near + + cmp graphicpress,al + jnz gotkey + add al,11 + cmp presscount,8 + jnc gotkey + sub al,11 +; cmp presscount,10 +; jnc gotkey +; sub al,11 +gotkey: mov ds,tempgraphics + sub al,20 + mov ah,0 + call showframe + ret + + endp + + + + + + + + + +Dumpkeypad proc near + + mov di,keypadx-3 + mov bx,keypady-4 + mov cl,120 + mov ch,90 + call multidump + ret + + endp + + + + + +;--------------------------------- + + + + +Usemenu proc near + + call getridofreels + call loadmenu + call createpanel + call showpanel + call showicon + mov newobs,0 + call drawfloor + call printsprites + + mov al,4 + mov ah,0 + mov di,menux-48 + mov bx,menuy-4 + mov ds,tempgraphics2 + call showframe + call getundermenu + mov al,5 + mov ah,0 + mov di,menux+54 + mov bx,menuy+72 + mov ds,tempgraphics2 + call showframe + + + call worktoscreenm + mov getback,0 + +menuloop: call delpointer + call putundermenu + call showmenu + call readmouse + call showpointer + call vsync + call dumppointer + call dumpmenu + call dumptextline + mov bx,offset cs:menulist + call checkcoords + cmp getback,1 + jnz menuloop + + mov manisoffscreen,0 + call redrawmainscrn + call getridoftemp + call getridoftemp2 + call restorereels + call worktoscreenm + ret + +menulist: dw menux+54,menux+68,menuy+72,menuy+88,quitkey + dw 0,320,0,200,blank + dw 0ffffh + + ret + + endp + + + + + + + +Dumpmenu proc near + + mov di,menux + mov bx,menuy + mov cl,48 + mov ch,48 + call multidump + ret + + endp + + + + + + +Getundermenu proc near + + mov di,menux + mov bx,menuy + mov cl,48 + mov ch,48 + mov ds,buffers + mov si,undertimedtext + call multiget + ret + + endp + + + + + + + + +Putundermenu proc near + + mov di,menux + mov bx,menuy + mov cl,48 + mov ch,48 + mov ds,buffers + mov si,undertimedtext + call multiput + ret + + endp + + + +Showoutermenu proc near + + mov al,40 + mov ah,0 + mov di,menux-34 + mov bx,menuy-40 + mov ds,tempgraphics + call showframe + mov al,41 + mov ah,0 + mov di,menux+64-34 + mov bx,menuy-40 + mov ds,tempgraphics + call showframe + mov al,42 + mov ah,0 + mov di,menux-26 + mov bx,menuy+57-40 + mov ds,tempgraphics + call showframe + mov al,43 + mov ah,0 + mov di,menux+64-26 + mov bx,menuy+57-40 + mov ds,tempgraphics + call showframe + ret + + endp + + + + + + + + +Showmenu proc near + + inc menucount + cmp menucount,37*2 + jnz menuframeok + mov menucount,0 +menuframeok: mov al,menucount + shr al,1 + mov ah,0 + mov di,menux + mov bx,menuy + mov ds,tempgraphics + call showframe + ret + + endp + + + +Loadmenu proc near + + mov dx,offset cs:spritename3 + call loadintotemp + mov dx,offset cs:mongraphics2 + call loadintotemp2 + ret + + endp + + + + + + + + + + + + + + + + +Viewfolder proc near + + mov manisoffscreen,1 + call getridofall + call loadfolder + mov folderpage,0 + call showfolder + call worktoscreenm + mov getback,0 + +folderloop: call delpointer + call readmouse + call showpointer + call vsync + call dumppointer + call dumptextline + mov bx,offset cs:folderlist + call checkcoords + cmp getback,0 + jz folderloop + + mov manisoffscreen,0 + call getridoftemp + call getridoftemp2 + call getridoftemp3 + call getridoftempcharset + call restoreall + call redrawmainscrn + call worktoscreenm + ret + +folderlist: dw 280,320,160,200,quitkey + dw 143,300,6,194,nextfolder + dw 0,143,6,194,lastfolder + dw 0,320,0,200,blank + dw 0ffffh + + endp + + + + +Nextfolder proc near + + cmp folderpage,12 + jnz cannextf + call blank + ret +cannextf: cmp commandtype,201 + jz alreadynextf + mov commandtype,201 + mov al,16 + call commandonly +alreadynextf: mov ax,mousebutton + cmp ax,oldbutton + jz notnextf + cmp ax,1 + jz donextf +notnextf: ret +donextf: inc folderpage + call folderhints + call delpointer + call showfolder + mov mousebutton,0 + mov bx,offset cs:folderlist + call checkcoords + call worktoscreenm + ret + + endp + + + + +Folderhints proc near + + cmp folderpage,5 + jnz notaideadd + cmp aidedead,1 + jz notaideadd + mov al,13 + call getlocation + cmp al,1 + jz notaideadd + mov al,13 + call setlocation + call showfolder + mov al,30 + call findtext1 + mov di,0 + mov bx,86 + mov dl,141 + mov ah,16 + call printdirect + call worktoscreenm + mov cx,200 + call hangonp + ret + +notaideadd: cmp folderpage,9 + jnz notaristoadd + mov al,7 + call getlocation + cmp al,1 + jz notaristoadd + mov al,7 + call setlocation + call showfolder + mov al,31 + call findtext1 + mov di,0 + mov bx,86 + mov dl,141 + mov ah,16 + call printdirect + call worktoscreenm + mov cx,200 + call hangonp +notaristoadd: ret + + endp + + + +Lastfolder proc near + + cmp folderpage,0 + jnz canlastf + call blank + ret +canlastf: cmp commandtype,202 + jz alreadylastf + mov commandtype,202 + mov al,17 + call commandonly +alreadylastf: cmp folderpage,0 + jz notlastf + mov ax,mousebutton + cmp ax,oldbutton + jz notlastf + cmp ax,1 + jz dolastf +notlastf: ret +dolastf: dec folderpage + call delpointer + call showfolder + mov mousebutton,0 + mov bx,offset cs:folderlist + call checkcoords + call worktoscreenm + ret + + endp + + + +Loadfolder proc near + + mov dx,offset cs:foldergraphic1 + call loadintotemp + mov dx,offset cs:foldergraphic2 + call loadintotemp2 + mov dx,offset cs:foldergraphic3 + call loadintotemp3 + mov dx,offset cs:characterset3 + call loadtempcharset + mov dx,offset cs:foldertext + call loadtemptext + ret + + endp + + + + +Showfolder proc near + + mov commandtype,255 + cmp folderpage,0 + jz closedfolder + call usetempcharset + call createpanel2 + mov ds,tempgraphics + mov di,0 + mov bx,0 + mov al,0 + mov ah,0 + call showframe + mov ds,tempgraphics + mov di,143 + mov bx,0 + mov al,1 + mov ah,0 + call showframe + mov ds,tempgraphics + mov di,0 + mov bx,92 + mov al,2 + mov ah,0 + call showframe + mov ds,tempgraphics + mov di,143 + mov bx,92 + mov al,3 + mov ah,0 + call showframe + call folderexit + + cmp folderpage,1 + jz noleftpage + call showleftpage +noleftpage: cmp folderpage,12 + jz norightpage + call showrightpage +norightpage: call usecharset1 + call undertextline + ret + +closedfolder: call createpanel2 + mov ds,tempgraphics3 + mov di,143-28 + mov bx,0 + mov al,0 + mov ah,0 + call showframe + mov ds,tempgraphics3 + mov di,143-28 + mov bx,92 + mov al,1 + mov ah,0 + call showframe + call folderexit + call undertextline + ret + + endp + + + + + + + + +Folderexit proc near + + mov ds,tempgraphics2 + mov di,296 + mov bx,178 + mov al,6 + mov ah,0 + call showframe + ret + + endp + + + + + +Showleftpage proc near + + mov ds,tempgraphics2 + mov di,0 + mov bx,12 + mov al,3 + mov ah,0 + call showframe + + mov bx,12+5 + mov cx,9 +leftpageloop: push cx bx + mov ds,tempgraphics2 + mov di,0 + mov al,4 + mov ah,0 + call showframe + pop bx cx + add bx,16 + loop leftpageloop + + mov ds,tempgraphics2 + mov di,0 + mov al,5 + mov ah,0 + call showframe + + mov linespacing,8 + mov charshift,91 + mov kerning,1 + mov bl,folderpage + dec bl + dec bl + add bl,bl + mov bh,0 + add bx,bx + mov es,textfile1 + mov si,[es:bx] + add si,66*2 + mov di,2 + mov bx,48 + mov dl,140 + mov cx,2 +twolotsleft: push cx +contleftpage: call printdirect + add bx,linespacing + cmp al,0 + jnz contleftpage + pop cx + loop twolotsleft + + mov kerning,0 + mov charshift,0 + mov linespacing,10 + + mov es,workspace + mov ds,workspace + mov di,(48*320)+2 + mov si,(48*320)+2+130 + mov cx,120 +flipfolder: push cx di si + mov cx,65 +flipfolderline: mov al,[es:di] + mov ah,[es:si] + mov [es:di],ah + mov [es:si],al + dec si + inc di + loop flipfolderline + pop si di cx + add si,320 + add di,320 + loop flipfolder + ret + + endp + + + +Showrightpage proc near + + mov ds,tempgraphics2 + mov di,143 + mov bx,12 + mov al,0 + mov ah,0 + call showframe + + mov bx,12+37 + mov cx,7 +rightpageloop: push cx bx + mov ds,tempgraphics2 + mov di,143 + mov al,1 + mov ah,0 + call showframe + pop bx cx + add bx,16 + loop rightpageloop + + mov ds,tempgraphics2 + mov di,143 + mov al,2 + mov ah,0 + call showframe + + mov linespacing,8 + mov kerning,1 + mov bl,folderpage + dec bl + add bl,bl + mov bh,0 + add bx,bx + mov es,textfile1 + mov si,[es:bx] + add si,66*2 + mov di,152 + mov bx,48 + mov dl,140 + mov cx,2 +twolotsright: push cx +contrightpage: call printdirect + add bx,linespacing + cmp al,0 + jnz contrightpage + pop cx + loop twolotsright + + mov kerning,0 + mov linespacing,10 + ret + + endp + + + + + + + + + +Entersymbol proc near + + mov manisoffscreen,1 + call getridofreels + mov dx,offset cs:symbolgraphic + call loadintotemp + mov symboltopx,24 + mov symboltopdir,0 + mov symbolbotx,24 + mov symbolbotdir,0 + call redrawmainscrn + call showsymbol + call undertextline + call worktoscreenm + mov getback,0 + +symbolloop: call delpointer + call updatesymboltop + call updatesymbolbot + call showsymbol + call readmouse + call showpointer + call vsync + call dumppointer + call dumptextline + call dumpsymbol + mov bx,offset cs:symbollist + call checkcoords + cmp getback,0 + jz symbolloop + + cmp symbolbotnum,3 + jnz symbolwrong + cmp symboltopnum,5 + jnz symbolwrong + mov al,43 + call removesetobject + mov al,46 + call placesetobject + mov ah,roomnum + add ah,12 + mov al,0 + call turnanypathon + mov manisoffscreen,0 + call redrawmainscrn + call getridoftemp + call restorereels + call worktoscreenm + mov al,13 + call playchannel1 + ret + +symbolwrong: mov al,46 + call removesetobject + mov al,43 + call placesetobject + mov ah,roomnum + add ah,12 + mov al,0 + call turnanypathoff + mov manisoffscreen,0 + call redrawmainscrn + call getridoftemp + call restorereels + call worktoscreenm + ret + +symbollist: dw symbolx+40,symbolx+64,symboly+2,symboly+16,quitsymbol + dw symbolx,symbolx+52,symboly+20,symboly+50,settopleft + dw symbolx+52,symbolx+104,symboly+20,symboly+50,settopright + dw symbolx,symbolx+52,symboly+50,symboly+80,setbotleft + dw symbolx+52,symbolx+104,symboly+50,symboly+80,setbotright + dw 0,320,0,200,blank + dw 0ffffh + + endp + + + + + + + + + + + + + + + + +Quitsymbol proc near + + cmp symboltopx,24 + jnz blank + cmp symbolbotx,24 + jnz blank + cmp commandtype,222 + jz alreadyqs + mov commandtype,222 + mov al,18 + call commandonly +alreadyqs: mov ax,mousebutton + cmp ax,oldbutton + jz notqs + and ax,1 + jnz doqs +notqs: ret + +doqs: mov getback,1 + ret + + endp + + + + +Settopleft proc near + + cmp symboltopdir,0 + jnz blank + cmp commandtype,210 + jz alreadytopl + mov commandtype,210 + mov al,19 + call commandonly +alreadytopl: cmp mousebutton,0 + jz notopleft + mov symboltopdir,-1 +notopleft: ret + + endp + + + +Settopright proc near + + cmp symboltopdir,0 + jnz blank + cmp commandtype,211 + jz alreadytopr + mov commandtype,211 + mov al,20 + call commandonly +alreadytopr: cmp mousebutton,0 + jz notopright + mov symboltopdir,1 +notopright: ret + + endp + + + + +Setbotleft proc near + + cmp symbolbotdir,0 + jnz blank + cmp commandtype,212 + jz alreadybotl + mov commandtype,212 + mov al,21 + call commandonly +alreadybotl: cmp mousebutton,0 + jz nobotleft + mov symbolbotdir,-1 +nobotleft: ret + + endp + + + +Setbotright proc near + + cmp symbolbotdir,0 + jnz blank + cmp commandtype,213 + jz alreadybotr + mov commandtype,213 + mov al,22 + call commandonly +alreadybotr: cmp mousebutton,0 + jz nobotright + mov symbolbotdir,1 +nobotright: ret + + endp + + + + + + + +Dumpsymbol proc near + + mov newtextline,0 + mov di,symbolx + mov bx,symboly+20 + mov cl,104 + mov ch,60 + call multidump + ret + + endp + + + + +Showsymbol proc near + + mov al,12 + mov ah,0 + mov di,symbolx + mov bx,symboly + mov ds,tempgraphics + call showframe + + mov al,symboltopx + mov ah,0 + mov di,ax + add di,symbolx-44 + mov al,symboltopnum + mov bx,symboly+20 + mov ds,tempgraphics + mov ah,32 + push ax di bx ds + call showframe + pop ds bx di ax + call nextsymbol + add di,49 + push ax di bx ds + call showframe + pop ds bx di ax + call nextsymbol + add di,49 + call showframe + + mov al,symbolbotx + mov ah,0 + mov di,ax + add di,symbolx-44 + mov al,symbolbotnum + add al,6 + mov bx,symboly+49 + mov ds,tempgraphics + mov ah,32 + push ax di bx ds + call showframe + pop ds bx di ax + call nextsymbol + add di,49 + push ax di bx ds + call showframe + pop ds bx di ax + call nextsymbol + add di,49 + call showframe + ret + + endp + + + + + + +Nextsymbol proc near + + inc al + cmp al,6 + jz topwrap + cmp al,12 + jz botwrap + ret +topwrap: mov al,0 + ret +botwrap: mov al,6 + ret + + endp + + + +Updatesymboltop proc near + + cmp symboltopdir,0 + jz topfinished + cmp symboltopdir,-1 + jz backwards + + inc symboltopx + cmp symboltopx,49 + jnz notwrapfor + mov symboltopx,0 + dec symboltopnum + cmp symboltopnum,-1 + jnz topfinished + mov symboltopnum,5 + ret +notwrapfor: cmp symboltopx,24 + jnz topfinished + mov symboltopdir,0 + ret + +backwards: dec symboltopx + cmp symboltopx,-1 + jnz notwrapback + mov symboltopx,48 + inc symboltopnum + cmp symboltopnum,6 + jnz topfinished + mov symboltopnum,0 + ret +notwrapback: cmp symboltopx,24 + jnz topfinished + mov symboltopdir,0 +topfinished: ret + + endp + + + +Updatesymbolbot proc near + + cmp symbolbotdir,0 + jz botfinished + cmp symbolbotdir,-1 + jz backwardsbot + + inc symbolbotx + cmp symbolbotx,49 + jnz notwrapforb + mov symbolbotx,0 + dec symbolbotnum + cmp symbolbotnum,-1 + jnz botfinished + mov symbolbotnum,5 + ret +notwrapforb: cmp symbolbotx,24 + jnz botfinished + mov symbolbotdir,0 + ret + +backwardsbot: dec symbolbotx + cmp symbolbotx,-1 + jnz notwrapbackb + mov symbolbotx,48 + inc symbolbotnum + cmp symbolbotnum,6 + jnz botfinished + mov symbolbotnum,0 + ret +notwrapbackb: cmp symbolbotx,24 + jnz botfinished + mov symbolbotdir,0 +botfinished: ret + + endp + + + + + + + + + + +Dumpsymbox proc near + + cmp dumpx,-1 + jz nodumpsym + mov di,dumpx + mov bx,dumpy + mov cl,30 + mov ch,77;30 + call multidump + mov dumpx,-1 +nodumpsym: ret + + endp + + + + + + + +Usediary proc near + + call getridofreels + mov dx,offset cs:diarygraphic + call loadintotemp + mov dx,offset cs:diarytext + call loadtemptext + + mov dx,offset cs:characterset3 + call loadtempcharset + call createpanel + call showicon + call showdiary + call undertextline + call showdiarypage + call readmouse + call showpointer + call worktoscreen + call delpointer + mov getback,0 + +diaryloop: call delpointer + call readmouse + call showdiarykeys + call showpointer + call vsync + call dumppointer + call dumpdiarykeys + call dumptextline + mov bx,offset cs:diarylist + call checkcoords + cmp getback,0 + jz diaryloop + + call getridoftemp + call getridoftemptext + call getridoftempcharset + call restorereels + mov manisoffscreen,0 + call redrawmainscrn + call worktoscreenm + ret + +diarylist: dw diaryx+94,diaryx+110,diaryy+97,diaryy+113,diarykeyn + dw diaryx+151,diaryx+167,diaryy+71,diaryy+87,diarykeyp + dw diaryx+176,diaryx+192,diaryy+108,diaryy+124,quitkey + dw 0,320,0,200,blank + dw 0ffffh + + ret + + endp + + + + + + + +Showdiary proc near + + mov al,1 + mov ah,0 + mov di,diaryx + mov bx,diaryy+37 + mov ds,tempgraphics + call showframe + mov al,2 + mov ah,0 + mov di,diaryx+176 + mov bx,diaryy+108 + mov ds,tempgraphics + call showframe + ret + + endp + + + + +Showdiarykeys proc near + + cmp presscount,0 + jz nokeyatall + dec presscount + cmp presscount,0 + jz nokeyatall + cmp pressed,"N" + jnz nokeyn + mov al,3 + cmp presscount,1 + jz gotkeyn + mov al,4 +gotkeyn: mov ah,0 + mov di,diaryx+94 + mov bx,diaryy+97 + mov ds,tempgraphics + call showframe + cmp presscount,1 + jnz notshown + call showdiarypage +notshown: ret + +nokeyn: mov al,5 + cmp presscount,1 + jz gotkeyp + mov al,6 +gotkeyp: mov ah,0 + mov di,diaryx+151 + mov bx,diaryy+71 + mov ds,tempgraphics + call showframe + cmp presscount,1 + jnz notshowp + call showdiarypage +notshowp: ret + +nokeyatall: ret + + endp + + + + + + +Dumpdiarykeys proc near + + cmp presscount,1 + jnz notdumpdiary + cmp sartaindead,1 + jz notsartadd + cmp diarypage,5 + jnz notsartadd + cmp diarypage,5 + jnz notsartadd + mov al,6 + call getlocation + cmp al,1 + jz notsartadd + mov al,6 + call setlocation + + call delpointer + mov al,12 + call findtext1 + mov di,70 ;diaryx+48 + mov bx,106 ;diaryy+16 + mov dl,241 + mov ah,16 + call printdirect + + call worktoscreenm + mov cx,200 + call hangonp + call createpanel + call showicon + call showdiary + call showdiarypage + call worktoscreenm + call showpointer + ret + +notsartadd: mov di,diaryx+48 + mov bx,diaryy+15 + mov cl,200 + mov ch,16 + call multidump +notdumpdiary: mov di,diaryx+94 + mov bx,diaryy+97 + mov cl,16 + mov ch,16 + call multidump + mov di,diaryx+151 + mov bx,diaryy+71 + mov cl,16 + mov ch,16 + call multidump + ret + + endp + + + +Diarykeyp proc near + + cmp commandtype,214 + jz alreadykeyp + mov commandtype,214 + mov al,23 + call commandonly +alreadykeyp: cmp mousebutton,0 + jz notkeyp + mov ax,oldbutton + cmp ax,mousebutton + jz notkeyp + cmp presscount,0 + jnz notkeyp + mov al,16 + call playchannel1 + mov presscount,12 + mov pressed,"P" + dec diarypage + cmp diarypage,-1 + jnz notkeyp + mov diarypage,11 +notkeyp: ret + + endp + + + +Diarykeyn proc near + + cmp commandtype,213 + jz alreadykeyn + mov commandtype,213 + mov al,23 + call commandonly +alreadykeyn: cmp mousebutton,0 + jz notkeyn + mov ax,oldbutton + cmp ax,mousebutton + jz notkeyn + cmp presscount,0 + jnz notkeyn + mov al,16 + call playchannel1 + mov presscount,12 + mov pressed,"N" + inc diarypage + cmp diarypage,12 + jnz notkeyn + mov diarypage,0 +notkeyn: ret + + endp + + + + + + +Showdiarypage proc near + + mov al,0 + mov ah,0 + mov di,diaryx + mov bx,diaryy + mov ds,tempgraphics + call showframe + + mov al,diarypage + call findtext1 + + mov kerning,1 + call usetempcharset + mov di,diaryx+48 + mov bx,diaryy+16 + mov dl,240 + mov ah,16 + mov charshift,91+91 + call printdirect + + mov di,diaryx+129 + mov bx,diaryy+16 + mov dl,240 + mov ah,16 + call printdirect + + mov di,diaryx+48 + mov bx,diaryy+23 + mov dl,240 + mov ah,16 + call printdirect + + mov kerning,0 + mov charshift,0 + call usecharset1 + ret + + endp + + + + + +Findtext1 proc near + + mov ah,0 + mov si,ax + add si,si + mov es,textfile1 + mov ax,[es:si] + add ax,textstart + mov si,ax + ret + + endp + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/look.asm b/devtools/tasmrecover/dreamweb/look.asm new file mode 100644 index 0000000000..b5bc913a73 --- /dev/null +++ b/devtools/tasmrecover/dreamweb/look.asm @@ -0,0 +1,167 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +;---------------------------------------------------------------Look-routine---- + +Autolook proc near + + mov ax,mousex + cmp ax,oldx + jnz diffmouse + mov ax,mousey + cmp ax,oldy + jnz diffmouse + + dec lookcounter + cmp lookcounter,0 + jnz noautolook + cmp watchingtime,0 + jnz noautolook + call dolook +noautolook: ret + +diffmouse: mov lookcounter,1000 + ret + + endp + + + + +Look proc near + + cmp watchingtime,0 + jnz blank + cmp pointermode,2 + jz blank + + cmp commandtype,241 + jz alreadylook + mov commandtype,241 + mov al,25 + call commandonly +alreadylook: cmp mousebutton,1 + jnz nolook + mov ax,mousebutton + cmp ax,oldbutton + jz nolook + call dolook +nolook: ret + + endp + + + + + +Dolook proc near + + call createpanel + call showicon + call undertextline + call worktoscreenm + + mov commandtype,255 + call dumptextline + + mov bl,roomnum + and bl,31 + mov bh,0 + add bx,bx + + mov es,roomdesc + add bx,intextdat + + mov si,[es:bx] + add si,intext + + call findnextcolon + + mov di,66 + cmp reallocation,50 + jc notdream3 + mov di,40 +notdream3: mov bx,80 + mov dl,241 + call printslow + + cmp al,1 + jz afterlook + mov cx,400 + call hangonp + +afterlook: mov pointermode,0 + mov commandtype,0 + call redrawmainscrn + call worktoscreenm + ret + + endp + + + + + + +Redrawmainscrn proc near + + mov timecount,0 + call createpanel + mov newobs,0 + call drawfloor + call printsprites + call reelsonscreen + call showicon + call getunderzoom + call undertextline + call readmouse + mov commandtype,255 + ret + + endp + + + + + + + + + + + + + + + +Getback1 proc near + + cmp pickup,0 + jz notgotobject + call blank + ret + +notgotobject: cmp commandtype,202 + jz alreadyget + mov commandtype,202 + mov al,26 + call commandonly +alreadyget: mov ax,mousebutton + cmp ax,oldbutton + jz nogetback + and ax,1 + jnz dogetback +nogetback: ret + +dogetback: mov getback,1 + mov pickup,0 + ret + + endp + + + + + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/monitor.asm b/devtools/tasmrecover/dreamweb/monitor.asm new file mode 100644 index 0000000000..7cc1a5a4dd --- /dev/null +++ b/devtools/tasmrecover/dreamweb/monitor.asm @@ -0,0 +1,1496 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +Usemon proc near + + mov lasttrigger,0 + + push cs ;start off with no file name + pop es + mov di,offset cs:currentfile+1 + mov cx,12 + mov al,32 + rep stosb + push cs ;start off with no file name + pop es + mov di,offset cs:operand1+1 + mov cx,12 + mov al,32 + rep stosb + + push cs ;clear all keys + pop es + mov di,offset cs:keys + mov byte ptr [es:di],1 + add di,26 + mov cx,3 +keyloop: mov byte ptr [es:di],0 + add di,26 + loop keyloop + + call createpanel + call showpanel + call showicon + call drawfloor + call getridofall ;reels + + mov dx,offset cs:mongraphicname + call loadintotemp + call loadpersonal + call loadnews + call loadcart + mov dx,offset cs:characterset2 + call loadtempcharset + + call printoutermon + call initialmoncols + call printlogo + call worktoscreen + call turnonpower + call fadeupyellows + call fadeupmonfirst + + mov monadx,76 + mov monady,141 + mov al,1 + call monmessage + mov cx,120 + call hangoncurs + mov al,2 + call monmessage + mov cx,60 + call randomaccess + mov al,3 + call monmessage + mov cx,100 + call hangoncurs + call printlogo + call scrollmonitor + mov bufferin,0 + mov bufferout,0 + +moreinput: mov di,monadx + mov bx,monady + push di bx + call input + pop bx di + mov monadx,di + mov monady,bx + call execcommand + cmp al,0 + jz moreinput + +endmon: call getridoftemp + call getridoftempcharset + mov es,textfile1 + call deallocatemem + mov es,textfile2 + call deallocatemem + mov es,textfile3 + call deallocatemem + mov getback,1 + mov al,26 + call playchannel1 + mov manisoffscreen,0 + call restoreall ;reels + call redrawmainscrn + call worktoscreenm + ret + + endp + + + + + + +Printoutermon proc near + + mov di,40 + mov bx,32 + mov ds,tempgraphics + mov al,1 + mov ah,0 + call showframe + mov di,264 + mov bx,32 + mov ds,tempgraphics + mov al,2 + mov ah,0 + call showframe + mov di,40 + mov bx,12 + mov ds,tempgraphics + mov al,3 + mov ah,0 + call showframe + mov di,40 + mov bx,164 + mov ds,tempgraphics + mov al,4 + mov ah,0 + call showframe + ret + + endp + + + + + + + +Loadpersonal proc near + + mov al,location + mov dx,offset cs:monitorfile1 + cmp al,0 + jz foundpersonal + cmp al,42 + jz foundpersonal + mov dx,offset cs:monitorfile2 + cmp al,2 + jz foundpersonal + +foundpersonal: call openfile + call readheader + mov bx,[es:di] + push bx + mov cl,4 + shr bx,cl + call allocatemem + mov textfile1,ax + mov ds,ax + pop cx + mov dx,0 + call readfromfile + call closefile + ret + + endp + + + + +Loadnews proc near ;textfile2 holds information + ;accessable by anyone + mov al,newsitem + mov dx,offset cs:monitorfile10 + cmp al,0 + jz foundnews + mov dx,offset cs:monitorfile11 + cmp al,1 + jz foundnews + mov dx,offset cs:monitorfile12 + cmp al,2 + jz foundnews + mov dx,offset cs:monitorfile13 +foundnews: call openfile + call readheader + mov bx,[es:di] + push bx + mov cl,4 + shr bx,cl + call allocatemem + mov textfile2,ax + mov ds,ax + pop cx + mov dx,0 + call readfromfile + call closefile + ret + + endp + + + + + + +Loadcart proc near + + call lookininterface + + mov dx,offset cs:monitorfile20 + cmp al,0 + jz gotcart + mov dx,offset cs:monitorfile21 + cmp al,1 + jz gotcart + mov dx,offset cs:monitorfile22 + cmp al,2 + jz gotcart + mov dx,offset cs:monitorfile23 + cmp al,3 + jz gotcart + mov dx,offset cs:monitorfile24 +gotcart: call openfile + call readheader + mov bx,[es:di] + push bx + mov cl,4 + shr bx,cl + call allocatemem + mov textfile3,ax + mov ds,ax + pop cx + mov dx,0 + call readfromfile + call closefile + ret + + endp + + + + + + +Lookininterface proc near + + mov al,"I" + mov ah,"N" + mov cl,"T" + mov ch,"F" + call findsetobject ;this bit searches set obs + ;until the interface is found + ;al holds object number + mov ah,1 ;ah holds type, 1=set object + call checkinside ;this searches for any extra + ;object inside the interface.. + cmp cl,numexobjects + jz emptyinterface + mov al,[es:bx+15] ;get the last letter of ID code + inc al + ret +emptyinterface: mov al,0 + ret + + endp + + + + + + + +Turnonpower proc near + + mov cx,3 +powerloop: push cx + call powerlighton + mov cx,30 + call hangon + call powerlightoff + mov cx,30 + call hangon + pop cx + loop powerloop + call powerlighton + ret + + endp + + + + + +Randomaccess proc near + +accessloop: push cx + call vsync + call vsync + call randomnum1 + and al,15 + cmp al,10 + jc off + call accesslighton + jmp chosenaccess +off: call accesslightoff +chosenaccess: pop cx + loop accessloop + call accesslightoff + ret + + endp + + + +Powerlighton proc near + + mov di,257+4 + mov bx,182 + mov ds,tempgraphics + mov al,6 + mov ah,0 + push di bx + call showframe + pop bx di + mov cl,12 + mov ch,8 + call multidump + ret + + endp + + + + +Powerlightoff proc near + + mov di,257+4 + mov bx,182 + mov ds,tempgraphics + mov al,5 + mov ah,0 + push di bx + call showframe + pop bx di + mov cl,12 + mov ch,8 + call multidump + ret + + endp + + + + +Accesslighton proc near + + mov di,74 + mov bx,182 + mov ds,tempgraphics + mov al,8 + mov ah,0 + push di bx + call showframe + pop bx di + mov cl,12 + mov ch,8 + call multidump + ret + + endp + + + + +Accesslightoff proc near + + mov di,74 + mov bx,182 + mov ds,tempgraphics + mov al,7 + mov ah,0 + push di bx + call showframe + pop bx di + mov cl,12 + mov ch,8 + call multidump + ret + + endp + + + + + +Locklighton proc near + + mov di,56 + mov bx,182 + mov ds,tempgraphics + mov al,10 + mov ah,0 + push di bx + call showframe + pop bx di + mov cl,12 + mov ch,8 + call multidump + ret + + endp + + + + +Locklightoff proc near + + mov di,56 + mov bx,182 + mov ds,tempgraphics + mov al,9 + mov ah,0 + push di bx + call showframe + pop bx di + mov cl,12 + mov ch,8 + call multidump + ret + + endp + + + + + + + + + + +Input proc near + + push cs + pop es + mov di,offset cs:inputline + mov cx,64 + mov al,0 + rep stosb + + mov curpos,0 + mov al,">" + mov di,monadx + mov bx,monady + mov ds,tempcharset + mov ah,0 + call printchar + mov di,monadx + mov bx,monady + mov cl,6 + mov ch,8 + call multidump + add monadx,6 + mov ax,monadx + mov curslocx,ax + mov ax,monady + mov curslocy,ax + +waitkey: call printcurs + call vsync + call delcurs + call readkey + mov al,currentkey + cmp al,0 + jz waitkey + cmp al,13 + jz endofinput + cmp al,8 + jnz notdel + cmp curpos,0 + jz waitkey + call delchar + jmp waitkey +notdel: cmp curpos,28 + jz waitkey + cmp currentkey,32 + jnz notleadingspace + cmp curpos,0 + jz waitkey +notleadingspace: call makecaps + push cs + pop es + mov si,curpos + add si,si + add si,offset cs:inputline + mov [es:si],al + + cmp al,"Z"+1 + jnc waitkey + + push ax es si + mov di,monadx + mov bx,monady + mov ds,mapstore + mov ax,curpos + xchg al,ah + mov si,ax + mov cl,8 + mov ch,8 + call multiget + pop si es ax + + push es si + mov di,monadx + mov bx,monady + mov ds,tempcharset + mov ah,0 + call printchar + pop si es + ;dec cx + mov [es:si+1],cl + mov ch,0 + add monadx,cx + inc curpos + add curslocx,cx + jmp waitkey + +endofinput: ret + + endp + + + + + + + + +Makecaps proc near + + cmp al,"a" + jc notupperc + sub al,32 +notupperc: ret + + endp + + + + + + + + + +Delchar proc near + + dec curpos + mov si,curpos + add si,si + push cs + pop es + add si,offset cs:inputline + mov byte ptr [es:si],0 + mov al,[es:si+1] + mov ah,0 + sub monadx,ax + sub curslocx,ax + mov di,monadx + mov bx,monady + mov ds,mapstore + mov ax,curpos + xchg al,ah + mov si,ax + mov cl,8 + mov ch,8 + call multiput + mov di,monadx + mov bx,monady + mov cl,al + mov ch,8 + call multidump + ret + + endp + + + + + + + +Execcommand proc near + + push cs + pop es + mov bx,offset cs:comlist + push cs + pop ds + mov si,offset cs:inputline + mov al,[si] + cmp al,0 + jnz notblankinp + call scrollmonitor + ret + +notblankinp: mov cl,0 +comloop: push bx si +comloop2: mov al,[si] + add si,2 + mov ah,[es:bx] + inc bx + cmp ah,32 + jz foundcom + cmp al,ah + jz comloop2 + pop si bx + add bx,10 + inc cl + cmp cl,6 + jnz comloop + call neterror + mov al,0 + ret +foundcom: pop si bx + cmp cl,1 + jz testcom + cmp cl,2 + jz directory + cmp cl,3 + jz accesscom + cmp cl,4 + jz signoncom + cmp cl,5 + jz keyscom + jmp quitcom + +directory: call dircom + mov al,0 + ret + +signoncom: call signon + mov al,0 + ret + +accesscom: call read + mov al,0 + ret + +keyscom: call showkeys + mov al,0 + ret + +testcom: mov al,6 + call monmessage + mov al,0 + ret + +quitcom: mov al,1 + ret + +comlist: db "EXIT " + db "HELP " + db "LIST " + db "READ " + db "LOGON " + db "KEYS " + +keys: db 1,0,"PUBLIC PUBLIC ",0 + db 0,0,"BLACKDRAGON RYAN ",0 + db 0,0,"HENDRIX LOUIS ",0 + db 0,0,"SEPTIMUS BECKETT ",0 + db 255,255 + +operand1: db " ",0 +rootdir: db 34,"ROOT ",0 +currentfile db 34," ",0 + + endp + + + + + + + +Neterror proc near + + mov al,5 + call monmessage + call scrollmonitor + ret + + endp + + + + + + + + + +Dircom proc near + + mov cx,30 + call randomaccess + call parser + cmp byte ptr [es:di+1],0 + jz dirroot + call dirfile + ret + +dirroot: mov logonum,0 + push cs + pop ds + mov si,offset cs:rootdir + inc si + push cs + pop es + mov di,offset cs:currentfile + inc di + mov cx,12 + rep movsb + call monitorlogo + call scrollmonitor + + mov al,9 + call monmessage + + mov es,textfile1 + call searchforfiles + mov es,textfile2 + call searchforfiles + mov es,textfile3 + call searchforfiles + + call scrollmonitor + ret + + endp + + + + + + +Searchforfiles proc near + + mov bx,textstart +directloop1: mov al,[es:bx] + inc bx + cmp al,"*" + jz endofdir + cmp al,34 + jnz directloop1 + call monprint + jmp directloop1 +endofdir: ret + + endp + + + + + + + + + + + + +Signon proc near + + call parser + inc di + push cs + pop ds + mov si,offset cs:keys + mov cx,4 +signonloop: push cx si di + add si,14 + mov cx,11 +signonloop2: lodsb + cmp al,32 + jz foundsign + call makecaps + mov ah,[es:di] + inc di + cmp al,ah + jnz nomatch + loop signonloop2 +nomatch: pop di si cx + add si,26 + loop signonloop + mov al,13 + call monmessage + ret + +foundsign: pop di si cx ;ds:si contains ad of key matched + mov bx,si + push ds + pop es ;now ds:si is in es:bx + + cmp byte ptr [es:bx],0 + jz notyetassigned + + mov al,17 + call monmessage + ret + +notyetassigned: push es bx + call scrollmonitor + mov al,15 + call monmessage + mov di,monadx + mov bx,monady + push di bx + call input + pop bx di + mov monadx,di + mov monady,bx + pop bx es + push es bx + + add bx,2 + push cs + pop ds + mov si,offset cs:inputline +checkpass: lodsw + mov ah,[es:bx] + inc bx + ;cmp al,0 + cmp ah,32 + jz passpassed + cmp al,ah + jz checkpass +passerror: pop bx es + call scrollmonitor + mov al,16 + call monmessage + ret + +passpassed: mov al,14 + call monmessage + pop bx es + push es bx + add bx,14 + call monprint + call scrollmonitor + pop bx es + mov byte ptr [es:bx],1 + ret + + endp + + + + + + + +Showkeys proc near + + mov cx,10 + call randomaccess + call scrollmonitor + mov al,18 + call monmessage + + push cs + pop es + mov bx,offset cs:keys + mov cx,4 +keysloop: push cx bx + cmp byte ptr [es:bx],0 + jz notheld + add bx,14 + call monprint +notheld: pop bx cx + add bx,26 + loop keysloop + call scrollmonitor + ret + + endp + + + + + + + + + + + +Read proc near + + mov cx,40 + call randomaccess + call parser + cmp byte ptr [es:di+1],0 + jnz okcom + call neterror + ret +okcom: push cs + pop es + mov di,offset cs:currentfile + mov ax,textfile1 + mov monsource,ax + mov ds,ax + mov si,textstart + call searchforstring + cmp al,0 + jz foundfile2 + mov ax,textfile2 + mov monsource,ax + mov ds,ax + mov si,textstart + call searchforstring + cmp al,0 + jz foundfile2 + mov ax,textfile3 + mov monsource,ax + mov ds,ax + mov si,textstart + call searchforstring + cmp al,0 + jz foundfile2 + mov al,7 + call monmessage + ret +foundfile2: call getkeyandlogo + cmp al,0 + jz keyok1 + ret +keyok1: push cs + pop es + mov di,offset cs:operand1 + mov ds,monsource + call searchforstring + cmp al,0 + jz findtopictext + mov al,oldlogonum + mov logonum,al + mov al,11 + call monmessage + ret + +findtopictext: inc bx + push es bx + call monitorlogo + call scrollmonitor + pop bx es +moretopic: call monprint + mov al,[es:bx] + cmp al,34 + jz endoftopic + cmp al,"=" + jz endoftopic + cmp al,"*" + jz endoftopic + push es bx + call processtrigger + mov cx,24 + call randomaccess + pop bx es + jmp moretopic + +endoftopic: call scrollmonitor + ret + + endp + + + + + + + + + +Dirfile proc near + + mov al,34 + mov [es:di],al + push es di ;save start point held in es:di + mov ds,textfile1 + mov si,textstart + call searchforstring + cmp al,0 + jz foundfile + pop di es + push es di + mov ds,textfile2 + mov si,textstart + call searchforstring + cmp al,0 + jz foundfile + pop di es + push es di + mov ds,textfile3 + mov si,textstart + call searchforstring + cmp al,0 + jz foundfile + + pop di es + mov al,7 + call monmessage + ret + +foundfile: pop ax ax ;discard old values of es:di + call getkeyandlogo + cmp al,0 + jz keyok2 + ret + +keyok2: push es bx + push cs + pop ds + mov si,offset cs:operand1+1 + push cs + pop es + mov di,offset cs:currentfile+1 + mov cx,12 + rep movsb + call monitorlogo + call scrollmonitor + mov al,10 + call monmessage + pop bx es + + +directloop2: mov al,[es:bx] + inc bx + cmp al,34 + jz endofdir2 + cmp al,"*" + jz endofdir2 + cmp al,"=" + jnz directloop2 + call monprint + jmp directloop2 + +endofdir2: call scrollmonitor + ret + + endp + + + + + + +Getkeyandlogo proc near + + inc bx + mov al,[es:bx] + sub al,48 + mov newlogonum,al + add bx,2 + mov al,[es:bx] + sub al,48 + mov keynum,al + inc bx + push es bx + mov al,keynum + mov ah,0 + mov cx,26 + mul cx + push cs + pop es + mov bx,offset cs:keys + add bx,ax + mov al,[es:bx] + cmp al,1 + jz keyok + push bx es + mov al,12 + call monmessage + pop es bx + add bx,14 + call monprint + call scrollmonitor + pop bx es + mov al,1 + ret + +keyok: pop bx es + mov al,newlogonum + mov logonum,al + mov al,0 + ret + + endp + + + + + + + + + +Searchforstring proc near ;finds string at es:di in + ;text at ds:si + + mov dl,[es:di] ;needs to know first character + ;if it's an equals then we must + ;stop at the next quotation mark + mov cx,di ;need to remember starting point + +restartlook: mov di,cx + mov bx,si + + mov dh,0 ;dh holds count of brackets + ;brackets are either " or = +keeplooking: lodsb + call makecaps + cmp al,"*" + jz notfound + cmp dl,"=" + jnz nofindingtopic ;are we looking for a topic? + cmp al,34 ;if YES, check we haven't reached + jz notfound ;the end of this file. +nofindingtopic: mov ah,[es:di] + cmp al,dl ;all searches bracketed by same thing + jnz notbracket + inc dh + cmp dh,2 + jz complete +notbracket: cmp al,ah + jnz restartlook + inc di + jmp keeplooking +complete: push ds ;es:bx returns found string + pop es + mov al,0 + mov bx,si + ret +notfound: mov al,1 + ret + + endp + + + + + + +Parser proc near + + push cs + pop es + mov di,offset cs:operand1 + mov cx,13 + mov al,0 + rep stosb + + mov di,offset cs:operand1 + mov al,"=" + stosb + + push cs + pop ds + mov si,offset cs:inputline + +notspace1: lodsw + cmp al,32 + jz stillspace1 + cmp al,0 + jnz notspace1 + jmp finishpars + +stillspace1: lodsw + cmp al,32 + jz stillspace1 + +copyin1: stosb + lodsw + cmp al,0 + jz finishpars + cmp al,32 + jnz copyin1 + +finishpars: mov di,offset cs:operand1 + ret + + endp + + + + + + +Scrollmonitor proc near + + push ax bx cx dx di si es ds + + call printlogo + mov di,monadx + mov bx,monady + call printundermon + mov ax,monady + call worktoscreen + mov al,25 + call playchannel1 + + pop ds es si di dx cx bx ax + ret + + endp + + + + + + + + + + + + + + +Lockmon proc near + + cmp lasthardkey,57 + jnz notlock + call locklighton +lockloop: cmp lasthardkey,57 + jz lockloop + call locklightoff +notlock: ret + + endp + + + + + +Monitorlogo proc near + + mov al,logonum + cmp al,oldlogonum + jz notnewlogo + mov oldlogonum,al + ;call fadedownmon + call printlogo + call printundermon + call worktoscreen + call printlogo + ;call fadeupmon + call printlogo + mov al,26 + call playchannel1 + mov cx,20 + call randomaccess + ret +notnewlogo: call printlogo + ret + + endp + + + + + + + + +Printlogo proc near + + mov di,56 + mov bx,32 + mov ds,tempgraphics + mov al,0 + mov ah,0 + call showframe + call showcurrentfile + ret + + endp + + + + + + +Showcurrentfile proc near + + mov di,178 ;99 + mov bx,37 + mov si,offset cs:currentfile+1 +curfileloop: mov al,[cs:si] + cmp al,0 + jz finishfile + inc si + push si + if foreign + call modifychar + endif + mov ds,tempcharset + mov ah,0 + call printchar + pop si + jmp curfileloop +finishfile: ret + + endp + + + + + + + + + +Monmessage proc near + + mov es,textfile1 + mov bx,textstart + mov cl,al + mov ch,0 +monmessageloop: mov al,[es:bx] + inc bx + cmp al,"+" + jnz monmessageloop + loop monmessageloop + call monprint + ret + + endp + + + + + + +Processtrigger proc near + + cmp lasttrigger,"1" + jnz notfirsttrigger + mov al,8 + call setlocation + mov al,45 + call triggermessage + ret + +notfirsttrigger: cmp lasttrigger,"2" + jnz notsecondtrigger + mov al,9 + call setlocation + mov al,55 + call triggermessage + ret + +notsecondtrigger: cmp lasttrigger,"3" + jnz notthirdtrigger + mov al,2 + call setlocation + mov al,59 + call triggermessage + +notthirdtrigger: ret + + endp + + + + +Triggermessage proc near + + push ax + mov di,174 + mov bx,153 + mov cl,200 + mov ch,63 + mov ds,mapstore + mov si,0 + call multiget + pop ax + call findpuztext + mov di,174 + mov bx,156 + mov dl,141 + mov ah,16 + call printdirect + mov cx,140 + call hangon + call worktoscreen + mov cx,340 + call hangon + mov di,174 + mov bx,153 + mov cl,200 + mov ch,63 + mov ds,mapstore + mov si,0 + call multiput + call worktoscreen + mov lasttrigger,0 + ret + + endp + + + + + + +Printcurs proc near + + push si di ds dx bx es + mov di,curslocx + mov bx,curslocy + mov cl,6 + mov ch,8 + if foreign + sub bx,3 + mov ch,11 + endif + mov ds,buffers + mov si,textunder + push di bx + call multiget + pop bx di + + push bx di + inc maintimer + mov ax,maintimer + and al,16 + jnz flashcurs + mov al,"/" + sub al,32 + mov ah,0 + mov ds,tempcharset + call showframe + +flashcurs: pop di bx + sub di,6 + mov cl,12 + if foreign + mov ch,11 + else + mov ch,8 + endif + call multidump + + pop es bx dx ds di si + ret + + endp + + + + + + +Delcurs proc near + + push es bx di ds dx si + mov di,curslocx + mov bx,curslocy + mov cl,6 + mov ch,8 + if foreign + sub bx,3 + mov ch,11 + endif + push di bx cx + mov ds,buffers + mov si,textunder + call multiput + pop cx bx di + call multidump +finishcurdel: + pop si dx ds di bx es + ret + + endp + + + + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/newplace.asm b/devtools/tasmrecover/dreamweb/newplace.asm new file mode 100644 index 0000000000..cac6e100a7 --- /dev/null +++ b/devtools/tasmrecover/dreamweb/newplace.asm @@ -0,0 +1,581 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +;----------------------------------------------------Choosing a new location---- + +Newplace proc near + + cmp needtotravel,1 + jz istravel + cmp autolocation,-1 + jnz isautoloc + ret + +isautoloc: mov al,autolocation + mov newlocation,al + mov autolocation,-1 + ret + +istravel: mov needtotravel,0 + call selectlocation + ret + + endp + + + + +Selectlocation proc near + + mov inmaparea,0 + call clearbeforeload + mov getback,0 + mov pointerframe,22 + + call readcitypic + call showcity + call getridoftemp + call readdesticon + call loadtraveltext + call showpanel + call showman + call showarrows + call showexit + call locationpic + call undertextline + mov commandtype,255 + call readmouse + mov pointerframe,0 + call showpointer + call worktoscreen + mov al,9 + mov ah,255 + call playchannel0 + mov newlocation,255 + +select: call delpointer + call readmouse + call showpointer + call vsync + call dumppointer + call dumptextline + cmp getback,1 + jz quittravel + mov bx,offset cs:destlist + call checkcoords + cmp newlocation,255 + jz select + mov al,newlocation + cmp al,location + jz quittravel + + call getridoftemp + call getridoftemp2 + call getridoftemp3 + mov es,traveltext + call deallocatemem + ret + +quittravel: mov al,reallocation ; was just location + mov newlocation,al + mov getback,0 + call getridoftemp + call getridoftemp2 + call getridoftemp3 + mov es,traveltext + call deallocatemem + ret + +destlist: dw 238,258,4,44,nextdest + dw 104,124,4,44,lastdest + dw 280,308,4,44,lookatplace + dw 104,216,138,192,destselect + dw 273,320,157,198,getback1 + dw 0,320,0,200,blank + dw 0ffffh + + endp + + + + + +Showcity proc near + + call clearwork + mov ds,tempgraphics + mov di,57 + mov bx,32 + mov al,0 + mov ah,0 + call showframe + mov ds,tempgraphics + mov di,120+57 + mov bx,32 + mov al,1 + mov ah,0 + call showframe + ret + + endp + + + + + +Lookatplace proc near + + cmp commandtype,224 + jz alreadyinfo + mov commandtype,224 + mov al,27 + call commandonly +alreadyinfo: mov ax,mousebutton + and ax,1 + jz noinfo + cmp ax,oldbutton + jz noinfo + + mov bl,destpos + cmp bl,15 + jnc noinfo + + push bx + call delpointer + call deltextline + call getundercentre + mov ds,tempgraphics3 + mov al,0 + mov ah,0 + mov di,60 + mov bx,72 + call showframe + mov al,4 + mov ah,0 + mov di,60 + mov bx,72+55 + call showframe + if foreign + mov al,4 + mov ah,0 + mov di,60 + mov bx,72+55+21 + call showframe + endif + pop bx + + mov bh,0 + add bx,bx + mov es,traveltext + mov si,[es:bx] + add si,textstart + call findnextcolon + + mov di,63 + if foreign + mov bx,84+4 + else + mov bx,84 + endif + mov dl,191 + mov al,0 + mov ah,0 + call printdirect + call worktoscreenm + + mov cx,500 + call hangonp + +afterinfo: mov pointermode,0 + mov pointerframe,0 + call putundercentre + call worktoscreenm + +noinfo: ret + + endp + + + + +Getundercentre proc near + + mov di,58 + mov bx,72 + mov ds,mapstore + mov si,0 + mov cl,254 + mov ch,110 + call multiget + ret + + endp + + + + + + + + + + +Putundercentre proc near + + mov di,58 + mov bx,72 + mov ds,mapstore + mov si,0 + mov cl,254 + mov ch,110 + call multiput + ret + + endp + + + + + + + +Locationpic proc near + + call getdestinfo + mov al,[es:si] + push es si + mov di,0 + cmp al,6 + jnc secondlot + mov ds,tempgraphics + add al,4 + jmp gotgraphic +secondlot: sub al,6 + mov ds,tempgraphics2 +gotgraphic: add di,104 + mov bx,138+14 + mov ah,0 + call showframe + pop si es + mov al,destpos + cmp al,reallocation + jnz notinthisone + mov al,3 + mov di,104 + mov bx,140+14 + mov ds,tempgraphics + mov ah,0 + call showframe +notinthisone: mov bl,destpos + mov bh,0 + add bx,bx + mov es,traveltext + mov si,[es:bx] + add si,textstart + mov di,50 + mov bx,20 + mov dl,241 + mov al,0 + mov ah,0 + call printdirect + ret + + endp + + + + +Getdestinfo proc near + + mov al,destpos + mov ah,0 + push ax + mov dx,seg roomscango + mov es,dx + mov si,offset es:roomscango + add si,ax + mov cl,[es:si] + pop ax + push cx + mov dx,seg roompics + mov es,dx + mov si,offset es:roompics + add si,ax + pop ax + ret + + endp + + + + + + +Showarrows proc near + + mov di,116-12 + mov bx,16 + mov ds,tempgraphics + mov al,0 + mov ah,0 + call showframe + mov di,226+12 + mov bx,16 + mov ds,tempgraphics + mov al,1 + mov ah,0 + call showframe + mov di,280 + mov bx,14 + mov ds,tempgraphics + mov al,2 + mov ah,0 + call showframe + ret + + endp + + + + + + + + + +Nextdest proc near + +duok: cmp commandtype,218 + jz alreadydu + mov commandtype,218 + mov al,28 + call commandonly +alreadydu: mov ax,mousebutton + and ax,1 + jz nodu + cmp ax,oldbutton + jz nodu + +searchdestup: inc destpos + cmp destpos,15 + jnz notlastdest + mov destpos,0 +notlastdest: call getdestinfo + cmp al,0 + jz searchdestup + + mov newtextline,1 + call deltextline + call delpointer + call showpanel + call showman + call showarrows + call locationpic + call undertextline + call readmouse + call showpointer + call worktoscreen + call delpointer +nodu: ret + + endp + + + + + + + +Lastdest proc near + +ddok: cmp commandtype,219 + jz alreadydd + mov commandtype,219 + mov al,29 + call commandonly +alreadydd: mov ax,mousebutton + and ax,1 + jz nodd + cmp ax,oldbutton + jz nodd + +searchdestdown: dec destpos + cmp destpos,-1 + jnz notfirstdest + mov destpos,15 +notfirstdest: call getdestinfo + cmp al,0 + jz searchdestdown + + mov newtextline,1 + call deltextline + call delpointer + call showpanel + call showman + call showarrows + call locationpic + call undertextline + call readmouse + call showpointer + call worktoscreen + call delpointer +nodd: ret + + endp + + + + + + + + +Destselect proc near + + cmp commandtype,222 + jz alreadytrav + mov commandtype,222 + mov al,30 + call commandonly +alreadytrav: mov ax,mousebutton + and ax,1 + jz notrav + cmp ax,oldbutton + jz notrav + + call getdestinfo + mov al,destpos + mov newlocation,al +notrav: ret + + endp + + + + + + + + + + + + + + + + + + + +Getlocation proc near + + mov ah,0 + mov bx,ax + mov dx,seg roomscango + mov es,dx + add bx,offset es:roomscango + mov al,[es:bx] + ret + + endp + + +Setlocation proc near ;makes a location accessable + + mov ah,0 + mov bx,ax + mov dx,seg roomscango + mov es,dx + add bx,offset es:roomscango + mov byte ptr [es:bx],1 + ret + + endp + + + + +Resetlocation proc near ;makes a location inaccessable + + push ax + cmp al,5 + jnz notdelhotel + call purgealocation + mov al,21 + call purgealocation + mov al,22 + call purgealocation + mov al,27 + call purgealocation + jmp clearedlocations + +notdelhotel: cmp al,8 + jnz notdeltvstud + call purgealocation + mov al,28 + call purgealocation + jmp clearedlocations + +notdeltvstud: cmp al,6 + jnz notdelsarters + call purgealocation + mov al,20 + call purgealocation + mov al,25 + call purgealocation + jmp clearedlocations + +notdelsarters: cmp al,13 + jnz notdelboathouse + call purgealocation + mov al,29 + call purgealocation + jmp clearedlocations + +notdelboathouse: + +clearedlocations: pop ax + mov ah,0 + mov bx,ax + mov dx,seg roomscango + mov es,dx + add bx,offset es:roomscango + mov byte ptr [es:bx],0 + ret + + endp + + + + +Readdesticon proc near + + mov dx,offset cs:travelgraphic1 + call loadintotemp + + mov dx,offset cs:travelgraphic2 + call loadintotemp2 + + mov dx,offset cs:icongraphics8 + call loadintotemp3 + ret + + endp + + + + +Readcitypic proc near + + mov dx,offset cs:cityname + call loadintotemp + ret + + endp + + + + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/object.asm b/devtools/tasmrecover/dreamweb/object.asm new file mode 100644 index 0000000000..93710d3c23 --- /dev/null +++ b/devtools/tasmrecover/dreamweb/object.asm @@ -0,0 +1,2608 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +;---------------------------------------------------------Inventory printer---- + +Fillryan proc near + ; cx=what to search for + mov es,buffers + mov di,ryaninvlist + call findallryan + mov si,ryaninvlist + mov al,ryanpage + mov ah,0 + mov cx,20 + mul cx + add si,ax + + mov di,inventx + mov bx,inventy + + mov cx,2 +ryanloop2: push cx di bx + mov cx,5 +ryanloop1: push cx di bx + mov ax,[es:si] + add si,2 + push si es + call obtoinv + pop es si + pop bx di cx + add di,itempicsize + loop ryanloop1 + pop bx di cx + add bx,itempicsize + loop ryanloop2 + + call showryanpage + ret + + endp + + + + + + + + + + + +Fillopen proc near + + call deltextline + + call getopenedsize ;find out how many slots + cmp ah,4 ;ah=slots, al=size holdable + jc lessthanapage + mov ah,4 +lessthanapage: mov al,1 + + push ax + mov es,buffers + mov di,openinvlist + call findallopen + mov si,openinvlist + mov di,inventx + mov bx,inventy+96 + pop cx + +openloop1: push cx di bx + mov ax,[es:si] + add si,2 + push si es + cmp ch,cl + jc nextopenslot + call obtoinv +nextopenslot: pop es si + pop bx di cx + add di,itempicsize + inc cl + cmp cl,5 + jnz openloop1 + + call undertextline + ret + + endp + + + + + + + + + + + + + + + + +Findallryan proc near + + push di + mov cx,30 + mov ax,0ffffh + rep stosw + pop di + + mov cl,4 + mov ds,extras + mov bx,exdata + mov ch,0 +findryanloop: cmp [bx+2],cl + jnz notinryaninv + cmp byte ptr [bx+3],255 + jnz notinryaninv + mov al,[bx+4] + mov ah,0 + push di + add di,ax + add di,ax + mov al,ch + mov ah,4 ;means it is an exchanged object ie:not free or set + stosw + pop di +notinryaninv: add bx,16 + inc ch + cmp ch,numexobjects + jnz findryanloop + ret + + endp + + + + + + + +Findallopen proc near + + push di + mov cx,16 + mov ax,0ffffh + rep stosw + pop di + + mov cl,openedob + mov dl,openedtype + mov ds,extras + mov bx,exdata + mov ch,0 +findopen1: cmp [bx+3],cl + jnz findopen2 + cmp [bx+2],dl + jnz findopen2 + cmp openedtype,4 + jz noloccheck + mov al,[bx+5] + cmp al,reallocation + jnz findopen2 +noloccheck: mov al,[bx+4] + mov ah,0 + push di + add di,ax + add di,ax + mov al,ch + mov ah,4 + stosw + pop di +findopen2: add bx,16 + inc ch + cmp ch,numexobjects + jnz findopen1 + + mov cl,openedob + mov dl,openedtype + push dx + mov ds,freedat + pop dx + mov bx,0 + mov ch,0 +findopen1a: cmp [bx+3],cl + jnz findopen2a + cmp [bx+2],dl + jnz findopen2a + mov al,[bx+4] + mov ah,0 + push di + add di,ax + add di,ax + mov al,ch + mov ah,2 ; means it's in a free ob + stosw + pop di +findopen2a: add bx,16 + inc ch + cmp ch,80 + jnz findopen1a + ret + + endp + + + + + + +Obtoinv proc near + + push bx es si ax + + push ax di bx + mov ds,icons1 + sub di,2 + sub bx,1 + mov al,10 + mov ah,0 + call showframe + pop bx di ax + cmp al,255 + jz finishfill + + push bx di ax + mov ds,extras + cmp ah,4 + jz isanextra + mov ds,freeframes +isanextra: mov cl,al + add al,al + add al,cl + inc al + mov ah,128 + add bx,19 + add di,18 + call showframe + pop ax di bx + + push bx + call getanyaddir + call isitworn + pop bx + jnz finishfill + mov ds,icons1 ;Print wearing logo + sub di,3 + sub bx,2 + mov al,7 + mov ah,0 + call showframe + +finishfill: pop ax si es bx + ret + + endp + + + + + +Isitworn proc near ;zero if yes + + mov al,[es:bx+12] + cmp al,"W"-"A" + jnz notworn + mov al,[es:bx+13] + cmp al,"E"-"A" +notworn: ret + + endp + + + +Makeworn proc near + + mov byte ptr [es:bx+12],"W"-"A" + mov byte ptr [es:bx+13],"E"-"A" + ret + + endp + + + + + + +;-------------------------------------------------------Examining an object---- + +Examineob proc near + + mov pointermode,0 + mov timecount,0 + +examineagain: mov inmaparea,0 + mov examagain,0 + mov openedob,255 + mov openedtype,255 + mov invopen,0 + mov al,commandtype + mov objecttype,al + mov itemframe,0 + mov pointerframe,0 + + call createpanel + call showpanel + call showman + call showexit + call obicons + call obpicture + call describeob + call undertextline + + mov commandtype,255 + call readmouse + call showpointer + call worktoscreen + call delpointer + +waitexam: ;call delpointer + call readmouse + call showpointer + call vsync + call dumppointer + call dumptextline + call delpointer + + mov getback,0 + mov bx,offset cs:examlist + cmp invopen,0 + jz notuseinv + mov bx,offset cs:invlist1 + cmp invopen,1 + jz notuseinv + mov bx,offset cs:withlist1 +notuseinv: call checkcoords + cmp examagain,0 + jz norex + jmp examineagain +norex: cmp getback,0 + jz waitexam + + mov pickup,0 + cmp watchingtime,0 + jnz iswatching + cmp newlocation,255 + jnz justgetback + +iswatching: call makemainscreen + mov invopen,0 + mov openedob,255 + ret + +justgetback: mov invopen,0 + mov openedob,255 + ret + +examlist: dw 273,320,157,198,getbackfromob + dw 260,300,0,44,useobject + dw 210,254,0,44,selectopenob + dw 144,176,64,96,setpickup + dw 0,50,50,200,examinventory + dw 0,320,0,200,blank + dw 0ffffh + +invlist1: dw 273,320,157,198,getbackfromob + dw 255,294,0,24,dropobject + dw inventx+167,inventx+167+(18*3),inventy-18,inventy-2,incryanpage + dw inventx +openchangesize: dw inventx+(4*itempicsize) + dw inventy+100,inventy+100+itempicsize,useopened + dw inventx,inventx+(5*itempicsize) + dw inventy,inventy+(2*itempicsize),intoinv + dw 0,320,0,200,blank + dw 0ffffh + +withlist1: dw 273,320,157,198,getbackfromob + dw inventx+167,inventx+167+(18*3),inventy-18,inventy-2,incryanpage + dw inventx,inventx+(5*itempicsize) + dw inventy,inventy+(2*itempicsize),selectob + dw 0,320,0,200,blank + dw 0ffffh + + endp + + + + + + +Makemainscreen proc near + + call createpanel + mov newobs,1 + call drawfloor + call spriteupdate + call printsprites + call reelsonscreen + call showicon + call getunderzoom + call undertextline + mov commandtype,255 + call animpointer + call worktoscreenm + mov commandtype,200 + mov manisoffscreen,0 + ret + + endp + + + + +Getbackfromob proc near + + cmp pickup,1 + jnz notheldob + call blank + ret +notheldob: call getback1 + ret + + endp + + + + + + + + + + + + + + + + +Incryanpage proc near + + cmp commandtype,222 + jz alreadyincryan + mov commandtype,222 + mov al,31 + call commandonly +alreadyincryan: mov ax,mousebutton + cmp ax,oldbutton + jz noincryan + and ax,1 + jnz doincryan +noincryan: ret + +doincryan: mov ax,mousex + sub ax,inventx+167 + mov ryanpage,-1 +findnewpage: inc ryanpage + sub ax,18 + jnc findnewpage + call delpointer + call fillryan + call readmouse + call showpointer + call worktoscreen + call delpointer + ret + + endp + + + + + + + +Openinv proc near + + mov invopen,1 + mov al,61 + mov di,inventx + mov bx,inventy-10 + mov dl,240 + call printmessage + call fillryan + mov commandtype,255 + ret + + endp + + + + + + + +Showryanpage proc near + + mov ds,icons1 + mov di,inventx+167 + mov bx,inventy-12 + mov al,12 + mov ah,0 + call showframe + + mov al,13 + add al,ryanpage + push ax + mov al,ryanpage + mov ah,0 + mov cx,18 + mul cx + mov ds,icons1 + mov di,inventx+167 + add di,ax + mov bx,inventy-12 + pop ax + mov ah,0 + call showframe + ret + + endp + + + + + + + + + +Openob proc near + + mov al,openedob + mov ah,openedtype + mov di,offset cs:commandline + call copyname + + mov di,inventx + mov bx,inventy+86 + mov al,62 + mov dl,240 + call printmessage + + mov di,lastxpos + add di,5 + mov bx,inventy+86 + push cs + pop es + mov si,offset cs:commandline + mov dl,220 + mov al,0 + mov ah,0 + call printdirect + + call fillopen + call getopenedsize + mov al,ah + mov ah,0 + mov cx,itempicsize + mul cx + add ax,inventx + mov bx,offset cs:openchangesize + mov [cs:bx],ax + ret + + endp + + + + + + +Obicons proc near + + mov al,command + call getanyad + cmp al,255 + jz cantopenit + + mov ds,icons2 + mov di,210 + mov bx,1 + mov al,4 + mov ah,0 + call showframe + +cantopenit: mov ds,icons2 + mov di,260 + mov bx,1 + mov al,1 + mov ah,0 + call showframe + ret + + endp + + + + + + + +Examicon proc near + + mov ds,icons2 + mov di,254 + mov bx,5 + mov al,3 + mov ah,0 + call showframe + ret + + endp + + + + + + + +Obpicture proc near + + mov al,command + mov ah,objecttype + cmp ah,1 + jz setframe + cmp ah,4 + jz exframe + + mov ds,freeframes + mov di,160 + mov bx,68 + mov cl,al + add al,al + add al,cl + inc al + mov ah,128 + call showframe + ret + +setframe: ret + +exframe: mov ds,extras + mov di,160 + mov bx,68 + mov cl,al + add al,al + add al,cl + inc al + mov ah,128 + call showframe + ret + + endp + + + + + + + + + + +Describeob proc near + + call getobtextstart + + mov di,33 + mov bx,92 + if foreign + cmp objecttype,1 + jnz notsetd + mov bx,82 +notsetd: endif + mov dl,241 + mov ah,16 + mov charshift,91+91 + call printdirect + mov charshift,0 + mov di,36 + mov bx,104 + if foreign + cmp objecttype,1 + jnz notsetd2 + mov bx,94 +notsetd2: endif + mov dl,241 + mov ah,0 + call printdirect + push bx + call obsthatdothings + pop bx + call additionaltext + ret + + + endp + + + + + +Additionaltext proc near + + add bx,10 + push bx + mov al,command + mov ah,objecttype + mov cl,"C" + mov ch,"U" + mov dl,"P" + mov dh,"E" + call compare + jz emptycup + mov al,command + mov ah,objecttype + mov cl,"C" + mov ch,"U" + mov dl,"P" + mov dh,"F" + call compare + jz fullcup + pop bx + ret +emptycup: mov al,40 + call findpuztext + pop bx + mov di,36 + mov dl,241 + mov ah,0 + call printdirect + ret +fullcup: mov al,39 + call findpuztext + pop bx + mov di,36 + mov dl,241 + mov ah,0 + call printdirect + ret + + endp + + + + + + + + + + + +Obsthatdothings proc near + + mov al,command + mov ah,objecttype + mov cl,"M" + mov ch,"E" + mov dl,"M" + mov dh,"B" + call compare + jnz notlouiscard + mov al,4 + call getlocation + cmp al,1 + jz seencard + mov al,4 + call setlocation + call lookatcard +seencard: ret +notlouiscard: ret + + endp + + + + + + + +Getobtextstart proc near + + mov es,freedesc + mov si,freetextdat + mov cx,freetext + cmp objecttype,2 + jz describe + mov es,setdesc + mov si,settextdat + mov cx,settext + cmp objecttype,1 + jz describe + mov es,extras + mov si,extextdat + mov cx,extext + +describe: mov al,command + mov ah,0 + add ax,ax + add si,ax + mov ax,[es:si] + add ax,cx + mov si,ax + mov bx,ax +tryagain: push si + call findnextcolon + mov al,[es:si] + mov cx,si + pop si + cmp objecttype,1 + jnz cantmakeoneup + cmp al,0 + jz findsometext + cmp al,":" + jz findsometext +cantmakeoneup: ret + +findsometext: call searchforsame + jmp tryagain + ret + + endp + + + + + + +Searchforsame proc near + + mov si,cx +searchagain: inc si + mov al,[es:bx] +search: cmp [es:si],al + jz gotstartletter + inc cx + inc si + cmp si,8000 ;arbitrary give-up + jc search ;counter. + mov si,bx + pop ax + ret + +gotstartletter: push bx si +keepchecking: inc si + inc bx + mov al,[es:bx] + mov ah,[es:si] + cmp al,":" + jz foundmatch + cmp al,0 + jz foundmatch + cmp al,ah + jz keepchecking + pop si bx + jmp searchagain + +foundmatch: pop si bx + ret + + endp + + + + + + + +;-----------------------------------------------------------Using an object---- + + + + + +Findnextcolon proc near + +isntcolon: mov al,[es:si] + inc si + cmp al,0 + jz endofcolon + cmp al,":" + jnz isntcolon +endofcolon: ret + + endp + + +;------------------------------------------------------Taking, dropping etc---- + + + + + + +Inventory proc near + + cmp mandead,1 + jz iswatchinv + cmp watchingtime,0 + jz notwatchinv +iswatchinv: call blank + ret +notwatchinv: cmp commandtype,239 + jz alreadyopinv + mov commandtype,239 + mov al,32 + call commandonly +alreadyopinv: mov ax,mousebutton + cmp ax,oldbutton + jz cantopinv + and ax,1 + jnz doopeninv +cantopinv: ret + +doopeninv: mov timecount,0 + mov pointermode,0 + mov inmaparea,0 + call animpointer + call createpanel + call showpanel + call examicon + call showman + call showexit + call undertextline + mov pickup,0 + mov invopen,2 + call openinv + call readmouse + call showpointer + call worktoscreen + call delpointer + mov openedob,255 + jmp waitexam ; very naughty! + + endp + + + + + + +Setpickup proc near + + cmp objecttype,1 + jz cantpick + cmp objecttype,3 + jz cantpick + call getanyad + mov al,[es:bx+2] + cmp al,4 + jnz canpick +cantpick: call blank + ret + +canpick: cmp commandtype,209 + jz alreadysp + mov commandtype,209 + + mov bl,command + mov bh,objecttype + mov al,33 + call commandwithob +alreadysp: mov ax,mousebutton + cmp ax,1 + jnz nosetpick + cmp ax,oldbutton + jnz dosetpick +nosetpick: ret + +dosetpick: call createpanel + call showpanel + call showman + call showexit + call examicon + mov pickup,1 + mov invopen,2 + cmp objecttype,4 + jz pickupexob + + mov al,command + mov itemframe,al + mov openedob,255 + call transfertoex + mov itemframe,al + mov objecttype,4 + call geteitherad + mov byte ptr [es:bx+2],20 ; means it is in transit + mov byte ptr [es:bx+3],255 + call openinv + call worktoscreenm + ret + +pickupexob: mov al,command + mov itemframe,al + mov openedob,255 + call openinv + call worktoscreenm + ret + + endp + + + + + +Examinventory proc near + + cmp commandtype,249 + jz alreadyexinv + mov commandtype,249 + mov al,32 + call commandonly +alreadyexinv: mov ax,mousebutton + and ax,1 + jnz doexinv + ret + +doexinv: call createpanel + call showpanel + call showman + call showexit + call examicon + mov pickup,0 + mov invopen,2 + call openinv + call worktoscreenm + ret + + endp + + + + + +Reexfrominv proc near + + call findinvpos + mov ax,[es:bx] + mov commandtype,ah + mov command,al + mov examagain,1 + mov pointermode,0 + ret + + endp + + + + + + + +Reexfromopen proc near + + ret + call findopenpos + mov ax,[es:bx] + mov commandtype,ah + mov command,al + mov examagain,1 + mov pointermode,0 + ret + + endp + + + + + + + + + + + + + + + + + + + +Swapwithinv proc near + + mov al,itemframe + mov ah,objecttype + cmp ax,oldsubject + jnz difsub7 + cmp commandtype,243 + jz alreadyswap1 + mov commandtype,243 + +difsub7: mov oldsubject,ax + mov bx,ax + mov al,34 + call commandwithob +alreadyswap1: mov ax,mousebutton + cmp ax,oldbutton + jz cantswap1 + and ax,1 + jnz doswap1 +cantswap1: ret + +doswap1: mov ah,objecttype + mov al,itemframe + push ax + + call findinvpos + mov ax,[es:bx] + mov itemframe,al + mov objecttype,ah + call geteitherad + mov byte ptr [es:bx+2],20 ; means unplaced object + mov byte ptr [es:bx+3],255 + mov bl,itemframe + mov bh,objecttype + + pop ax + mov objecttype,ah + mov itemframe,al + push bx + + call findinvpos ;NONE OF THIS IS NEEDED + call delpointer ;ONLY EXTRAS CAN BE IN + mov al,itemframe + call geteitherad + mov byte ptr [es:bx+2],4 + mov byte ptr [es:bx+3],255 + mov al,lastinvpos + mov [es:bx+4],al + + pop ax + mov objecttype,ah + mov itemframe,al + call fillryan + call readmouse + call showpointer + call worktoscreen + call delpointer + ret + + endp + + + + + + + + + + +Swapwithopen proc near + + mov al,itemframe + mov ah,objecttype + cmp ax,oldsubject + jnz difsub8 + cmp commandtype,242 + jz alreadyswap2 + mov commandtype,242 + +difsub8: mov oldsubject,ax + mov bx,ax + mov al,34 + call commandwithob +alreadyswap2: mov ax,mousebutton + cmp ax,oldbutton + jz cantswap2 + and ax,1 + jnz doswap2 +cantswap2: ret + +doswap2: call geteitherad + call isitworn + jnz notwornswap + call wornerror + ret +notwornswap: call delpointer + mov al,itemframe + cmp al,openedob + jnz isntsame2 + mov al,objecttype + cmp al,openedtype + jnz isntsame2 + call errormessage1 + ret + +isntsame2: call checkobjectsize + cmp al,0 + jz sizeok2 + ret + +sizeok2: mov ah,objecttype + mov al,itemframe + push ax + + call findopenpos + mov ax,[es:bx] + mov itemframe,al + mov objecttype,ah + + cmp ah,4 + jnz makeswapex + call geteitherad + mov byte ptr [es:bx+2],20 + mov byte ptr [es:bx+3],255 + jmp actuallyswap + +makeswapex: call transfertoex + mov itemframe,al + mov objecttype,4 + call geteitherad + mov byte ptr [es:bx+2],20 + mov byte ptr [es:bx+3],255 + +actuallyswap: mov bl,itemframe + mov bh,objecttype + pop ax + mov objecttype,ah + mov itemframe,al + push bx + + call findopenpos + call geteitherad + mov al,openedtype + mov byte ptr [es:bx+2],al + mov al,openedob + mov byte ptr [es:bx+3],al + mov al,lastinvpos + mov [es:bx+4],al + mov al,reallocation + mov [es:bx+5],al + + pop ax + mov objecttype,ah + mov itemframe,al + call fillopen + call fillryan + call undertextline + call readmouse + call useopened + call showpointer + call worktoscreen + call delpointer + ret + + endp + + + + + + + + + + + +Intoinv proc near + + cmp pickup,0 + jnz notout + call outofinv + ret + +notout: call findinvpos + mov ax,[es:bx] + cmp al,255 + jz canplace1 + call swapwithinv + ret + +canplace1: mov al,itemframe + mov ah,objecttype + cmp ax,oldsubject + jnz difsub1 + cmp commandtype,220 + jz alreadyplce + mov commandtype,220 + +difsub1: mov oldsubject,ax + mov bx,ax + mov al,35 + call commandwithob +alreadyplce: mov ax,mousebutton + cmp ax,oldbutton + jz notletgo2 + and ax,1 + jnz doplace +notletgo2: ret + +doplace: call delpointer + mov al,itemframe + call getexad + mov byte ptr [es:bx+2],4 + mov byte ptr [es:bx+3],255 + mov al,lastinvpos + mov [es:bx+4],al + + mov pickup,0 + call fillryan + call readmouse + call showpointer + call outofinv + call worktoscreen + call delpointer + ret + + endp + + + + + + + +Deletetaken proc near ;gets rid of objects that were + ;transfered to exlist ages ago + mov es,freedat + mov ah,reallocation + mov ds,extras + mov si,exdata + + mov cx,numexobjects +takenloop: mov al,[si+11] + cmp al,ah + jnz notinhere + mov bl,[si+1] + mov bh,0 + add bx,bx + add bx,bx + add bx,bx + add bx,bx + mov byte ptr [es:bx+2],254 ; was 255 + +notinhere: add si,16 + loop takenloop + + ret + + endp + + + + + + +Outofinv proc near + + call findinvpos + mov ax,[es:bx] + cmp al,255 + jnz canpick2 + call blank + ret + +canpick2: mov bx,mousebutton + cmp bx,2 + jnz canpick2a + call reexfrominv + ret + +canpick2a: cmp ax,oldsubject + jnz difsub3 + cmp commandtype,221 + jz alreadygrab + mov commandtype,221 + +difsub3: mov oldsubject,ax + mov bx,ax + mov al,36 + call commandwithob +alreadygrab: mov ax,mousebutton + cmp ax,oldbutton + jz notletgo + and ax,1 + jnz dograb +notletgo: ret + +dograb: call delpointer + mov pickup,1 + call findinvpos + mov ax,[es:bx] + mov itemframe,al + mov objecttype,ah + call getexad + mov byte ptr [es:bx+2],20 ; means unplaced object + mov byte ptr [es:bx+3],255 + call fillryan + call readmouse + call showpointer + call intoinv + call worktoscreen + call delpointer + ret + + endp + + + + + +Getfreead proc near + + mov ah,0 + mov cl,4 + shl ax,cl + mov bx,ax + mov es,freedat + ret + + endp + + + + + + + + +Getexad proc near + + mov ah,0 + mov bx,16 + mul bx + mov bx,ax + mov es,extras + add bx,exdata + ret + + endp + + + + + + +Geteitherad proc near + + cmp objecttype,4 + jz isinexlist + mov al,itemframe + call getfreead + ret +isinexlist: mov al,itemframe + call getexad + ret + + endp + + + + + + +Getanyad proc near ;nearly same as above + ;but uses command + cmp objecttype,4 + jz isex + cmp objecttype,2 + jz isfree + mov al,command + call getsetad + mov ax,[es:bx+4] + ret +isfree: mov al,command + call getfreead + mov ax,[es:bx+7] + ret +isex: mov al,command + call getexad + mov ax,[es:bx+7] + ret + + endp + + + +Getanyaddir proc near ;nearly same as above + ;but uses ax + cmp ah,4 + jz isex3 + cmp ah,2 + jz isfree3 + call getsetad + ret +isfree3: call getfreead + ret +isex3: call getexad + ret + + endp + + + + + + +Getopenedsize proc near ;nearly same as above again + ;but finds ad of opened ob + cmp openedtype,4 + jz isex2 + cmp openedtype,2 + jz isfree2 + mov al,openedob + call getsetad + mov ax,[es:bx+3] + ret +isfree2: mov al,openedob + call getfreead + mov ax,[es:bx+7] + ret +isex2: mov al,openedob + call getexad + mov ax,[es:bx+7] + ret + + endp + + + + + + + + +Getsetad proc near + + mov ah,0 + mov bx,64 + mul bx + mov bx,ax + mov es,setdat + ret + + endp + + + + + + +Findinvpos proc near + + mov cx,mousex + sub cx,inventx + mov bx,-1 +findinv1: inc bx + sub cx,itempicsize + jnc findinv1 + + mov cx,mousey + sub cx,inventy + sub bx,5 +findinv2: add bx,5 + sub cx,itempicsize + jnc findinv2 + + mov al,ryanpage + mov ah,0 + mov cx,10 + mul cx + add bx,ax + + mov al,bl + mov lastinvpos,al + add bx,bx + + mov es,buffers + add bx,ryaninvlist + ret + + endp + + + + + + + + + +Findopenpos proc near + + mov cx,mousex + sub cx,inventx + mov bx,-1 +findopenp1: inc bx + sub cx,itempicsize + jnc findopenp1 + + mov al,bl + mov lastinvpos,al + + add bx,bx + mov es,buffers + add bx,openinvlist + ret + + endp + + + + + + + + + + + + +;--------------------------------------------------------Dropping an object---- + +Dropobject proc near + + cmp commandtype,223 + jz alreadydrop + mov commandtype,223 + cmp pickup,0 + jz blank + + mov bl,itemframe + mov bh,objecttype + mov al,37 + call commandwithob +alreadydrop: mov ax,mousebutton + cmp ax,oldbutton + jz nodrop + and ax,1 + jnz dodrop +nodrop: ret + +dodrop: call geteitherad + call isitworn + jnz nowornerror + call wornerror + ret +nowornerror: cmp reallocation,47 + jz nodrop2 + mov cl,ryanx + add cl,12 + mov ch,ryany + add ch,12 + call checkone + cmp cl,2 + jc nodroperror +nodrop2: call droperror + ret +nodroperror: cmp mapxsize,64 + jnz notinlift + cmp mapysize,64 + jnz notinlift + call droperror + ret +notinlift: mov al,itemframe + mov ah,4 + mov cl,"G" + mov ch,"U" + mov dl,"N" + mov dh,"A" + call compare + jz cantdrop + mov al,itemframe + mov ah,4 + mov cl,"S" + mov ch,"H" + mov dl,"L" + mov dh,"D" + call compare + jz cantdrop + mov objecttype,4 + mov al,itemframe + call getexad + mov byte ptr [es:bx+2],0 + mov al,ryanx + add al,4 + mov cl,4 + shr al,cl + add al,mapx + mov ah,ryany + add ah,8 + mov cl,4 + shr ah,cl + add ah,mapy + mov byte ptr [es:bx+3],al + mov byte ptr [es:bx+5],ah + mov al,ryanx + add al,4 + and al,15 + mov ah,ryany + add ah,8 + and ah,15 + mov byte ptr [es:bx+4],al + mov byte ptr [es:bx+6],ah + mov pickup,0 + mov al,reallocation + mov [es:bx],al + ret + + endp + + + + +Droperror proc near + + mov commandtype,255 + call delpointer + mov di,76 + mov bx,21 + mov al,56 + mov dl,240 + call printmessage + call worktoscreenm + mov cx,50 + call hangonp + call showpanel + call showman + call examicon + mov commandtype,255 + call worktoscreenm + ret + + endp + + + + +Cantdrop proc near + + mov commandtype,255 + call delpointer + mov di,76 + mov bx,21 + mov al,24 + mov dl,240 + call printmessage + call worktoscreenm + mov cx,50 + call hangonp + call showpanel + call showman + call examicon + mov commandtype,255 + call worktoscreenm + ret + + endp + + + +Wornerror proc near + + mov commandtype,255 + call delpointer + mov di,76 + mov bx,21 + mov al,57 + mov dl,240 + call printmessage + call worktoscreenm + mov cx,50 + call hangonp + call showpanel + call showman + call examicon + mov commandtype,255 + call worktoscreenm + ret + + endp + + + + + + + + + + +Removeobfrominv proc near + + cmp command,100 + jz obnotexist + call getanyad + mov di,bx + mov cl,command + mov ch,0 + call deleteexobject + ;mov byte ptr [es:bx+2],0 +obnotexist: ret + + endp + + + + +;---------------------------------------------------------Opening an object---- + +Selectopenob proc near + + mov al,command + call getanyad + cmp al,255 + jnz canopenit1 + call blank + ret + +canopenit1: cmp commandtype,224 + jz alreadyopob + mov commandtype,224 + + mov bl,command + mov bh,objecttype + mov al,38 + call commandwithob +alreadyopob: mov ax,mousebutton + cmp ax,oldbutton + jz noopenob + and ax,1 + jnz doopenob +noopenob: ret + +doopenob: mov al,command + mov openedob,al + mov al,objecttype + mov openedtype,al + + call createpanel + call showpanel + call showman + call examicon + call showexit + call openinv + call openob + call undertextline + call readmouse + call showpointer + call worktoscreen + call delpointer + ret + + endp + + + + + + + + + + +Useopened proc near + + cmp openedob,255 + jz cannotuseopen + cmp pickup,0 + jnz notout2 + call outofopen + ret + +notout2: call findopenpos + mov ax,[es:bx] + cmp al,255 + jz canplace3 + call swapwithopen +cannotuseopen: ret + +canplace3: cmp pickup,1 + jz intoopen + call blank + ret + +intoopen: mov al,itemframe + mov ah,objecttype + cmp ax,oldsubject + jnz difsub2 + cmp commandtype,227 + jz alreadyplc2 + mov commandtype,227 + +difsub2: mov oldsubject,ax + mov bx,ax + mov al,35 + call commandwithob +alreadyplc2: mov ax,mousebutton + cmp ax,oldbutton + jz notletgo3 + cmp ax,1 + jz doplace2 +notletgo3: ret + +doplace2: call geteitherad + call isitworn + jnz notworntoopen + call wornerror + ret +notworntoopen: call delpointer + mov al,itemframe + cmp al,openedob + jnz isntsame + mov al,objecttype + cmp al,openedtype + jnz isntsame + call errormessage1 + ret + +isntsame: call checkobjectsize + cmp al,0 + jz sizeok1 + ret + +sizeok1: mov pickup,0 + mov al,itemframe + call geteitherad + mov al,openedtype + mov byte ptr [es:bx+2],al + mov al,openedob + mov byte ptr [es:bx+3],al + mov al,lastinvpos + mov [es:bx+4],al + mov al,reallocation + mov [es:bx+5],al + call fillopen + call undertextline + call readmouse + call useopened + call showpointer + call worktoscreen + call delpointer + ret + + endp + + + + + + + + +Errormessage1 proc near + + call delpointer + mov di,76 + mov bx,21 + mov al,58 + mov dl,240 + call printmessage + call readmouse + call showpointer + call worktoscreen + call delpointer + mov cx,50 + call hangonp + call showpanel + call showman + call examicon + call readmouse + call useopened + call showpointer + call worktoscreen + call delpointer + ret + + endp + + + + + + + +Errormessage2 proc near + + mov commandtype,255 + call delpointer + mov di,76 + mov bx,21 + mov al,59 + mov dl,240 + call printmessage + call readmouse + call showpointer + call worktoscreen + call delpointer + mov cx,50 + call hangonp + call showpanel + call showman + call examicon + call readmouse + call useopened + call showpointer + call worktoscreen + call delpointer + ret + + endp + + + + + + + + + + +Errormessage3 proc near + + call delpointer + mov di,76 + mov bx,21 + mov al,60 + mov dl,240 + call printmessage + call worktoscreenm + mov cx,50 + call hangonp + call showpanel + call showman + call examicon + call readmouse + call useopened + call showpointer + call worktoscreen + call delpointer + ret + + endp + + + + +Checkobjectsize proc near + + call getopenedsize + push ax + mov al,itemframe + call geteitherad + mov al,[es:bx+9] + pop cx + + cmp al,255 ;gives a size of 6 if no + jnz notunsized ;size was defined in the editor + mov al,6 ;could be a bad idea +notunsized: + + + cmp al,100 + jnc specialcase + cmp cl,100 + jc isntspecial + call errormessage3 + jmp sizewrong +isntspecial: cmp cl,al + jnc sizeok +specialcase: sub al,100 + cmp cl,100 + jnc bothspecial + cmp cl,al + jnc sizeok + call errormessage2 + jmp sizewrong +bothspecial: sub cl,100 + cmp al,cl + jz sizeok + call errormessage3 +sizewrong: mov al,1 + ret +sizeok: mov al,0 + ret + + endp + + + + + + + + +Outofopen proc near + + cmp openedob,255 + jz cantuseopen + call findopenpos + mov ax,[es:bx] + cmp al,255 + jnz canpick4 +cantuseopen: call blank + ret + +canpick4: cmp ax,oldsubject + jnz difsub4 + cmp commandtype,228 + jz alreadygrb + mov commandtype,228 + +difsub4: mov oldsubject,ax + mov bx,ax + mov al,36 + call commandwithob +alreadygrb: mov ax,mousebutton + cmp ax,oldbutton + jz notletgo4 + cmp ax,1 + jz dogrb + cmp ax,2 + jnz notletgo4 + call reexfromopen +notletgo4: ret + +dogrb: call delpointer + mov pickup,1 + call findopenpos + mov ax,[es:bx] + mov itemframe,al + mov objecttype,ah + + cmp ah,4 + jnz makeintoex + call geteitherad + mov byte ptr [es:bx+2],20 ; means unplaced object + mov byte ptr [es:bx+3],255 + jmp actuallyout + +makeintoex: call transfertoex + mov itemframe,al + mov objecttype,4 + call geteitherad + mov byte ptr [es:bx+2],20 ; means it is in transit + mov byte ptr [es:bx+3],255 + +actuallyout: call fillopen + call undertextline + call readmouse + call useopened + call showpointer + call worktoscreen + call delpointer + ret + + endp + + + + + +;All Extra object code - adding and removing plus purge routines ------------- + + + + + + +Transfertoex proc near + + call emergencypurge + + call getexpos + mov al,expos + push ax + + push di + mov al,itemframe + mov ah,0 + mov bx,16 + mul bx + mov ds,freedat + mov si,ax + mov cx,8 + rep movsw + pop di + + mov al,reallocation + mov [es:di],al + mov [es:di+11],al + mov al,itemframe + mov [es:di+1],al + mov byte ptr [es:di+2],4 + mov byte ptr [es:di+3],255 + mov al,lastinvpos + mov [es:di+4],al + + mov al,itemframe + mov itemtotran,al + call transfermap + call transferinv + call transfertext + + mov al,itemframe + mov ah,0 + mov bx,16 + mul bx + mov ds,freedat + mov si,ax + mov byte ptr [si+2],254 ; was 255 + call pickupconts + + pop ax + ret + + endp + + + + + + + + + + + + + + +Pickupconts proc near + + mov al,[si+7] + cmp al,255 + jz notopenable + + mov al,itemframe + mov ah,objecttype + mov dl,expos + ;dec dl + mov es,freedat + mov bx,0 + mov cx,0 +pickupcontloop: push cx es bx dx ax + + cmp byte ptr [es:bx+2],ah + jnz notinsidethis + cmp byte ptr [es:bx+3],al + jnz notinsidethis + + mov itemtotran,cl + call transfercontoex + +notinsidethis: pop ax dx bx es cx + add bx,16 + inc cx + cmp cx,80 + jnz pickupcontloop + +notopenable: ret + + endp + + + + + + + +Transfercontoex proc near + + push es bx + + push dx es bx + call getexpos + pop si ds + + push di + mov cx,8 + rep movsw + pop di + pop dx + + mov al,reallocation + mov [es:di],al + mov [es:di+11],al + mov al,itemtotran + mov [es:di+1],al + mov [es:di+3],dl + mov byte ptr [es:di+2],4 + + call transfermap + call transferinv + call transfertext + ;inc expos + + pop si ds + mov byte ptr [si+2],255 + ret + + endp + + + + + + + + + + + + + + + + + + +Transfertext proc near + + mov es,extras + mov al,expos + mov ah,0 + add ax,ax + mov bx,extextdat + add bx,ax + mov di,extextpos + mov [es:bx],di + add di,extext + + mov al,itemtotran + mov ah,0 + add ax,ax + mov ds,freedesc + mov bx,freetextdat + add bx,ax + mov si,freetext + mov ax,[bx] + add si,ax + +moretext: lodsb + stosb + inc extextpos + cmp al,0 + jnz moretext + ret + + endp + + + + + + + + + + +Getexpos proc near + + + mov es,extras + mov al,0 + mov di,exdata +tryanotherex: cmp byte ptr [es:di+2],255 + jz foundnewex + add di,16 + inc al + cmp al,numexobjects + jnz tryanotherex +foundnewex: mov expos,al + ret + + endp + + + + + + + + + +Purgealocation proc near + + push ax + mov es,extras + mov di,exdata + pop bx + mov cx,0 +purgeloc: cmp bl,[es:di+0] + jnz dontpurge + cmp byte ptr [es:di+2],0 + jnz dontpurge + push di es bx cx + call deleteexobject + pop cx bx es di +dontpurge: add di,16 + inc cx + cmp cx,numexobjects + jnz purgeloc + ret + + endp + + + + + +Emergencypurge proc near + +checkpurgeagain: mov ax,exframepos + add ax,4000 + cmp ax,exframeslen + jc notnearframeend + call purgeanitem + jmp checkpurgeagain +notnearframeend: mov ax,extextpos + add ax,400 + cmp ax,extextlen + jc notneartextend + call purgeanitem + jmp checkpurgeagain +notneartextend: ret + + endp + + + + + + +Purgeanitem proc near + + mov es,extras ;first time try and + mov di,exdata ;find an object in a + mov bl,reallocation ;location other than + mov cx,0 ;the one the player is +lookforpurge: mov al,[es:di+2] ;in + cmp al,0 + jnz cantpurge + cmp byte ptr [es:di+12],2 + jz iscup + cmp byte ptr [es:di+12],255 + jnz cantpurge +iscup: cmp byte ptr [es:di+11],bl + jz cantpurge + call deleteexobject + ret +cantpurge: add di,16 + inc cx + cmp cx,numexobjects + jnz lookforpurge + + mov di,exdata + mov bl,reallocation + mov cx,0 +lookforpurge2: mov al,[es:di+2] + cmp al,0 + jnz cantpurge2 + cmp byte ptr [es:di+12],255 + jnz cantpurge2 + call deleteexobject + ret +cantpurge2: add di,16 + inc cx + cmp cx,numexobjects + jnz lookforpurge2 + ret + + endp + + + + + +Deleteexobject proc near ;es:di holds data ad + ;cx holds number + push cx cx cx cx + mov al,255 + mov cx,16 + rep stosb + pop ax + mov cl,al + add al,al + add al,cl + call deleteexframe + pop ax + mov cl,al + add al,al + add al,cl + inc al + call deleteexframe + pop ax + call deleteextext + + pop bx + mov bh,bl + mov bl,4 + mov di,exdata + mov cx,0 +deleteconts: cmp [es:di+2],bx + jnz notinsideex + push bx cx di + call deleteexobject ;Oooh missus! + pop di cx bx ;Recursive code! +notinsideex: add di,16 + inc cx + cmp cx,numexobjects + jnz deleteconts + ret + + endp + + + + + +Deleteexframe proc near ;al holds frame to delete + + mov di,exframedata + mov ah,0 + add ax,ax + add di,ax + add ax,ax + add di,ax + mov al,[es:di] + mov ah,0 + mov cl,[es:di+1] + mov ch,0 + mul cx ;ax holds size of this + ;frame in bytes + mov si,[es:di+2] + push si + add si,exframes + mov cx,exframeslen + sub cx,[es:di+2] + mov di,si ;di/si hold start of frame + add si,ax ;si holds end of frame + push ax + push es + pop ds + rep movsb + pop bx ;bx holds size now + sub exframepos,bx + pop si ;si holds start of frame + ;(offset only) + mov cx,numexobjects*3 + mov di,exframedata +shuffleadsdown: mov ax,[es:di+2] + cmp ax,si + jc beforethisone + sub ax,bx +beforethisone: mov [es:di+2],ax + add di,6 + loop shuffleadsdown + ret + + endp + + + + +Deleteextext proc near + + mov di,extextdat + mov ah,0 + add ax,ax + add di,ax + mov ax,[es:di] + mov si,ax + mov di,ax + add si,extext + add di,extext + mov ax,0 +findlenextext: mov cl,[es:si] + inc ax + inc si + cmp cl,0 + jnz findlenextext + + mov cx,extextlen + mov bx,si + sub bx,extext + push bx ax + sub cx,bx + rep movsb + pop bx + sub extextpos,bx + + pop si + mov cx,numexobjects + mov di,extextdat +shuffletextads: mov ax,[es:di] + cmp ax,si + jc beforethistext + sub ax,bx +beforethistext: mov [es:di],ax + add di,2 + loop shuffletextads + ret + + endp + + + + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/print.asm b/devtools/tasmrecover/dreamweb/print.asm new file mode 100644 index 0000000000..e1c2d451c9 --- /dev/null +++ b/devtools/tasmrecover/dreamweb/print.asm @@ -0,0 +1,591 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +Printchar proc near + + cmp al,255 + jz ignoreit + push si bx di + if foreign + sub bx,3 + endif + push ax + sub al,32 ;"A" + mov ah,0 + add ax,charshift + call showframe + pop ax di bx si + cmp kerning,0 + jnz nokern + call kernchars +nokern: push cx + mov ch,0 + add di,cx + pop cx + ;dec di +ignoreit: ret + + endp + + + + + + + + + + +Kernchars proc near + + ;sub al,13 + cmp al,"a" + jz iskern + cmp al,"u" + jz iskern + ret +iskern: cmp ah,"n" + jz kernit + cmp ah,"t" + jz kernit + cmp ah,"r" + jz kernit + cmp ah,"i" + jz kernit + cmp ah,"l" + jz kernit + ret +kernit: dec cl + ret + + endp + + + + + + +;------------------------------------------------Proportional text printing---- + + +;Memprint proc near +; +; call usecharset1 +; +; push ax bx cx dx es ds si di +; call deltextline +; pop di si ds es dx cx bx ax +; +; pop si +; push cs +; pop es +; inc si +; mov ds,currentset +; mov di,textaddressx +; mov bx,textaddressy +; mov dl,textlen +; mov al,0 +; mov ah,0 +; call printdirect +; push si + +; mov newtextline,1 +; ret + +; endp + + + + + + +;------------------------------------------------Proportional text printing---- + +;Print proc near +; +; pop si +; mov bx,[cs:si+2] +; mov di,[cs:si+0] +; mov dl,[cs:si+4] +; add si,6 +; mov ds,currentset +; +;printloop2: push bx di dx +; push es cs +; pop es +; call getnumber +; pop es +; mov ch,0 +;printloop1: mov ax,[cs:si] +; inc si +; cmp al,0 +; jz finishprint +; push cx es +; call modifychar +; call printchar +; pop es cx +; loop printloop1 +; pop dx di bx +; add bx,linespacing +; jmp printloop2 + +;finishprint: pop dx di bx + ; push si + ; ret + + ; endp + + + + + + + + + +Printslow proc near + + mov pointerframe,1 + mov pointermode,3 + mov ds,charset1 +printloopslow6: push bx di dx + call getnumber + + mov ch,0 +printloopslow5: push cx si es + mov ax,[es:si] + push bx cx es si ds + if foreign + call modifychar + endif + call printboth + pop ds si es cx bx + mov ax,[es:si+1] + inc si + cmp al,0 + jz finishslow + cmp al,":" + jz finishslow + cmp cl,1 + jz afterslow + push di ds bx cx es si + if foreign + call modifychar + endif + mov charshift,91 + call printboth + mov charshift,0 + pop si es cx bx ds di + call waitframes + cmp ax,0 + jz keepgoing + cmp ax,oldbutton + jnz finishslow2 +keepgoing: call waitframes +noslow: cmp ax,0 + jz afterslow + cmp ax,oldbutton + jnz finishslow2 ;used to finish early +afterslow: pop es si cx + inc si + loop printloopslow5 + + pop dx di bx + add bx,10 + jmp printloopslow6 + +finishslow: pop es si cx dx di bx + mov al,0 + ret + +finishslow2: pop es si cx dx di bx + mov al,1 + ret + + endp + + + +Waitframes proc near + + push di bx es si ds + call readmouse + call showpointer + call vsync + call dumppointer + call delpointer + mov ax,mousebutton + pop ds si es bx di + ret + + endp + + + + +Printboth proc near + + push ax cx bx + push di + call printchar + pop ax + push di + mov di,ax + call multidump + pop di + pop bx cx ax + ret + + endp + + + + + + +Printdirect proc near + + mov lastxpos,di + mov ds,currentset +printloop6: push bx di dx + call getnumber + mov ch,0 +printloop5: mov ax,[es:si] + inc si + cmp al,0 + jz finishdirct + cmp al,":" + jz finishdirct + push cx es + if foreign + call modifychar + endif + call printchar + mov lastxpos,di + pop es cx + loop printloop5 + pop dx di bx + add bx,linespacing + jmp printloop6 + +finishdirct: pop dx di bx + ret + + endp + + + + + + + + + + + + + + +Monprint proc near + + mov kerning,1 + mov si,bx + mov dl,166 + mov di,monadx + mov bx,monady + mov ds,tempcharset + +printloop8: push bx di dx + call getnumber + mov ch,0 +printloop7: mov al,[es:si] + inc si + + cmp al,":" + jz finishmon2 + cmp al,0 + jz finishmon + cmp al,34 + jz finishmon + cmp al,"=" + jz finishmon + cmp al,"%" + jnz nottrigger + mov ah,[es:si] + inc si + inc si + jmp finishmon +nottrigger: push cx es + if foreign + call modifychar + endif + call printchar + mov curslocx,di + mov curslocy,bx + mov maintimer,1 + call printcurs + + call vsync + push si dx ds es bx di + call lockmon + pop di bx es ds dx si + call delcurs + pop es cx + loop printloop7 + +finishmon2: pop dx di bx + call scrollmonitor + mov curslocx,di + jmp printloop8 + +finishmon: pop dx di bx + cmp al,"%" + jnz nottrigger2 + mov lasttrigger,ah +nottrigger2: mov curslocx,di + call scrollmonitor + mov bx,si + mov kerning,0 + ret + + endp + + + + + + + + + +Getnumber proc near + + mov cx,0 + push si bx di ds es + mov di,si + +wordloop: push cx dx + call getnextword + pop dx cx + cmp al,1 + jz endoftext + mov al,cl + mov ah,0 + push bx + mov bh,0 + add ax,bx + pop bx + sub ax,10 + mov dh,0 + cmp ax,dx + jnc gotoverend + add cl,bl + add ch,bh + jmp wordloop + +gotoverend: mov al,dl + and al,1 + jz notcentre + push cx + mov al,dl + and al,11111110b + mov ah,0 + mov ch,0 + sub ax,cx + add ax,20 + shr ax,1 + pop cx + pop es ds di bx si + add di,ax + mov cl,ch + ret +notcentre: pop es ds di bx si + mov cl,ch + ret + + + +endoftext: mov al,cl + mov ah,0 + push bx + mov bh,0 + add ax,bx + pop bx + sub ax,10 + mov dh,0 + cmp ax,dx + jnc gotoverend2 + add cl,bl + add ch,bh + +gotoverend2: mov al,dl + and al,1 + jz notcent2 + push cx + mov al,dl + and al,11111110b + add al,2 + mov ah,0 + mov ch,0 + add ax,20 + sub ax,cx + shr ax,1 + pop cx + pop es ds di bx si + add di,ax + mov cl,ch + ret +notcent2: pop es ds di bx si + mov cl,ch + ret + + endp + + + + + +Getnextword proc near + + mov bx,0 +getloop: mov ax,[es:di] + inc di + inc bh + cmp al,":" + jz endall + cmp al,0 + jz endall + cmp al,32 + jz endword + if foreign + call modifychar + endif + cmp al,255 + jz getloop + push ax + sub al,32 ;"A" + mov ah,0 + add ax,charshift + add ax,ax + mov si,ax + add ax,ax + add si,ax + mov cl,[si+0] + pop ax + call kernchars + add bl,cl + ;dec bl + jmp getloop + +endword: add bl,6 + mov al,0 + ret + +endall: add bl,6 + mov al,1 + ret + + endp + + + + + + if german + +Modifychar proc near + + cmp al,128 + jc nomod + cmp al,129 + jnz not129 + mov al,"Z"+3 + ret +not129: cmp al,132 + jnz not132 + mov al,"Z"+1 + ret +not132: cmp al,142 + jnz not142 + mov al,"Z"+4 + ret +not142: cmp al,154 + jnz not154 + mov al,"Z"+6 + ret +not154: cmp al,225 + jnz not225 + mov al,"A"-1 + ret +not225: cmp al,153 + jnz not153 + mov al,"Z"+5 + ret +not153: cmp al,148 + jnz not148 + mov al,"Z"+2 + ret +not148: ret + +nomod: ret + + endp + + endif + + + + + if spanish + +Modifychar proc near + + cmp al,128 + jc nomod + cmp al,160 + jnz not160 + mov al,"Z"+1 + ret +not160: cmp al,130 + jnz not130 + mov al,"Z"+2 + ret +not130: cmp al,161 + jnz not161 + mov al,"Z"+3 + ret +not161: cmp al,162 + jnz not162 + mov al,"Z"+4 + ret +not162: cmp al,163 + jnz not163 + mov al,"Z"+5 + ret +not163: cmp al,164 + jnz not164 + mov al,"Z"+6 + ret +not164: cmp al,165 + jnz not165 + mov al,","-1 + ret +not165: cmp al,168 + jnz not168 + mov al,"A"-1 + ret +not168: cmp al,173 + jnz not173 + mov al,"A"-4 + ret +not173: cmp al,129 + jnz not129 + mov al,"A"-5 +not129: ret + +nomod: ret + + endp + + endif +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/saveload.asm b/devtools/tasmrecover/dreamweb/saveload.asm new file mode 100644 index 0000000000..f10d87149d --- /dev/null +++ b/devtools/tasmrecover/dreamweb/saveload.asm @@ -0,0 +1,1495 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text + + +Zoomonoff proc near + + cmp watchingtime,0 + jnz blank + cmp pointermode,2 + jz blank + cmp commandtype,222 + jz alreadyonoff + mov commandtype,222 + mov al,39 + call commandonly +alreadyonoff: mov ax,mousebutton + cmp ax,oldbutton + jz nozoomonoff + and ax,1 + jnz dozoomonoff +nozoomonoff: ret + +dozoomonoff: mov al,zoomon + xor al,1 + mov zoomon,al + + call createpanel + mov newobs,0 + call drawfloor + call printsprites + call reelsonscreen + call showicon + call getunderzoom + call undertextline + mov al,39 + call commandonly + call readmouse + call worktoscreenm + ret + + endp + + + + + + + + + + + + +Saveload proc near + + if demo + call dosreturn + ret + else + cmp watchingtime,0 + jnz blank + cmp pointermode,2 + jz blank + cmp commandtype,253 + jz alreadyops + mov commandtype,253 + mov al,43 + call commandonly +alreadyops: mov ax,mousebutton + cmp ax,oldbutton + jz noops + and ax,1 + jz noops + call dosaveload +noops: ret + endif + + endp + + + + + + + + + + + +Dosaveload proc near + + mov pointerframe,0 + mov textaddressx,70 + mov textaddressy,182-8 + mov textlen,181 + mov manisoffscreen,1 + call clearwork + call createpanel2 + call undertextline + call getridofall ;reels + call loadsavebox + call showopbox + call showmainops + call worktoscreen ;2 + jmp donefirstops + +restartops: call showopbox + call showmainops + call worktoscreenm +donefirstops: mov getback,0 +waitops: call readmouse + call showpointer + call vsync + call dumppointer + call dumptextline + call delpointer + mov bx,offset cs:opslist + call checkcoords + cmp getback,0 + jz waitops + cmp getback,2 + jz restartops + mov textaddressx,13 + mov textaddressy,182 + mov textlen,240 + cmp getback,4 + jz justret + call getridoftemp + call restoreall ;reels + call redrawmainscrn + call worktoscreenm + mov commandtype,200 +justret: mov manisoffscreen,0 + ret + +opslist: dw opsx+59,opsx+114,opsy+30,opsy+76,getbackfromops + dw opsx+10,opsx+77,opsy+10,opsy+59,dosreturn + dw opsx+128,opsx+190,opsy+16,opsy+100,discops + dw 0,320,0,200,blank + dw 0ffffh + + + endp + + + +Getbackfromops proc near + + cmp mandead,2 + jz opsblock1 + call getback1 + ret +opsblock1: call blank + ret + + endp + + + + + +Showmainops proc near + + mov ds,tempgraphics + mov di,opsx+10 + mov bx,opsy+10 + mov al,8 + mov ah,0 + call showframe + mov ds,tempgraphics + mov di,opsx+59 + mov bx,opsy+30 + mov al,7 + mov ah,0 + call showframe + mov ds,tempgraphics + mov di,opsx+128+4 + mov bx,opsy+12 + mov al,1 + mov ah,0 + call showframe + ret + + endp + + + + +Showdiscops proc near + + mov ds,tempgraphics + mov di,opsx+128+4 + mov bx,opsy+12 + mov al,1 + mov ah,0 + call showframe + mov ds,tempgraphics + mov di,opsx+10 + mov bx,opsy+10 + mov al,9 + mov ah,0 + call showframe + mov ds,tempgraphics + mov di,opsx+59 + mov bx,opsy+30 + mov al,10 + mov ah,0 + call showframe + mov ds,tempgraphics + mov di,opsx+176+2 + mov bx,opsy+60-4 + mov al,5 + mov ah,0 + call showframe + ret + + endp + + + + +Loadsavebox proc near + + mov dx,offset cs:icongraphics8 + call loadintotemp + ret + + endp + + + + + + + + +Loadgame proc near + + cmp commandtype,246 + jz alreadyload + mov commandtype,246 + mov al,41 + call commandonly +alreadyload: mov ax,mousebutton + cmp ax,oldbutton + jz noload + cmp ax,1 + jz doload +noload: ret + +doload: mov loadingorsave,1 + call showopbox + call showloadops + mov currentslot,0 + call showslots + call shownames + mov pointerframe,0 + call worktoscreenm + call namestoold + mov getback,0 + +loadops: call delpointer + call readmouse + call showpointer + call vsync + call dumppointer + call dumptextline + + mov bx,offset cs:loadlist + call checkcoords + cmp getback,0 + jz loadops + cmp getback,2 + jz quitloaded + call getridoftemp + ;call clearnoreels + mov dx,seg madeuproomdat + mov es,dx + mov bx,offset es:madeuproomdat + call startloading + call loadroomssample + mov roomloaded,1 + mov newlocation,255 + call clearsprites + call initman + call initrain + mov textaddressx,13 + mov textaddressy,182 + mov textlen,240 + call startup + call worktoscreen + mov getback,4 +quitloaded: ret + +loadlist: dw opsx+176,opsx+192,opsy+60,opsy+76,getbacktoops + dw opsx+128,opsx+190,opsy+12,opsy+100,actualload + dw opsx+2,opsx+92,opsy+4,opsy+81,selectslot + dw 0,320,0,200,blank + dw 0ffffh + + endp + + + + + + + +Getbacktoops proc near + + cmp commandtype,201 + jz alreadygetops + mov commandtype,201 + mov al,42 + call commandonly +alreadygetops: mov ax,mousebutton + cmp ax,oldbutton + jz nogetbackops + and ax,1 + jnz dogetbackops +nogetbackops: ret + +dogetbackops: call oldtonames + mov getback,2 + ret + + endp + + + + + + + +Discops proc near + + cmp commandtype,249 + jz alreadydiscops + mov commandtype,249 + mov al,43 + call commandonly +alreadydiscops: mov ax,mousebutton + cmp ax,oldbutton + jz nodiscops + and ax,1 + jnz dodiscops +nodiscops: ret +dodiscops: call scanfornames + mov loadingorsave,2 + call showopbox + call showdiscops + mov currentslot,0 + call worktoscreenm + + mov getback,0 +discopsloop: call delpointer + call readmouse + call showpointer + call vsync + call dumppointer + call dumptextline + mov bx,offset cs:discopslist + call checkcoords + cmp getback,0 + jz discopsloop + ret + +discopslist: dw opsx+59,opsx+114,opsy+30,opsy+76,loadgame + dw opsx+10,opsx+79,opsy+10,opsy+59,savegame + dw opsx+176,opsx+192,opsy+60,opsy+76,getbacktoops + dw 0,320,0,200,blank + dw 0ffffh + + endp + + + + + + + + +Savegame proc near + + cmp mandead,2 + jnz cansaveok + call blank + ret + +cansaveok: cmp commandtype,247 + jz alreadysave + mov commandtype,247 + mov al,44 + call commandonly +alreadysave: mov ax,mousebutton + and ax,1 + jnz dosave + ret +dosave: mov loadingorsave,2 + call showopbox + call showsaveops + mov currentslot,0 + call showslots + call shownames + call worktoscreenm + + call namestoold + mov bufferin,0 + mov bufferout,0 + + mov getback,0 + +saveops: call delpointer + call checkinput + call readmouse + call showpointer + call vsync + call dumppointer + call dumptextline + + mov bx,offset cs:savelist + call checkcoords + cmp getback,0 + jz saveops + ret + +savelist: dw opsx+176,opsx+192,opsy+60,opsy+76,getbacktoops + dw opsx+128,opsx+190,opsy+12,opsy+100,actualsave + dw opsx+2,opsx+92,opsy+4,opsy+81,selectslot + dw 0,320,0,200,blank + dw 0ffffh + + endp + + + + + +Actualsave proc near + + cmp commandtype,222 + jz alreadyactsave + mov commandtype,222 + mov al,44 + call commandonly +alreadyactsave: mov ax,mousebutton + and ax,1 + jz noactsave + + mov dx,seg savenames + mov ds,dx + mov si,offset savenames + mov al,currentslot + mov ah,0 + mov cx,17 + mul cx + add si,ax + inc si + cmp byte ptr [si],0 + jz noactsave + + mov al,location + mov ah,0 + mov cx,32 + mul cx + push cs + pop ds + mov si,offset cs:roomdata + add si,ax + + mov di,offset cs:madeuproomdat + mov bx,di + push cs + pop es + mov cx,16 + rep movsw + + mov al,roomssample + mov [es:bx+13],al + mov al,mapx + mov [es:bx+15],al + mov al,mapy + mov [es:bx+16],al + mov al,liftflag + mov [es:bx+20],al + mov al,manspath + mov [es:bx+21],al + mov al,facing + mov [es:bx+22],al + mov al,255 + mov [es:bx+27],al + call saveposition + call getridoftemp + call restoreall ;reels + mov textaddressx,13 + mov textaddressy,182 + mov textlen,240 + call redrawmainscrn + call worktoscreenm + mov getback,4 +noactsave: ret + + endp + + + + +Actualload proc near + + cmp commandtype,221 + jz alreadyactload + mov commandtype,221 + mov al,41 + call commandonly +alreadyactload: mov ax,mousebutton + cmp ax,oldbutton + jz notactload + cmp ax,1 + jnz notactload + + mov dx,seg savenames + mov ds,dx + mov si,offset savenames + mov al,currentslot + mov ah,0 + mov cx,17 + mul cx + add si,ax + inc si + cmp byte ptr [si],0 + jz notactload + call loadposition + mov getback,1 +notactload: ret + + endp + + + + +Selectslot2 proc near + + cmp mousebutton,0 + jz noselslot2 + mov loadingorsave,2 +noselslot2: call selectslot + ret + + endp + + + + + +Checkinput proc near + + cmp loadingorsave,3 + jz nokeypress + call readkey + mov al,currentkey + cmp al,0 + jz nokeypress + cmp al,13 + jnz notret + mov loadingorsave,3 + jmp afterkey +notret: cmp al,8 + jnz nodel2 + cmp cursorpos,0 + jz nokeypress + call getnamepos + dec cursorpos + mov byte ptr [es:bx],0 + mov byte ptr [es:bx+1],1 + jmp afterkey +nodel2: ;cmp al,32 + ;jz spacepress + ;cmp al,"A" + ;jc nokeypress + ;cmp al,"Z"+1 + ;jnc nokeypress +spacepress: cmp cursorpos,14 + jz nokeypress + call getnamepos + inc cursorpos + mov al,currentkey + mov [es:bx+1],al + mov byte ptr [es:bx+2],0 + mov byte ptr [es:bx+3],1 + jmp afterkey + +nokeypress: ret + +afterkey: call showopbox + call shownames + call showslots + call showsaveops + call worktoscreenm + ret + + endp + + + + + +Getnamepos proc near + + mov al,currentslot + mov ah,0 + mov cx,17 + mul cx + mov dx,seg savenames + mov es,dx + mov bx,offset es:savenames + add bx,ax + mov al,cursorpos + mov ah,0 + add bx,ax + ret + + endp + + + + + + + + +Showopbox proc near + + mov ds,tempgraphics + mov di,opsx + mov bx,opsy + mov al,0 + mov ah,0 + call showframe + + mov ds,tempgraphics + mov di,opsx + mov bx,opsy+55 + mov al,4 + mov ah,0 + call showframe + ret + + endp + + + + + + + + +Showloadops proc near + + mov ds,tempgraphics + mov di,opsx+128+4 + mov bx,opsy+12 + mov al,1 + mov ah,0 + call showframe + mov ds,tempgraphics + mov di,opsx+176+2 + mov bx,opsy+60-4 + mov al,5 + mov ah,0 + call showframe + + mov di,opsx+104 + mov bx,opsy+14 + mov al,55 + mov dl,101 + call printmessage + ret + + endp + + + + +Showsaveops proc near + + mov ds,tempgraphics + mov di,opsx+128+4 + mov bx,opsy+12 + mov al,1 + mov ah,0 + call showframe + mov ds,tempgraphics + mov di,opsx+176+2 + mov bx,opsy+60-4 + mov al,5 + mov ah,0 + call showframe + + mov di,opsx+104 + mov bx,opsy+14 + mov al,54 + mov dl,101 + call printmessage + ret + + endp + + + + + +Selectslot proc near + + cmp commandtype,244 + jz alreadysel + mov commandtype,244 + mov al,45 + call commandonly +alreadysel: mov ax,mousebutton + cmp ax,1 + jnz noselslot + cmp ax,oldbutton + jz noselslot + + cmp loadingorsave,3 + jnz notnocurs + dec loadingorsave +notnocurs: call oldtonames + mov ax,mousey + sub ax,opsy+4 + mov cl,-1 +getslotnum: inc cl + sub ax,11 + jnc getslotnum + mov currentslot,cl + call delpointer + call showopbox + call showslots + call shownames + cmp loadingorsave,1 + jz isloadmode + call showsaveops + call readmouse + call showpointer + call worktoscreen + call delpointer + ret +isloadmode: call showloadops + call readmouse + call showpointer + call worktoscreen + call delpointer + ret + +noselslot: ret + + endp + + + + + + + + + + +Showslots proc near + + mov di,opsx+7 + mov bx,opsy+8 + mov al,2 + mov ds,tempgraphics + mov ah,0 + call showframe + + mov di,opsx+10 + mov bx,opsy+11 + mov cl,0 +slotloop: push cx di bx + + cmp cl,currentslot + jnz nomatchslot + mov al,3 + mov ds,tempgraphics + mov ah,0 + call showframe + +nomatchslot: pop bx di cx + add bx,10 + inc cl + cmp cl,7 + jnz slotloop + ret + + endp + + + + + +Shownames proc near + + mov dx,seg savenames + mov es,dx + mov si,offset es:savenames+1 + mov di,opsx+21 + mov bx,opsy+10 + mov cl,0 + +shownameloop: push cx di es bx si + mov al,4 + cmp cl,currentslot + jnz nomatchslot2 + + cmp loadingorsave,2 + jnz loadmode + + mov dx,si + mov cx,15 + add si,15 +zerostill: dec si + dec cl + cmp byte ptr [es:si],1 + jnz foundcharacter + jmp zerostill +foundcharacter: mov cursorpos,cl + mov byte ptr [es:si],"/" + mov byte ptr [es:si+1],0 + push si + mov si,dx + mov dl,200 + mov ah,0 + call printdirect + pop si + mov byte ptr [es:si],0 + mov byte ptr [es:si+1],1 + jmp afterprintname + +loadmode: mov al,0 + mov dl,200 + mov ah,0 + mov charshift,91 + call printdirect + mov charshift,0 + jmp afterprintname + +nomatchslot2: mov dl,200 + mov ah,0 + call printdirect + +afterprintname: pop si bx es di cx + add si,17 + add bx,10 + inc cl + cmp cl,7 + jnz shownameloop + ret + + endp + + + + + + + + + + + + + + + + + + +Dosreturn proc near + + cmp commandtype,250 + jz alreadydos + mov commandtype,250 + mov al,46 + call commandonly +alreadydos: mov ax,mousebutton + and ax,1 + jz nodos + +quickquit2: call soundend + call removeemm + +quickquit: if recording + call saverec + mov bx,rechandle + mov ah,3eh + int 21h + endif + if playback + mov bx,rechandle + mov ah,3eh + int 21h + endif + + call resetkeyboard + mov bl,31h + mov al,0 + mov ah,12h + int 10h + call vsync + + mov ah,0 + mov al,3 + int 10h + call error + mov ax,4c00h + int 21h + ret + + endp + + + +Error proc near + + cmp gameerror,1 + jz error1 + cmp gameerror,2 + jz error2 + cmp gameerror,3 + jz error3 + cmp gameerror,4 + jz error4 + cmp gameerror,5 + jz error5 + cmp gameerror,6 + jz error6 + cmp gameerror,7 + jz error7 + cmp gameerror,8 + jz error8 + ret + +error1: mov dx,offset cs:gameerror1 + jmp generalerror + +error2: mov ax,soundbaseadd + sub ax,200h + mov cl,4 + shr ax,cl + add al,"0" + mov bx,offset cs:error2patch + mov [cs:bx+1],al + mov dx,offset cs:gameerror2 + call generalerror + mov dx,offset cs:gameinfo + jmp generalerror + +error3: mov dx,offset cs:gameerror3 + jmp generalerror + +error4: mov dx,offset cs:gameerror4 + jmp generalerror + +error5: mov dx,offset cs:gameerror5 + jmp generalerror + +error6: mov al,soundint + add al,"0" + mov bx,offset cs:error6patch + mov [cs:bx],al + mov dx,offset cs:gameerror6 + call generalerror + mov dx,offset cs:gameinfo + jmp generalerror + +error7: mov dx,offset cs:gameerror7 + jmp generalerror + +error8: mov dx,offset cs:gameerror8 + jmp generalerror + +generalerror: mov ah,9h + push cs + pop ds + int 21h + ret + +nodos: ret + +gameerror1: db 13,10,13,10 + db "Dreamweb has an Error:",13,10 + db "Unable to allocate Expanded Memory." + db 13,10,13,10 + db 24h +gameerror2: db 13,10,13,10 + db "Dreamweb has an Error:",13,10 + db "Sound Blaster card not found at address " +error2patch: db "220 Hex." + db 13,10,13,10 + db 24h +gameerror3: db 13,10,13,10 + db "Dreamweb has an Error:",13,10 + db "Out of Base Memory." + db 13,10,13,10 + db 24h +gameerror4: db 13,10,13,10 + db "Dreamweb has an Error:",13,10 + db "Memory Deallocation problem." + db 13,10,13,10 + db 24h +gameerror5: db 13,10,13,10 + db "Dreamweb has an Error:",13,10 + db "At least 590K of base memory is required." + db 13,10,13,10 + db 24h +gameerror6: db 13,10,13,10 + db "Dreamweb has an Error:",13,10 + db "Sound Blaster not found on interupt " +error6patch: db "0" + db 13,10,13,10 + db 24h +gameerror7: db 13,10,13,10 + db "Dreamweb has an Error:",13,10 + db "Unable to select EMM page." + db 13,10,13,10 + db 24h +gameerror8: db 13,10,13,10 + db "Dreamweb has an Error:",13,10 + db "File not found.c" +error8patch: db 13,10,13,10 + db 24h + +gameinfo: db "Dreamweb looks for Sound Blaster information in",13,10 + db "the BLASTER environment variable (in your AUTOEXEC.BAT)",13,10 + db 13,10,"If this is not found then IRQ 7, DMA channel 1 and base",13,10 + db "address 220h are assumed.",13,10,13,10 + + db "To alter any or all of these settings you can specify them",13,10 + db "on the command line. For example:",13,10,13,10 + db "Type DREAMWEB I7 A220 D1 to run Dreamweb on IRQ 7, DMA",13,10 + db " channel 1 and base address 220h" + db 13,10 + db " DREAMWEB I5 to run Dreamweb on IRQ 5 and",13,10 + db " default address of 220h, DMA 1",13,10 + db 13,10 + db 24h + +endgametext1: db 13,10,13,10 + db "Try the Dreamweb CD in your stereo....",13,10 + db 13,10,13,10 + db 24h + + endp + + + + + + + + +Namestoold proc near + + push cs + pop ds + mov si,offset cs:savenames + mov di,zoomspace + mov es,buffers + mov cx,17*4 + rep movsb + ret + + endp + + + +Oldtonames proc near + + push cs + pop es + mov di,offset cs:savenames + mov si,zoomspace + mov ds,buffers + mov cx,17*4 + rep movsb + ret + + endp + + + +Savefilewrite proc near + mov bx,handle + mov ah,40h + int 21h + ret + endp + +Savefileread proc near + mov bx,handle + mov ah,3fh + int 21h + ret + endp + +Saveposition proc near + + call makeheader + + mov al,currentslot + mov ah,0 + push ax + mov cx,13 + mul cx + mov dx,seg savefiles + mov ds,dx + mov dx,offset savefiles + add dx,ax + call openforsave + + mov dx,seg fileheader + mov ds,dx + mov dx,offset fileheader + mov cx,headerlen + call savefilewrite + mov dx,seg fileheader + mov es,dx + mov di,offset es:filedata + + pop ax + mov cx,17 + mul cx + mov dx,seg savenames + mov ds,dx + mov dx,offset savenames + add dx,ax + call saveseg + + mov dx,seg startvars + mov ds,dx + mov dx,offset startvars + call saveseg + + mov ds,extras + mov dx,exframedata + call saveseg + + mov ds,buffers + mov dx,listofchanges + call saveseg + + mov dx,seg madeuproomdat + mov ds,dx + mov dx,offset madeuproomdat + call saveseg + + mov dx,seg reelroutines + mov ds,dx + mov dx,offset reelroutines + call saveseg + +fquit: call closefile + ret + + endp + + + + + + +Loadposition proc near + + mov timecount,0 + call clearchanges + + mov al,currentslot + mov ah,0 + push ax + mov cx,13 + mul cx + mov dx,seg savefiles + mov ds,dx + mov dx,offset savefiles + add dx,ax + if cd + call openfilefromc + else + call openfile + endif + + push cs + pop ds + mov dx,offset cs:fileheader + mov cx,headerlen + call savefileread + push cs + pop es + mov di,offset cs:filedata + + pop ax + mov cx,17 + mul cx + mov dx,seg savenames + mov ds,dx + mov dx,offset savenames + add dx,ax + call loadseg + + mov dx,seg startvars + mov ds,dx + mov dx,offset startvars + call loadseg + + mov ds,extras + mov dx,exframedata + call loadseg + + mov ds,buffers + mov dx,listofchanges + call loadseg + + mov dx,seg madeuproomdat + mov ds,dx + mov dx,offset madeuproomdat + call loadseg + + push cs + pop ds + mov dx,offset cs:reelroutines + call loadseg + + call closefile + ret + + endp + + + + + +Loadseg proc near + + mov bx,handle + mov ax,[es:di] + add di,2 + push di + push es + mov cx,ax + mov ah,3fh + int 21h + pop es + pop di + ret + + endp + + + + + +Makeheader proc near + + mov dx,seg fileheader + mov es,dx + mov di,offset es:filedata + mov ax,17 + call storeit + mov ax,lengthofvars + call storeit + mov ax,lengthofextra + call storeit + mov ax,numchanges*4 + call storeit + mov ax,48 + call storeit + mov ax,lenofreelrouts + call storeit + ret + + endp + + + + + +Storeit proc near + + cmp ax,0 + jnz isntblank + inc ax +isntblank: stosw + ret + + endp + + + + +Saveseg proc near + + mov cx,[es:di] + add di,2 + push di es + mov bx,handle + mov ah,40h + int 21h + pop es di + ret + + endp + + + +Findlen proc near + + dec bx + add bx,ax +nextone: cmp cl,[bx] + jnz foundlen + dec bx + dec ax + cmp ax,0 + jnz nextone +foundlen: ret + + endp + + + + + +Scanfornames proc near + + mov dx,seg savenames + mov es,dx + mov di,offset es:savenames + mov dx,seg savefiles + mov ds,dx + mov dx,offset savefiles + mov cx,7 +scanloop: push es ds di dx cx + + if cd + call openfilefromc + else + call openfilenocheck + endif + jc notexist + pop cx + inc ch + push cx + push di es + mov dx,seg fileheader + mov ds,dx + mov dx,offset fileheader + mov cx,headerlen + call savefileread + mov dx,seg fileheader + mov es,dx + mov di,offset es:filedata + pop ds dx + call loadseg + mov bx,handle + call closefile + +notexist: pop cx dx di ds es + add dx,13 + add di,17 + dec cl + jnz scanloop + mov al,ch + ret + + endp + + + + + +Decide proc near + + call setmode + call loadpalfromiff + call clearpalette + mov pointermode,0 + mov watchingtime,0 + mov pointerframe,0 + mov textaddressx,70 + mov textaddressy,182-8 + mov textlen,181 + mov manisoffscreen,1 + call loadsavebox + call showdecisions + call worktoscreen + call fadescreenup + mov getback,0 + +waitdecide: call readmouse + call showpointer + call vsync + call dumppointer + call dumptextline + call delpointer + mov bx,offset cs:decidelist + call checkcoords + cmp getback,0 + jz waitdecide + cmp getback,4 + jz hasloadedroom + call getridoftemp +hasloadedroom: mov textaddressx,13 + mov textaddressy,182 + mov textlen,240 + ret + +decidelist: dw opsx+69,opsx+124,opsy+30,opsy+76,newgame + dw opsx+20,opsx+87,opsy+10,opsy+59,dosreturn + dw opsx+123,opsx+190,opsy+10,opsy+59,loadold + dw 0,320,0,200,blank + dw 0ffffh + + endp + + + + + + +Showdecisions proc near + + call createpanel2 + call showopbox + mov ds,tempgraphics + mov di,opsx+17 + mov bx,opsy+13 + mov al,6 + mov ah,0 + call showframe + call undertextline + ret + + endp + + + + + +Newgame proc near + + cmp commandtype,251 + jz alreadynewgame + mov commandtype,251 + mov al,47 + call commandonly +alreadynewgame: mov ax,mousebutton + cmp ax,1 + jnz nonewgame + mov getback,3 +nonewgame: ret + + endp + + + + + + + +Loadold proc near + + cmp commandtype,252 + jz alreadyloadold + mov commandtype,252 + mov al,48 + call commandonly +alreadyloadold: mov ax,mousebutton + and ax,1 + jz noloadold + call doload + cmp getback,4 + jz noloadold + call showdecisions + call worktoscreenm + mov getback,0 +noloadold: ret + + endp + + + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/sblaster.asm b/devtools/tasmrecover/dreamweb/sblaster.asm new file mode 100644 index 0000000000..9eb9afc08f --- /dev/null +++ b/devtools/tasmrecover/dreamweb/sblaster.asm @@ -0,0 +1,1293 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +; Creative Reality Sound Blaster Drivers . (C) 1994 Creative Reality + +; Very sparsly commented. + + + +;These drivers are not stand alone. We had them as an integral part of the +;game. +; +;Put interupt no. into SOUNDINT, base address (eg 220h) into SOUNDBASEADD. +;If interupt is 255 then no card is assumed. +; +;Call soundstartup at beginning of program to test card and initialise. +; +;This code assumes that EMS has been initialised +;Emm page frame is in variable EMMPAGEFRAME. Handle is in EMMHANDLE. +; +;Call loadsample with a filename in CS:DX (ie. in the code somewhere) +; +;To play a sample call playchannel0 or playchannel1 with sound no. in al. +; +;Call endsample to restore interupts and halt sound. +; +; + + + + +;------------------------------------------- Initial sound set up and end --- + +Loadspeech proc near + + cmp soundint,255 + jz dontbother8 + + call cancelch1 + + mov speechloaded,0 + call createname + + mov speechlength,0 + mov dx,offset cs:speechfilename + call openfilenocheck + jc dontbother8 + + mov bx,speechemmpage + +moreloadspeech: push dx bx + + push es di bx + mov al,2 + mov dx,emmhandle + mov ah,44h + int 67h + cmp ah,0 + jnz emmerror + mov ds,emmpageframe + pop bx di es + inc bx + push es di + mov al,3 + mov dx,emmhandle + mov ah,44h + int 67h + cmp ah,0 + jnz emmerror + mov ds,emmpageframe + mov es,emmpageframe + mov di,8000h + mov cx,4000h + mov ax,0 + rep stosw + pop di es + + mov cx,8000h + mov dx,8000h + call readfromfile + mov cl,11 + shr ax,cl + add speechlength,ax + pop bx dx + add bx,2 + cmp ax,0 + jnz moreloadspeech + call closefile + + mov es,sounddata2 + mov di,50*6 + mov ax,speechemmpage + mov [es:di],al + mov ax,0 + mov [es:di+1],ax + mov ax,speechlength + mov [es:di+3],ax + mov speechloaded,1 +dontbother8: ret + +speechfilename: db "SPEECH\" +speechfile: db "R24C0005.RAW",0 + + endp + + + +Createname proc near + + push ax + mov di,offset cs:speechfile + mov byte ptr [cs:di+0],dl ;"R" + mov [cs:di+3],cl + + mov al,dh ;reallocation + mov ah,"0"-1 +findten: inc ah + sub al,10 + jnc findten + mov [cs:di+1],ah + add al,10+"0" + mov [cs:di+2],al + pop ax + + mov cl,"0"-1 +thousandsc: inc cl + sub ax,1000 + jnc thousandsc + add ax,1000 + mov [cs:di+4],cl + mov cl,"0"-1 +hundredsc: inc cl + sub ax,100 + jnc hundredsc + add ax,100 + mov [cs:di+5],cl + mov cl,"0"-1 +tensc: inc cl + sub ax,10 + jnc tensc + add ax,10 + mov [cs:di+6],cl + add al,"0" + mov [cs:di+7],al + ret + + endp + + + + + + +Loadsample proc near + + cmp soundint,255 + jz dontbother + + call openfile + call readheader + mov bx,[es:di] + push es di bx + mov ds,sounddata + pop cx + mov dx,0 + call readfromfile + pop di es + + add di,2 + mov bx,0 + mov dx,[es:di] + add dx,1 + shr dx,1 + + mov soundemmpage,0 + +moreload: push dx bx + + push es di bx + mov al,2 + mov dx,emmhandle + mov ah,44h + int 67h + cmp ah,0 + jnz emmerror + mov ds,emmpageframe + pop bx di es + inc bx + push es di + mov al,3 + mov dx,emmhandle + mov ah,44h + int 67h + cmp ah,0 + jnz emmerror + mov ds,emmpageframe + pop di es + + mov cx,8000h + mov dx,8000h + call readfromfile + pop bx dx + add bx,2 + add soundemmpage,2 + dec dx + jnz moreload + ;inc soundemmpage + call closefile +dontbother: ret + +emmerror: mov gameerror,7 + jmp quickquit2 + + endp + + + + + + +Loadsecondsample proc near + + cmp soundint,255 + jz dontbother9 + + cmp ch0playing,12 + jc ch0oksecond + cmp ch0playing,255 + jz ch0oksecond + call cancelch0 + ;mov cx,100 + ;call hangon + jmp ch0oksecond +justcancel: call cancelch0 +ch0oksecond: cmp ch1playing,12 + jc ch1oksecond + call cancelch1 + +ch1oksecond: call openfile + call readheader + mov bx,[es:di] + push es di bx + mov ds,sounddata2 + pop cx + mov dx,0 + call readfromfile + + mov cx,100 + mov di,0 + mov es,sounddata2 + mov bx,soundemmpage +adjustemmpage: mov al,[es:di] + add al,bl + mov [es:di],al + add di,6 + loop adjustemmpage + + pop di es + + add di,2 + mov bx,soundemmpage + mov speechemmpage,bx + mov dx,[es:di] + add dx,1 + shr dx,1 + +moreload2: push dx bx + + push es di bx + mov al,2 + mov dx,emmhandle + mov ah,44h + int 67h + cmp ah,0 + jnz emmerror2 + mov ds,emmpageframe + pop bx di es + inc bx + push es di + mov al,3 + mov dx,emmhandle + mov ah,44h + int 67h + cmp ah,0 + jnz emmerror2 + mov ds,emmpageframe + pop di es + + mov cx,8000h + mov dx,8000h + call readfromfile + pop bx dx + add bx,2 + add speechemmpage,2 + dec dx + jnz moreload2 + call closefile +dontbother9: ret + +emmerror2: mov gameerror,7 + jmp quickquit2 + + endp + + + + + + +Soundstartup proc near + + cmp soundint,255 + jz dontbother2 + + mov dx,soundbaseadd + add dx,0eh + mov DSP_status,dx + mov dx,soundbaseadd + add dx,0ch + mov DSP_write,dx + + mov al,1 + mov dx,soundbaseadd + add dx,0006h + out dx,al + push ax ax ax ax ax ax ax ax + pop ax ax ax ax ax ax ax ax + mov al,0 + out dx,al + + mov dx,DSP_status + mov cx,2000 +waitinit: in al,dx + and al,128 + jz waitinit + mov dx,soundbaseadd + add dx,000ah + in al,dx + cmp al,0aah + jz dspready + loop waitinit + mov gameerror,2 + jmp quickquit + +dspready: call trysoundalloc + + cli + mov ah,40h ;set sample rate + call out22c + mov ah,210 ;of 22050Hz + call out22c + sti + + call checksoundint + + mov ah,35h + mov al,soundint + add al,8 + int 21h + mov oldsoundintseg,es ; Save es:bx to temp memory + mov oldsoundintadd,bx + push cs + pop ds + mov dx,offset cs:dmaend + mov ah,25h + mov al,soundint + add al,8 + int 21h ; Set to new + + call enablesoundint + + mov al,sounddmachannel + xor ah,ah + mov bx,offset cs:dmaaddresses + add bx,ax + mov al,[cs:bx] + mov dmaaddress,al + + mov ah,0d1h ;speaker on + call out22c + mov ah,0d0h + call out22c + +dontbother2: ret + +dmaaddresses db 87h,83h,81h,82h + + endp + + + + + +Trysoundalloc proc near + + cmp needsoundbuff,1 + jz gotsoundbuff + inc soundtimes + mov bx,(16384+2048)/16 + call allocatemem + mov soundbuffer,ax + push ax + mov al,ah + mov cl,4 + shr al,cl + mov soundbufferpage,al + pop ax + mov cl,4 + shl ax,cl + mov soundbufferad,ax + cmp ax,0b7ffh + jnc soundfail + + mov es,soundbuffer + mov di,0 + mov cx,16384/2 + mov ax,7f7fh + rep stosw + mov needsoundbuff,1 + ret + +soundfail: mov es,soundbuffer + call deallocatemem +gotsoundbuff: ret + + endp + + + + + + +Setsoundoff proc near + + cmp soundint,255 + jz dontbother28 + mov soundbufferwrite,0 + cli + call setupPIT + mov soundbufferwrite,4096 + call startdmablock + sti +dontbother28: ret + + endp + + + + + + +Checksoundint proc near + + mov ah,0d3h ;speaker off + call out22c + + mov testresult,0 + mov ah,35h + mov al,soundint + add al,8 + int 21h + mov oldsoundintseg,es + mov oldsoundintadd,bx + push cs + pop ds + mov dx,offset cs:interupttest + mov ah,25h + mov al,soundint + add al,8 + int 21h + + call enablesoundint + + mov ah,0f2h + call out22c + + mov cx,20 + call hangon + + call disablesoundint + + mov dx,oldsoundintseg + mov ds,dx + mov dx,oldsoundintadd ;Restore old interupt vector + mov ah,25h + mov al,soundint + add al,8 + int 21h + + cmp testresult,1 + jz interuptworked + mov gameerror,6 ;interupt wrong + jmp quickquit ;exit to DOS with error + +interuptworked: ret + + endp + + + + + +Enablesoundint proc near + + mov dx,21h ; Enable int? + in al,dx + mov currentirq,al + mov ah,11111110b + mov cl,soundint + rol ah,cl + and al,ah + out dx,al + ret + + endp + + + + + +Disablesoundint proc near + + mov al,soundint + mov dx,21h + mov al,currentirq + out dx,al + ret + + endp + + + + +Interupttest proc near + + cli + push ax dx + mov testresult,1 + mov dx,DSP_status + in al,dx + mov al,20h + out 20h,al + pop dx ax + iret + + endp + + + + + +Soundend proc near + + cmp soundint,255 + jz dontbother3 + + call getridofPIT + + mov ah,0d0h + call out22c + + call disablesoundint + + mov ds,oldsoundintseg ;for keys + mov dx,oldsoundintadd ;Restore old interupt vector + mov ah,25h + mov al,soundint + add al,8 + int 21h + +dontbother3: ret + + endp + + + + + +Out22c proc near + + mov dx,DSP_write +notclear: in al,dx + or al,al + js notclear + mov al,ah + out dx,al + ret + + endp + + + + + +;--------------------------------------------------------------------------- + + + + +Playchannel0 proc near ;al=sound no + ;ah=times to repeat + cmp soundint,255 + jz dontbother4 + + push es ds bx cx di si + + mov ch0playing,al + mov es,sounddata + cmp al,12 + jc notsecondbank + mov es,sounddata2 + sub al,12 +notsecondbank: mov ch0repeat,ah + mov ah,0 + add ax,ax + mov bx,ax + add ax,ax + add bx,ax + + mov al,[es:bx] + mov ah,0 + mov ch0emmpage,ax + mov ax,[es:bx+1] + mov ch0offset,ax + mov ax,[es:bx+3] + mov ch0blockstocopy,ax + + cmp ch0repeat,0 + jz nosetloop + mov ax,ch0emmpage + mov ch0oldemmpage,ax + mov ax,ch0offset + mov ch0oldoffset,ax + mov ax,ch0blockstocopy + mov ch0oldblockstocopy,ax + +nosetloop: pop si di cx bx ds es + +dontbother4: ret + + endp + + + + + + + +Playchannel1 proc near ;al=sound no + + cmp soundint,255 + jz dontbother5 + cmp ch1playing,7 + jz dontbother5 + push es ds bx cx di si + + mov ch1playing,al + mov es,sounddata + cmp al,12 + jc notsecondbank1 + mov es,sounddata2 + sub al,12 +notsecondbank1: mov ah,0 + add ax,ax + mov bx,ax + add ax,ax + add bx,ax + + mov al,[es:bx] + mov ah,0 + mov ch1emmpage,ax + mov ax,[es:bx+1] + mov ch1offset,ax + mov ax,[es:bx+3] + mov ch1blockstocopy,ax + + pop si di cx bx ds es + +dontbother5: ret + + endp + + + + + + + + +Makenextblock proc near + + call volumeadjust + + call loopchannel0 + cmp ch1blockstocopy,0 + jz mightbeonlych0 + cmp ch0blockstocopy,0 + jz mightbeonlych1 + + dec ch0blockstocopy + dec ch1blockstocopy + call bothchannels + ret + +mightbeonlych1: mov ch0playing,255 + cmp ch1blockstocopy,0 + jz notch1only + dec ch1blockstocopy + call channel1only +notch1only: ret + +mightbeonlych0: mov ch1playing,255 + cmp ch0blockstocopy,0 + jz notch0only + dec ch0blockstocopy + call channel0only + ret +notch0only: mov es,soundbuffer + mov di,soundbufferwrite + mov cx,1024 + mov ax,7f7fh + rep stosw + and di,16384-1 + mov soundbufferwrite,di + ret + + endp + + + + +Volumeadjust proc near + + mov al,volumedirection + cmp al,0 + jz volok + mov al,volume + cmp al,volumeto + jz volfinish + add volumecount,64 + jnz volok + mov al,volume + add al,volumedirection + mov volume,al + ret +volfinish: mov volumedirection,0 +volok: ret + + endp + + + +Loopchannel0 proc near + + cmp ch0blockstocopy,0 + jnz notloop + cmp ch0repeat,0 + jz notloop + cmp ch0repeat,255 + jz endlessloop + dec ch0repeat +endlessloop: mov ax,ch0oldemmpage + mov ch0emmpage,ax + mov ax,ch0oldoffset + mov ch0offset,ax + mov ax,ch0blockstocopy + add ax,ch0oldblockstocopy + mov ch0blockstocopy,ax + ret +notloop: ret + + endp + + + + + + + +Cancelch0 proc near + + mov ch0repeat,0 + mov ch0blockstocopy,0 + mov ch0playing,255 + ret + + endp + + + +Cancelch1 proc near + + mov ch1blockstocopy,0 + mov ch1playing,255 + ret + + endp + + + + +Channel0only proc near + + call saveems + mov al,0 + mov bx,ch0emmpage + mov dx,emmhandle + mov ah,44h + int 67h + + mov es,soundbuffer + mov ds,emmpageframe + mov di,soundbufferwrite + mov si,ch0offset + + call channel0tran + call restoreems + + and di,16384-1 + mov soundbufferwrite,di + and si,16384-1 + mov ch0offset,si + cmp si,0 + jnz notch0endofpage0 + inc ch0emmpage +notch0endofpage0: ret + + endp + + + + +Channel1only proc near + + call saveems + mov al,1 + mov bx,ch1emmpage + mov dx,emmhandle + mov ah,44h + int 67h + + mov es,soundbuffer + mov ds,emmpageframe + mov di,soundbufferwrite + mov si,ch1offset + add si,16384 + + mov cx,1024 + rep movsw + call restoreems + + and di,16384-1 + mov soundbufferwrite,di + and si,16384-1 + mov ch1offset,si + cmp si,0 + jnz notch1endofpage1 + inc ch1emmpage +notch1endofpage1: ret + + endp + + + + + +Channel0tran proc near + + cmp volume,0 + jnz lowvolumetran + mov cx,1024 + rep movsw + ret + +lowvolumetran: mov cx,1024 + mov bh,volume + mov bl,0 + add bx,16384-256 +volloop: lodsw + mov bl,al + mov al,[es:bx] + mov bl,ah + mov ah,[es:bx] + stosw + loop volloop + ret + + + endp + + + + + + + + +Bothchannels proc near ;rather slow routine + ;to mix two channels + + call saveems + mov al,0 + mov bx,ch0emmpage + mov dx,emmhandle + mov ah,44h + int 67h + mov al,1 + mov bx,ch1emmpage + mov dx,emmhandle + mov ah,44h + int 67h + + mov es,soundbuffer + mov ds,emmpageframe + mov di,soundbufferwrite + mov si,ch0offset + mov bx,ch1offset + add bx,16384 + mov cx,2048 + mov dh,128 + mov dl,255 + + call domix + call restoreems + + and di,16384-1 + mov soundbufferwrite,di + + mov si,ch0offset + add si,2048 + and si,16384-1 + mov ch0offset,si + cmp si,0 + jnz notbothendofpage0 + inc ch0emmpage +notbothendofpage0: mov si,ch1offset + add si,2048 + and si,16384-1 + mov ch1offset,si + cmp si,0 + jnz notbothendofpage1 + inc ch1emmpage +notbothendofpage1: ret + + endp + + + +Saveems proc near + + mov ah,4eh + mov al,0 + mov es,soundbuffer + mov di,16384+2048-256 + int 67h + ret + + endp + + +Restoreems proc near + + push si di + mov ah,4eh + mov al,1 + mov ds,soundbuffer + mov si,16384+2048-256 + int 67h + pop di si + ret + + endp + + + +Domix proc near + + cmp volume,0 + jnz lowvolumemix + +slow: lodsb + mov ah,[bx] + inc bx + cmp al,dh + jnc toplot + +botlot: cmp ah,dh + jnc nodistort + add al,ah + js botok + xor al,al + stosb + loop slow + jmp doneit +botok: xor al,dh + stosb + loop slow + jmp doneit + +toplot: cmp ah,dh + jc nodistort + add al,ah + jns topok + mov al,dl + stosb + loop slow + jmp doneit +topok: xor al,dh + stosb + loop slow + jmp doneit + +nodistort: add al,ah + xor al,dh + stosb + loop slow + jmp doneit + + +lowvolumemix: lodsb + push bx + mov bh,volume + add bh,63 + mov bl,al + mov al,[es:bx] + pop bx + + mov ah,[bx] + inc bx + cmp al,dh + jnc toplotv + +botlotv: cmp ah,dh + jnc nodistortv + add al,ah + js botokv + xor al,al + stosb + loop lowvolumemix + jmp doneit +botokv: xor al,dh + stosb + loop lowvolumemix + jmp doneit + +toplotv: cmp ah,dh + jc nodistortv + add al,ah + jns topokv + mov al,dl + stosb + loop lowvolumemix + jmp doneit +topokv: xor al,dh + stosb + loop lowvolumemix + jmp doneit + +nodistortv: add al,ah + xor al,dh + stosb + loop lowvolumemix +doneit: ret + + + endp + + + + + + + +Dmaend proc near + + cli + push ax cx dx + call startdmablock + mov dx,DSP_status + in al,dx + mov al,20h + out 20h,al + pop dx cx ax + iret + + endp + + + + + + + + + + + + + + + + +Startdmablock proc near + + mov al,sounddmachannel ;cx=length + or al,4 ;bx=offset + out 0ah,al + xor al,al + out 0ch,al + + mov al,48h + or al,sounddmachannel + out 0bh,al + + mov cx,soundbufferad + xor dh,dh + mov dl,sounddmachannel + shl dl,1 + mov al,cl + out dx,al + mov al,ch + out dx,al + + mov dl,dmaaddress + mov al,soundbufferpage ;hardware page + out dx,al + + mov dl,sounddmachannel + shl dl,1 + inc dl + mov cx,16384-1 + mov al,cl + out dx,al + mov al,ch + out dx,al + + mov al,sounddmachannel + out 0ah,al ;dmac programmed + + mov dx,DSP_write +notclear1: in al,dx + or al,al + js notclear1 + mov al,14h + out dx,al +notclear2: in al,dx + or al,al + js notclear2 + mov al,cl + out dx,al +notclear3: in al,dx + or al,al + js notclear3 + mov al,ch + out dx,al + + ret + + + endp + + + + + + + + + + + + + + + +SetupPIT proc near + + mov ah,35h + mov al,8 + int 21h + mov oldint8seg,es ; Save es:bx to temp memory + mov oldint8add,bx + push cs + pop ds + mov dx,offset cs:PITinterupt + mov ah,25h + mov al,8 + int 21h ; Set to new + + mov al,34h + out 43h,al + mov al,0h + out 40h,al + mov al,0dah + out 40h,al + ret + + endp + + + + + + +Getridofpit proc near + + cmp oldint8seg,-1 + jz noresetPIT + mov dx,oldint8add + mov ax,oldint8seg + mov ds,ax + mov ah,25h + mov al,8 + int 21h + mov al,34h + out 43h,al + mov al,0 + out 40h,al + mov al,0 + out 40h,al +noresetPIT: ret + + endp + + + + + + +PITinterupt proc near + + cli + push ax dx cx + + xor dh,dh + mov dl,sounddmachannel + shl dl,1 + in al,dx + mov cl,al + in al,dx + mov ch,al + sub cx,soundbufferad + mov ax,soundbufferwrite + sub ax,cx + and ax,3fffh + sti + cmp ax,8192 + jnc mustgo + cmp ax,2048 + jnc nopitflip + +mustgo: push bx si di es ds + call makenextblock + pop ds es di si bx + +nopitflip: cli + mov al,20h + out 20h,al + pop cx dx ax + iret + + endp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/sprite.asm b/devtools/tasmrecover/dreamweb/sprite.asm new file mode 100644 index 0000000000..f6e883abeb --- /dev/null +++ b/devtools/tasmrecover/dreamweb/sprite.asm @@ -0,0 +1,5034 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +;------------------------------------------------------------People Routines---- + + + +Reelroutines db 1,44,0 ;Room number and x,y + dw 20 ;reel pointer + db 2,0,1 ;speed,speed count,convers. no. + + db 1,55,0 + dw 0 + db 50,20,0 + + db 24,22,0 + dw 74 + db 1,0,0 + + db 24,33,10 + dw 75 + db 1,0,1 + + db 1,44,0 + dw 27 + db 2,0,2 + + db 1,44,0 + dw 96 + db 3,0,4 + + db 1,44,0 + dw 118 + db 2,0,5 + + db 1,44,10 + dw 0 + db 2,0,0 + + db 5,22,20 + dw 53 + db 3,0,0 + + db 5,22,20 + dw 40 + db 1,0,2 + + db 5,22,20 + dw 50 + db 1,0,3 + + db 2,11,10 + dw 192 + db 1,0,0 + + db 2,11,10 + dw 182 + db 2,0,1 + + db 8,11,10 + dw 0 + db 2,0,1 + + db 23,0,50 + dw 0 + db 3,0,0 + + db 28,11,20 + dw 250 + db 4,0,0 + + db 23,0,50 + dw 43 + db 2,0,8 + + db 23,11,40 + dw 130 + db 2,0,1 + + db 23,22,40 + dw 122 + db 2,0,2 + + db 23,22,40 + dw 105 + db 2,0,3 + + db 23,22,40 + dw 81 + db 2,0,4 + + db 23,11,40 + dw 135 + db 2,0,5 + + db 23,22,40 + dw 145 + db 2,0,6 + + db 4,22,30 + dw 0 + db 2,0,0 + + db 45,22,30 + dw 200 + db 0,0,20 + + db 45,22,30 + dw 39 + db 2,0,0 + + db 45,22,30 + dw 25 + db 2,0,0 + + db 8,22,40 + dw 32 + db 2,0,0 + + db 7,11,20 + dw 64 + db 2,0,0 + + db 22,22,20 + dw 82 + db 2,0,0 + + db 27,11,30 + dw 0 + db 2,0,0 + + db 20,0,30 + dw 0 + db 2,0,0 + + db 14,33,40 + dw 21 + db 1,0,0 + + db 29,11,10 + dw 0 + db 1,0,0 + + db 2,22,0 + dw 2 + db 2,0,0 + + db 25,0,50 + dw 4 + db 2,0,0 + + db 50,22,30 + dw 121 + db 2,0,0 + + db 50,22,30 + dw 0 + db 20,0,0 + + db 52,22,30 + dw 192 + db 2,0,0 + + db 52,22,30 + dw 233 + db 2,0,0 + + db 50,22,40 + dw 104 + if cd + if german + db 65,0,0 + else + db 55,0,0 + endif + else + db 55,0,0 + endif + + db 53,33,0 + dw 99 + db 2,0,0 + + db 50,22,40 + dw 0 + db 3,0,0 + + db 50,22,30 + dw 162 + db 2,0,0 + + db 52,22,30 + dw 57 + db 2,0,0 + + db 52,22,30 + dw 0 + db 2,0,0 + + db 54,0,0 + dw 72 + db 3,0,0 + + db 55,44,0 + dw 0 + db 2,0,0 + + db 19,0,0 + dw 0 + db 28,0,0 + + db 14,22,0 + dw 2 + db 2,0,0 + + db 14,22,0 + dw 300 + db 1,0,0 + + db 10,22,30 + dw 174 + db 0,0,0 + + db 12,22,20 + dw 0 + db 1,0,0 + + db 11,11,20 + dw 0 + db 50,20,0 + + db 11,11,30 + dw 0 + db 50,20,0 + + db 11,22,20 + dw 0 + db 50,20,0 + + db 14,33,40 + dw 0 + db 50,20,0 + + db 255 + + +Lenofreelrouts equ $-reelroutines + + +Reelcalls dw gamer,sparkydrip,eden,edeninbath,sparky,smokebloke + dw manasleep,drunk,receptionist,malefan,femalefan + dw louis,louischair,soldier1,bossman,interviewer + dw heavy,manasleep2,mansatstill,drinker,bartender + dw othersmoker,tattooman,attendant,keeper,candles1 + dw smallcandle,security,copper,poolguard,rockstar + dw businessman,train,aide,mugger,helicopter + dw intromagic1,intromusic,intromagic2,candles2,gates + dw intromagic3,intromonks1,candles,intromonks2 + dw handclap,monkandryan,endgameseq,priest,madman + dw madmanstelly,alleybarksound,foghornsound + dw carparkdrip,carparkdrip,carparkdrip,carparkdrip + + + +;---------------------------------------------------------Character updates---- + + + +Alleybarksound proc near + + mov ax,[es:bx+3] + dec ax + cmp ax,0 + jnz nobark + push bx es + mov al,14 + call playchannel1 + pop es bx + mov ax,1000 +nobark: mov [es:bx+3],ax + ret + + endp + + + + +Intromusic proc near + + ret + + endp + + +Foghornsound proc near + + call randomnumber + cmp al,198 + jnz nofog + mov al,13 + call playchannel1 +nofog: ret + + endp + + + + +Receptionist proc near + + call checkspeed + jnz gotrecep + cmp cardpassflag,1 + jnz notsetcard + inc cardpassflag + mov byte ptr [es:bx+7],1 + mov word ptr [es:bx+3],64 +notsetcard: cmp word ptr [es:bx+3],58 + jnz notdes1 + call randomnumber + cmp al,30 + jc notdes2 + mov word ptr [es:bx+3],55 + jmp gotrecep + +notdes1: cmp word ptr [es:bx+3],60 + jnz notdes2 + call randomnumber + cmp al,240 + jc gotrecep + mov word ptr [es:bx+3],53 + jmp gotrecep + +notdes2: cmp word ptr [es:bx+3],88 + jnz notendcard + mov word ptr [es:bx+3],53 + jmp gotrecep + +notendcard: inc word ptr [es:bx+3] +gotrecep: call showgamereel + call addtopeoplelist + + mov al,[es:bx+7] + and al,128 + jz nottalkedrecep + mov talkedtorecep,1 +nottalkedrecep: ret + + endp + + + + +Smokebloke proc near + + cmp rockstardead,0 + jnz notspokento + mov al,[es:bx+7] + and al,128 + jz notspokento + push es bx + mov al,5 + call setlocation + pop bx es +notspokento: ;mov al,[es:bx+7] + ;and al,127 + ;mov [es:bx+7],al + call checkspeed + jnz gotsmokeb + cmp word ptr [es:bx+3],100 + jnz notsmokeb1 + call randomnumber + cmp al,30 + jc notsmokeb2 + mov word ptr [es:bx+3],96 + jmp gotsmokeb + +notsmokeb1: cmp word ptr [es:bx+3],117 + jnz notsmokeb2 + mov word ptr [es:bx+3],96 + jmp gotsmokeb + +notsmokeb2: inc word ptr [es:bx+3] +gotsmokeb: call showgamereel + call addtopeoplelist + ret + + endp + + + + + + + + + + +Attendant proc near + + call showgamereel + call addtopeoplelist + mov al,[es:bx+7] + and al,128 + jz nottalked + mov talkedtoattendant,1 +nottalked: ret + + endp + + + + + + +Manasleep proc near + + mov al,[es:bx+7] + and al,127 + mov [es:bx+7],al + call showgamereel + call addtopeoplelist + ret + + endp + + + +Eden proc near + + cmp generaldead,0 + jnz notinbed + call showgamereel + call addtopeoplelist +notinbed: ret + + endp + + + +Edeninbath proc near + + cmp generaldead,0 + jz notinbath + cmp sartaindead,0 + jnz notinbath + call showgamereel + call addtopeoplelist +notinbath: ret + + endp + + + +Malefan proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + + +Femalefan proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + + + +Louis proc near + + cmp rockstardead,0 + jnz notlouis1 + call showgamereel + call addtopeoplelist +notlouis1: ret + + endp + + + + +Louischair proc near + + cmp rockstardead,0 + jz notlouis2 + call checkspeed + jnz notlouisanim + mov ax,[es:bx+3] + inc ax + cmp ax,191 + jz restartlouis + cmp ax,185 + jz randomlouis + mov [es:bx+3],ax + jmp notlouisanim +randomlouis: mov [es:bx+3],ax + call randomnumber + cmp al,245 + jnc notlouisanim +restartlouis: mov ax,182 + mov [es:bx+3],ax +notlouisanim: call showgamereel + call addtopeoplelist +notlouis2: ret + + endp + + + +Manasleep2 proc near + + mov al,[es:bx+7] + and al,127 + mov [es:bx+7],al + call showgamereel + call addtopeoplelist + ret + + endp + + + + +Mansatstill proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + +Tattooman proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + +Drinker proc near + + call checkspeed + jnz gotdrinker + inc word ptr [es:bx+3] + cmp word ptr [es:bx+3],115 + jnz notdrinker1 + mov word ptr [es:bx+3],105 + jmp gotdrinker + +notdrinker1: cmp word ptr [es:bx+3],106 + jnz gotdrinker + call randomnumber + cmp al,3 + jc gotdrinker + mov word ptr [es:bx+3],105 + +gotdrinker: call showgamereel + call addtopeoplelist + ret + + endp + + + + + +Bartender proc near + + call checkspeed + jnz gotsmoket + cmp word ptr [es:bx+3],86 + jnz notsmoket1 + call randomnumber + cmp al,18 + jc notsmoket2 + mov word ptr [es:bx+3],81 + jmp gotsmoket + +notsmoket1: cmp word ptr [es:bx+3],103 + jnz notsmoket2 + mov word ptr [es:bx+3],81 + jmp gotsmoket + +notsmoket2: inc word ptr [es:bx+3] +gotsmoket: call showgamereel + cmp gunpassflag,1 + jnz notgotgun + mov byte ptr [es:bx+7],9 +notgotgun: call addtopeoplelist + ret + + endp + + + + + + + +Othersmoker proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + + + + + +Barwoman proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + + + + + + + + +Interviewer proc near + + cmp reeltowatch,68 + jnz notgeneralstart + inc word ptr [es:bx+3] +notgeneralstart: cmp word ptr [es:bx+3],250 + jz talking + call checkspeed + jnz talking + cmp word ptr [es:bx+3],259 + jz talking + inc word ptr [es:bx+3] +talking: call showgamereel + ret + + endp + + + + + +Soldier1 proc near + + cmp word ptr [es:bx+3],0 + jz soldierwait + mov watchingtime,10 + cmp word ptr [es:bx+3],30 + jnz notaftersshot + inc combatcount + cmp combatcount,40 + jnz gotsoldframe + mov mandead,2 + jmp gotsoldframe +notaftersshot: call checkspeed + jnz gotsoldframe + inc word ptr [es:bx+3] + jmp gotsoldframe +soldierwait: cmp lastweapon,1 + jnz gotsoldframe + mov watchingtime,10 + cmp manspath,2 + jnz gotsoldframe + cmp facing,4 + jnz gotsoldframe + inc word ptr [es:bx+3] + mov lastweapon,-1 + mov combatcount,0 +gotsoldframe: call showgamereel + call addtopeoplelist + ret + + endp + + + + + + + + +Rockstar proc near + + mov ax,[es:bx+3] + cmp ax,303 + jz rockcombatend + cmp ax,118 + jz rockcombatend + call checkspeed + jnz rockspeed + + mov ax,[es:bx+3] + inc ax + cmp ax,118 + jnz notbeforedead + mov mandead,2 + jmp gotrockframe + +notbeforedead: cmp ax,79 + jnz gotrockframe + dec ax + cmp lastweapon,1 + jnz notgunonrock + mov lastweapon,-1 + mov ax,123 + jmp gotrockframe +notgunonrock: inc combatcount + cmp combatcount,40 + jnz gotrockframe + mov combatcount,0 + mov ax,79 + +gotrockframe: mov [es:bx+3],ax +rockspeed: call showgamereel + cmp word ptr [es:bx+3],78 + jnz notalkrock + call addtopeoplelist + mov pointermode,2 + mov watchingtime,0 + ret + +notalkrock: mov watchingtime,2 + mov pointermode,0 + mov al,mapy + mov [es:bx+2],al + ret + +rockcombatend: mov newlocation,45 + call showgamereel + ret + + endp + + + + + + + + + + + + + + + +Helicopter proc near + + mov ax,[es:bx+3] + cmp ax,203 + jz heliwon + ;cmp ax,53 + ;jz helicombatend + call checkspeed + jnz helispeed + + mov ax,[es:bx+3] + inc ax + cmp ax,53 + jnz notbeforehdead + inc combatcount + cmp combatcount,8 + jc waitabit + mov mandead,2 +waitabit: mov ax,49 + jmp gotheliframe + +notbeforehdead: cmp ax,9 + jnz gotheliframe + dec ax + cmp lastweapon,1 + jnz notgunonheli + mov lastweapon,-1 + mov ax,55 + jmp gotheliframe +notgunonheli: mov ax,5 + inc combatcount + cmp combatcount,20 + jnz gotheliframe + mov combatcount,0 + mov ax,9 + +gotheliframe: mov [es:bx+3],ax +helispeed: call showgamereel + mov al,mapx + mov [es:bx+1],al +helicombatend: mov ax,[es:bx+3] + cmp ax,9 ;8 + jnc notwaitingheli + cmp combatcount,7 + jc notwaitingheli + mov pointermode,2 + mov watchingtime,0 + ret +notwaitingheli: mov pointermode,0 + mov watchingtime,2 + ret + +heliwon: mov pointermode,0 + ret + + endp + + +Mugger proc near + + mov ax,[es:bx+3] + cmp ax,138 + jz endmugger1 + cmp ax,176 + jz endmugger2 + cmp ax,2 + jnz havesetwatch + mov watchingtime,175*2 +havesetwatch: call checkspeed + jnz notmugger + inc word ptr [es:bx+3] +notmugger: call showgamereel + mov al,mapx + mov [es:bx+1],al + ret + +endmugger1: push es bx + call createpanel2 + call showicon + mov al,41 + call findpuztext + mov di,33+20 + mov bx,104 + mov dl,241 + mov ah,0 + call printdirect + call worktoscreen + mov cx,300 + call hangon + pop bx es + push es bx + mov word ptr [es:bx+3],140 + mov manspath,2 + mov finaldest,2 + call findxyfrompath + mov resetmanxy,1 + mov al,"W" + mov ah,"E" + mov cl,"T" + mov ch,"A" + call findexobject + mov command,al + mov objecttype,4 + call removeobfrominv + mov al,"W" + mov ah,"E" + mov cl,"T" + mov ch,"B" + call findexobject + mov command,al + mov objecttype,4 + call removeobfrominv + call makemainscreen + mov al,48 + mov bl,68-32 + mov bh,54+64 + mov cx,70 ; time on screen + mov dx,10 ; pause before show + call setuptimeduse + mov beenmugged,1 + pop bx es + ret + +endmugger2: ret + + + endp + + + + + + + + +Aide proc near + + call showgamereel + call addtopeoplelist + ret + + endp + + + + + + +Businessman proc near + + mov pointermode,0 + mov watchingtime,2 + mov ax,[es:bx+3] + cmp ax,2 + jnz notfirstbiz + push ax bx es + mov al,49 + mov cx,30 + mov dx,1 + mov bl,68 + mov bh,174 + call setuptimeduse + pop es bx ax + +notfirstbiz: cmp ax,95 + jz buscombatwonend + cmp ax,49 + jz buscombatend + + call checkspeed + jnz busspeed + + mov ax,[es:bx+3] + inc ax + cmp ax,48 + jnz notbeforedeadb + mov mandead,2 + jmp gotbusframe + +notbeforedeadb: cmp ax,15 + jnz buscombatwon + dec ax + cmp lastweapon,3 + jnz notshieldonbus + mov lastweapon,-1 + mov combatcount,0 + mov ax,51 + jmp gotbusframe +notshieldonbus: inc combatcount + cmp combatcount,20 + jnz gotbusframe + mov combatcount,0 + mov ax,15 + jmp gotbusframe + +buscombatwon: cmp ax,91 + jnz gotbusframe + push bx es + mov al,0 + call turnpathon + mov al,1 + call turnpathon + mov al,2 + call turnpathon + mov al,3 + call turnpathoff + mov manspath,5 + mov finaldest,5 + call findxyfrompath + mov resetmanxy,1 + pop es bx + mov ax,92 + jmp gotbusframe + +gotbusframe: mov [es:bx+3],ax +busspeed: call showgamereel + mov al,mapy + mov [es:bx+2],al + mov ax,[es:bx+3] + cmp ax,14 + jnz buscombatend + mov watchingtime,0 + mov pointermode,2 + ret + +buscombatend: ret + +buscombatwonend: mov pointermode,0 + mov watchingtime,0 + ret + + endp + + + + + + +Poolguard proc near + + mov ax,[es:bx+3] + cmp ax,214 + jz combatover2 + cmp ax,258 + jz combatover2 + cmp ax,185 + jz combatover1 + cmp ax,0 + jnz notfirstpool + mov al,0 + call turnpathon +notfirstpool: call checkspeed + jnz guardspeed + + mov ax,[es:bx+3] + inc ax + cmp ax,122 + jnz notendguard1 + dec ax + cmp lastweapon,2 + jnz notaxeonpool + mov lastweapon,-1 + mov ax,122 + jmp gotguardframe +notaxeonpool: inc combatcount + cmp combatcount,40 + jnz gotguardframe + mov combatcount,0 + mov ax,195 + jmp gotguardframe + +notendguard1: cmp ax,147 + jnz gotguardframe + dec ax + cmp lastweapon,1 + jnz notgunonpool + mov lastweapon,-1 + mov ax,147 + jmp gotguardframe +notgunonpool: inc combatcount + cmp combatcount,40 + jnz gotguardframe + mov combatcount,0 + mov ax,220 + +gotguardframe: mov [es:bx+3],ax +guardspeed: call showgamereel + mov ax,[es:bx+3] + cmp ax,121 + jz iswaitingpool + cmp ax,146 + jz iswaitingpool + mov pointermode,0 + mov watchingtime,2 + ret +iswaitingpool: mov pointermode,2 + mov watchingtime,0 + ret + +combatover1: mov watchingtime,0 + mov pointermode,0 + mov al,0 + call turnpathon + mov al,1 + call turnpathoff + ret + +combatover2: call showgamereel + mov watchingtime,2 + mov pointermode,0 + inc combatcount + cmp combatcount,100 + jc doneover2 + mov watchingtime,0 + mov mandead,2 +doneover2: ret + + endp + + + + + + + + + + +Security proc near + + cmp word ptr [es:bx+3],32 + jz securwait + cmp word ptr [es:bx+3],69 + jnz notaftersec + ret +notaftersec: mov watchingtime,10 + call checkspeed + jnz gotsecurframe + inc word ptr [es:bx+3] + jmp gotsecurframe +securwait: cmp lastweapon,1 + jnz gotsecurframe + mov watchingtime,10 + cmp manspath,9 + jnz gotsecurframe + cmp facing,0 + jnz gotsecurframe + mov lastweapon,-1 + inc word ptr [es:bx+3] +gotsecurframe: call showgamereel + call addtopeoplelist + ret + + endp + + + + + + +Heavy proc near + + mov al,[es:bx+7] + and al,127 + mov [es:bx+7],al + cmp word ptr [es:bx+3],43 + jz heavywait + mov watchingtime,10 + cmp word ptr [es:bx+3],70 + jnz notafterhshot + inc combatcount + cmp combatcount,80 + jnz gotheavyframe + mov mandead,2 + jmp gotheavyframe +notafterhshot: call checkspeed + jnz gotheavyframe + inc word ptr [es:bx+3] + jmp gotheavyframe +heavywait: cmp lastweapon,1 + jnz gotheavyframe + cmp manspath,5 + jnz gotheavyframe + cmp facing,4 + jnz gotheavyframe + mov lastweapon,-1 + inc word ptr [es:bx+3] + mov combatcount,0 +gotheavyframe: call showgamereel + call addtopeoplelist + ret + + endp + + + + +Bossman proc near + + call checkspeed + jnz notboss + mov ax,[es:bx+3] + inc ax + cmp ax,4 + jz firstdes + cmp ax,20 + jz secdes + cmp ax,41 + jnz gotallboss + mov ax,0 + inc gunpassflag + mov byte ptr [es:bx+7],10 + jmp gotallboss +firstdes: cmp gunpassflag,1 + jz gotallboss + push ax + call randomnumber + mov cl,al + pop ax + cmp cl,10 + jc gotallboss + mov ax,0 + jmp gotallboss +secdes: cmp gunpassflag,1 + jz gotallboss + mov ax,0 +gotallboss: mov [es:bx+3],ax +notboss: call showgamereel + call addtopeoplelist + + mov al,[es:bx+7] + and al,128 + jz nottalkedboss + mov talkedtoboss,1 +nottalkedboss: ret + + endp + + + + + +Gamer proc near + + call checkspeed + jnz gamerfin +gameragain: call randomnum1 + and al,7 + cmp al,5 + jnc gameragain + add al,20 + cmp al,[es:bx+3] + jz gameragain + mov ah,0 + mov [es:bx+3],ax +gamerfin: call showgamereel + call addtopeoplelist + ret + + endp + + + + + +Sparkydrip proc near + + call checkspeed + jnz cantdrip + mov al,14 + mov ah,0 + call playchannel0 +cantdrip: ret + + endp + + + +Carparkdrip proc near + + call checkspeed + jnz cantdrip2 + mov al,14 + call playchannel1 +cantdrip2: ret + + endp + + + +Keeper proc near + + cmp keeperflag,0 + jnz notwaiting + cmp reeltowatch,190 + jc waiting + inc keeperflag + mov ah,[es:bx+7] + and ah,127 + cmp ah,dreamnumber + jz notdiff + mov al,dreamnumber + mov [es:bx+7],al +notdiff: ret +notwaiting: call addtopeoplelist + call showgamereel +waiting: ret + + endp + + + +Candles1 proc near + + call checkspeed + jnz candle1 + mov ax,[es:bx+3] + inc ax + cmp ax,44 + jnz notendcandle1 + mov ax,39 +notendcandle1: mov [es:bx+3],ax +candle1: call showgamereel + ret + + endp + + + +Smallcandle proc near + + call checkspeed + jnz smallcandlef + mov ax,[es:bx+3] + inc ax + cmp ax,37 + jnz notendsmallcandle + mov ax,25 +notendsmallcandle: mov [es:bx+3],ax +smallcandlef: call showgamereel + ret + + endp + + + + + + + + + + + +Intromagic1 proc near + + call checkspeed + jnz introm1fin + mov ax,[es:bx+3] + inc ax + cmp ax,145 + jnz gotintrom1 + mov ax,121 +gotintrom1: mov [es:bx+3],ax + cmp ax,121 + jnz introm1fin + inc introcount + push es bx + call intro1text + pop bx es + cmp introcount,8 ; was 7 + jnz introm1fin + add mapy,10 + mov nowinnewroom,1 +introm1fin: call showgamereel + ret + + endp + + + + +Candles proc near + + call checkspeed + jnz candlesfin + mov ax,[es:bx+3] + inc ax + cmp ax,167 + jnz gotcandles + mov ax,162 +gotcandles: mov [es:bx+3],ax +candlesfin: call showgamereel + ret + + endp + + + +Candles2 proc near + + call checkspeed + jnz candles2fin + mov ax,[es:bx+3] + inc ax + cmp ax,238 + jnz gotcandles2 + mov ax,233 +gotcandles2: mov [es:bx+3],ax +candles2fin: call showgamereel + ret + + endp + + + +Gates proc near + + call checkspeed + jnz gatesfin + mov ax,[es:bx+3] + inc ax + cmp ax,116 + jnz notbang + push ax bx es + mov al,17 ;12 + call playchannel1 + pop es bx ax +notbang: cmp ax,110 + jc slowgates + mov byte ptr [es:bx+5],2 +slowgates: cmp ax,120 + jnz gotgates + mov getback,1 + mov ax,119 +gotgates: mov [es:bx+3],ax + push es bx + call intro3text + pop bx es +gatesfin: call showgamereel + ret + + endp + + + + +Intromagic2 proc near + + call checkspeed + jnz introm2fin + mov ax,[es:bx+3] + inc ax + cmp ax,216 + jnz gotintrom2 + mov ax,192 +gotintrom2: mov [es:bx+3],ax +introm2fin: call showgamereel + ret + + endp + + + + +Intromagic3 proc near + + call checkspeed + jnz introm3fin + mov ax,[es:bx+3] + inc ax + cmp ax,218 + jnz gotintrom3 + mov getback,1 +gotintrom3: mov [es:bx+3],ax +introm3fin: call showgamereel + mov al,mapx + mov [es:bx+1],al + ret + + endp + + + + + + + +Intromonks1 proc near + + call checkspeed + jnz intromonk1fin + mov ax,[es:bx+3] + inc ax + cmp ax,80 + jnz notendmonk1 + add mapy,10 + mov nowinnewroom,1 + call showgamereel + ret +notendmonk1: cmp ax,30 + jnz gotintromonk1 + sub mapy,10 + mov nowinnewroom,1 + mov ax,51 +gotintromonk1: mov [es:bx+3],ax + cmp ax,5 + jz waitstep + cmp ax,15 + jz waitstep + cmp ax,25 + jz waitstep + cmp ax,61 + jz waitstep + cmp ax,71 + jz waitstep + jmp intromonk1fin +waitstep: push es bx + call intro2text + pop bx es + mov byte ptr [es:bx+6],-20 +intromonk1fin: call showgamereel + mov al,mapy + mov [es:bx+2],al + ret + + endp + + + + +Intromonks2 proc near + + call checkspeed + jnz intromonk2fin + mov ax,[es:bx+3] + inc ax + cmp ax,87 + jnz nottalk1 + inc introcount + push es bx + call monks2text + pop bx es + cmp introcount,19 + jnz notlasttalk1 + mov ax,87 + jmp gotintromonk2 +notlasttalk1: mov ax,74 + jmp gotintromonk2 + +nottalk1: cmp ax,110 + jnz notraisearm + inc introcount + push es bx + call monks2text + pop bx es + if cd + if german + cmp introcount,42 + else + cmp introcount,35 + endif + else + cmp introcount,35 + endif + jnz notlastraise + mov ax,111 + jmp gotintromonk2 +notlastraise: mov ax,98 + jmp gotintromonk2 + +notraisearm: cmp ax,176 + jnz notendmonk2 + mov getback,1 + jmp gotintromonk2 +notendmonk2: cmp ax,125 + jnz gotintromonk2 + mov ax,140 +gotintromonk2: mov [es:bx+3],ax +intromonk2fin: call showgamereel + ret + + endp + + + + + +Handclap proc near + + ret + + endp + + + + + if german + if cd + +Monks2text proc near + + cmp introcount,1 + jnz notmonk2text1 + mov al,8 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text1: cmp introcount,5 + jnz notmonk2text2 + mov al,9 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text2: cmp introcount,9 + jnz notmonk2text3 + mov al,10 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text3: cmp introcount,13 + jnz notmonk2text4 + mov introcount,14 + mov al,11 + mov bl,0 + mov bh,105 + mov cx,100 + jmp gotmonks2text +notmonk2text4: cmp introcount,19 + jnz notmonk2text7 + mov al,14 + mov bl,36 + mov bh,160 + mov cx,100 ;32 + mov dx,1 + mov ah,82 + jmp setuptimedtemp +notmonk2text7: cmp introcount,23 + jnz notmonk2text8 + mov al,15 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text8: cmp introcount,27 + jnz notmonk2text9 + mov al,16 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text9: cmp introcount,30 + jnz notmonk2text10 + mov al,17 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text10: cmp introcount,35 + jnz notmonk2text11 + mov al,18 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text11: ret + +gotmonks2text: mov dx,1 + mov cx,120 + mov ah,82 + call setuptimedtemp + ret + + endp + + else + +Monks2text proc near + + cmp introcount,1 + jnz notmonk2text1 + mov al,8 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text1: cmp introcount,4 + jnz notmonk2text2 + mov al,9 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text2: cmp introcount,7 + jnz notmonk2text3 + mov al,10 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text3: cmp introcount,10 + jnz notmonk2text4 + if cd + mov introcount,12 + endif + mov al,11 + mov bl,0 + mov bh,105 + mov cx,100 + jmp gotmonks2text +notmonk2text4: cmp introcount,13 + jnz notmonk2text5 + if cd + mov introcount,17; 18 + ret + endif + mov al,12 + mov bl,0 + mov bh,120 + mov cx,100 + jmp gotmonks2text +notmonk2text5: cmp introcount,16 + jnz notmonk2text6 + mov al,13 + mov bl,0 + mov bh,135 + mov cx,100 + jmp gotmonks2text +notmonk2text6: cmp introcount,19 + jnz notmonk2text7 + mov al,14 + mov bl,36 + mov bh,160 + mov cx,100 ;32 + mov dx,1 + mov ah,82 + jmp setuptimedtemp +notmonk2text7: cmp introcount,22 + jnz notmonk2text8 + mov al,15 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text8: cmp introcount,25 + jnz notmonk2text9 + mov al,16 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text9: if cd + cmp introcount,27 + else + cmp introcount,28 + endif + jnz notmonk2text10 + mov al,17 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text10: cmp introcount,31 + jnz notmonk2text11 + mov al,18 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text11: ret + +gotmonks2text: mov dx,1 + mov cx,120 + mov ah,82 + call setuptimedtemp + ret + + endp + + + endif + else + +Monks2text proc near + + cmp introcount,1 + jnz notmonk2text1 + mov al,8 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text1: cmp introcount,4 + jnz notmonk2text2 + mov al,9 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text2: cmp introcount,7 + jnz notmonk2text3 + mov al,10 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text3: cmp introcount,10 + jnz notmonk2text4 + if cd + mov introcount,12 + endif + mov al,11 + mov bl,0 + mov bh,105 + mov cx,100 + jmp gotmonks2text +notmonk2text4: cmp introcount,13 + jnz notmonk2text5 + if cd + mov introcount,17; 18 + ret + endif + mov al,12 + mov bl,0 + mov bh,120 + mov cx,100 + jmp gotmonks2text +notmonk2text5: cmp introcount,16 + jnz notmonk2text6 + mov al,13 + mov bl,0 + mov bh,135 + mov cx,100 + jmp gotmonks2text +notmonk2text6: cmp introcount,19 + jnz notmonk2text7 + mov al,14 + mov bl,36 + mov bh,160 + mov cx,100 ;32 + mov dx,1 + mov ah,82 + jmp setuptimedtemp +notmonk2text7: cmp introcount,22 + jnz notmonk2text8 + mov al,15 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text8: cmp introcount,25 + jnz notmonk2text9 + mov al,16 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text9: if cd + cmp introcount,27 + else + cmp introcount,28 + endif + jnz notmonk2text10 + mov al,17 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text10: cmp introcount,31 + jnz notmonk2text11 + mov al,18 + mov bl,36 + mov bh,160 + mov cx,100 + jmp gotmonks2text +notmonk2text11: ret + +gotmonks2text: mov dx,1 + mov cx,120 + mov ah,82 + call setuptimedtemp + ret + + endp + + endif + + + + + + +Intro1text proc near + + cmp introcount,2 + jnz notintro1text1 + mov al,40 + mov bl,34 + mov bh,130 + mov cx,90 + jmp gotintro1text +notintro1text1: cmp introcount,4 + jnz notintro1text2 + mov al,41 + mov bl,34 + mov bh,130 + mov cx,90 + jmp gotintro1text +notintro1text2: cmp introcount,6 + jnz notintro1text3 + mov al,42 + mov bl,34 + mov bh,130 + mov cx,90 + jmp gotintro1text +notintro1text3: ret + +gotintro1text: mov dx,1 + mov ah,82 + if cd + cmp ch1playing,255 + jz oktalk2 + dec introcount + ret + endif +oktalk2: call setuptimedtemp + ret + + endp + + + +Intro2text proc near + + cmp ax,5 + jnz notintro2text1 + mov al,43 + mov bl,34 + mov bh,40 + mov cx,90 + jmp gotintro2text +notintro2text1: cmp ax,15 + jnz notintro2text2 + mov al,44 + mov bl,34 + mov bh,40 + mov cx,90 + jmp gotintro2text +notintro2text2: ret + +gotintro2text: mov dx,1 + mov ah,82 + call setuptimedtemp + ret + + endp + + + + + + +Intro3text proc near + + cmp ax,107 + jnz notintro3text1 + mov al,45 + mov bl,36 + mov bh,56 + mov cx,100 + jmp gotintro3text +notintro3text1: if cd + cmp ax,108 + else + cmp ax,109 + endif + jnz notintro3text2 + mov al,46 + mov bl,36 + mov bh,56 + mov cx,100 + jmp gotintro3text +notintro3text2: ret + +gotintro3text: mov dx,1 + mov ah,82 + call setuptimedtemp + ret + + endp + + + + + + + +Monkandryan proc near + + call checkspeed + jnz notmonkryan + mov ax,[es:bx+3] + inc ax + cmp ax,83 + jnz gotmonkryan + inc introcount + push es bx + call textformonk + pop bx es + mov ax,77 + cmp introcount,57 + jnz gotmonkryan + mov getback,1 + ret +gotmonkryan: mov [es:bx+3],ax +notmonkryan: call showgamereel + ret + + endp + + + + + +Endgameseq proc near + + call checkspeed + jnz notendseq + mov ax,[es:bx+3] + inc ax + cmp ax,51 + jnz gotendseq + cmp introcount,140 + jz gotendseq + inc introcount + push es bx + call textforend + pop bx es + mov ax,50 +gotendseq: mov [es:bx+3],ax + cmp ax,134 + jnz notfadedown + push es bx ax + call fadescreendownhalf + pop ax bx es + jmp notendseq +notfadedown: cmp ax,324 + jnz notfadeend + push es bx ax + call fadescreendowns + mov volumeto,7 + mov volumedirection,1 + pop ax bx es +notfadeend: cmp ax,340 + jnz notendseq + mov getback,1 +notendseq: call showgamereel + mov al,mapy + mov [es:bx+2],al + mov ax,[es:bx+3] + cmp ax,145 + jnz notendcreds + mov word ptr [es:bx+3],146 + call rollendcredits +notendcreds: ret + + endp + + + + + + +Rollendcredits proc near + + mov al,16 + mov ah,255 + call playchannel0 + mov volume,7 + mov volumeto,0 + mov volumedirection,-1 + + mov cl,160 + mov ch,160 + mov di,75 + mov bx,20 + mov ds,mapstore + mov si,0 + call multiget + + mov es,textfile1 + mov si,3*2 + mov ax,[es:si] + mov si,ax + add si,textstart + + mov cx,254 +endcredits1: push cx + + mov bx,10 + mov cx,linespacing +endcredits2: push cx si di es bx + + call vsync + mov cl,160 + mov ch,160 + mov di,75 + mov bx,20 + mov ds,mapstore + mov si,0 + call multiput + call vsync + pop bx es di si + push si di es bx + + mov cx,18 +onelot: push cx + mov di,75 + mov dx,161 + mov ax,0 + call printdirect + add bx,linespacing + pop cx + loop onelot + + call vsync + mov cl,160 + mov ch,160 + mov di,75 + mov bx,20 + call multidump + + pop bx es di si cx + dec bx + loop endcredits2 + pop cx +looknext: mov al,[es:si] + inc si + cmp al,":" + jz gotnext + cmp al,0 + jz gotnext + jmp looknext +gotnext: loop endcredits1 + + mov cx,100 + call hangon + call paneltomap + call fadescreenuphalf + ret + + endp + + + + + + +Priest proc near + + cmp word ptr [es:bx+3],8 + jz priestspoken + mov pointermode,0 + mov watchingtime,2 + call checkspeed + jnz priestwait + inc word ptr [es:bx+3] + push es bx + call priesttext + pop bx es +priestwait: ret + +priestspoken: ret + + endp + + + + + + +Madmanstelly proc near + + mov ax,[es:bx+3] + inc ax + cmp ax,307 + jnz notendtelly + mov ax,300 +notendtelly: mov [es:bx+3],ax + call showgamereel + ret + + endp + + + + + +Madman proc near + + mov watchingtime,2 + call checkspeed + jnz nomadspeed + mov ax,[es:bx+3] + cmp ax,364 + jnc ryansded + cmp ax,10 + jnz notfirstmad + push es bx ax + mov dx,offset cs:introtextname + call loadtemptext + pop ax bx es + mov combatcount,-1 + mov speechcount,0 +notfirstmad: inc ax + cmp ax,294 + jz madmanspoken + cmp ax,66 + jnz nomadspeak + inc combatcount + push es bx + call madmantext + pop bx es + mov ax,53 + if cd + cmp combatcount,64 + else + cmp combatcount,62 + endif + jc nomadspeak + if cd + cmp combatcount,70 + else + cmp combatcount,68 + endif + jz killryan + cmp lastweapon,8 + jnz nomadspeak + if cd + mov combatcount,72 + else + mov combatcount,70 + endif + mov lastweapon,-1 + mov madmanflag,1 + mov ax,67 + jmp nomadspeak +killryan: mov ax,310 +nomadspeak: mov [es:bx+3],ax +nomadspeed: call showgamereel + mov al,mapx + mov [es:bx+1],al + call madmode + ret +madmanspoken: cmp wongame,1 + jz alreadywon + mov wongame,1 + push es bx + call getridoftemptext + pop bx es +alreadywon: ret + +ryansded: mov mandead,2 + call showgamereel + ret + + endp + + + + + + + + + + if cd +Madmantext proc near + + cmp speechcount,63 + jnc nomadtext + cmp ch1playing,255 + jnz nomadtext + + mov al,speechcount + inc speechcount + add al,47 + mov bl,72 + mov bh,80 + mov cx,90 + mov dx,1 + mov ah,82 + call setuptimedtemp +nomadtext: ret + + endp + + else + +Madmantext proc near + + cmp combatcount,61 + jnc nomadtext + mov al,combatcount + and al,3 + jnz nomadtext + mov al,combatcount + shr al,1 + shr al,1 + add al,47 + mov bl,72 + mov bh,80 + mov cx,90 + mov dx,1 + mov ah,82 + call setuptimedtemp +nomadtext: ret + + endp + endif + + + + +Madmode proc near + + mov watchingtime,2 + mov pointermode,0 + if cd + cmp combatcount,65 + else + cmp combatcount,63 + endif + jc iswatchmad + if cd + cmp combatcount,70 + else + cmp combatcount,68 + endif + jnc iswatchmad + mov pointermode,2 +iswatchmad: ret + + endp + + + + + +Priesttext proc near + + cmp word ptr [es:bx+3],2 + jc nopriesttext + cmp word ptr [es:bx+3],7 + jnc nopriesttext + mov al,[es:bx+3] + and al,1 + jnz nopriesttext + mov al,[es:bx+3] + shr al,1 + add al,50 + mov bl,72 + mov bh,80 + mov cx,54 + mov dx,1 + call setuptimeduse +nopriesttext: ret + + endp + + + + +Textforend proc near + + cmp introcount,20 + jnz notendtext1 + mov al,0 + mov bl,34 + mov bh,20 + mov cx,60 + jmp gotendtext +notendtext1: if cd + cmp introcount,50 + else + cmp introcount,65 + endif + jnz notendtext2 + mov al,1 + mov bl,34 + mov bh,20 + mov cx,60 + jmp gotendtext +notendtext2: if cd + cmp introcount,85 + else + cmp introcount,110 + endif + jnz notendtext3 + mov al,2 + mov bl,34 + mov bh,20 + mov cx,60 + jmp gotendtext +notendtext3: ret + +gotendtext: mov dx,1 + mov ah,83 + call setuptimedtemp + ret + + endp + + + + + + + + +Textformonk proc near + + cmp introcount,1 + jnz notmonktext1 + mov al,19 + mov bl,68 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext1: cmp introcount,5 + jnz notmonktext2 + mov al,20 + mov bl,68 + mov bh,38 + mov cx,120 + jmp gotmonktext +notmonktext2: cmp introcount,9 + jnz notmonktext3 + mov al,21 + mov bl,48 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext3: cmp introcount,13 + jnz notmonktext4 + mov al,22 + mov bl,68 + mov bh,38 + mov cx,120 + jmp gotmonktext +notmonktext4: if cd + cmp introcount,15 + else + cmp introcount,17 + endif + jnz notmonktext5 + mov al,23 + mov bl,68 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext5: cmp introcount,21 + jnz notmonktext6 + mov al,24 + mov bl,68 + mov bh,38 + mov cx,120 + jmp gotmonktext +notmonktext6: cmp introcount,25 + jnz notmonktext7 + mov al,25 + mov bl,68 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext7: cmp introcount,29 + jnz notmonktext8 + mov al,26 + mov bl,68 + mov bh,38 + mov cx,120 + jmp gotmonktext +notmonktext8: cmp introcount,33 + jnz notmonktext9 + mov al,27 + mov bl,68 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext9: cmp introcount,37 + jnz notmonktext10 + mov al,28 + mov bl,68 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext10: cmp introcount,41 + jnz notmonktext11 + mov al,29 + mov bl,68 + mov bh,38 + mov cx,120 + jmp gotmonktext +notmonktext11: cmp introcount,45 + jnz notmonktext12 + mov al,30 + mov bl,68 + mov bh,154 + mov cx,120 + jmp gotmonktext +notmonktext12: if cd + cmp introcount,52 + else + cmp introcount,49 + endif + jnz notmonktext13 + mov al,31 + mov bl,68 + mov bh,154 + mov cx,220 ;132 + jmp gotmonktext +notmonktext13: cmp introcount,53 + jnz notendtitles + call fadescreendowns + if cd + mov volumeto,7 + mov volumedirection,1 + endif +notendtitles: ret + +gotmonktext: mov dx,1 + mov ah,82 + if cd + cmp ch1playing,255 + jz oktalk + dec introcount + ret + endif +oktalk: call setuptimedtemp + ret + + endp + + + + + + + + + + +Drunk proc near + + cmp generaldead,0 + jnz trampgone + mov al,[es:bx+7] + and al,127 + mov [es:bx+7],al + call showgamereel + call addtopeoplelist +trampgone: ret + + endp + + +Advisor proc near + + call checkspeed + jnz noadvisor + jmp noadvisor + mov ax,[es:bx+3] + inc ax + cmp ax,123 + jnz notendadvis + mov ax,106 + jmp gotadvframe +notendadvis: cmp ax,108 + jnz gotadvframe + push ax + call randomnumber + mov cl,al + pop ax + cmp cl,3 + jc gotadvframe + mov ax,106 +gotadvframe: mov [es:bx+3],ax +noadvisor: call showgamereel + call addtopeoplelist + ret + + endp + + + +Copper proc near + + call checkspeed + jnz nocopper + mov ax,[es:bx+3] + inc ax + cmp ax,94 + jnz notendcopper + mov ax,64 + jmp gotcopframe +notendcopper: cmp ax,81 + jz mightwait + cmp ax,66 + jnz gotcopframe +mightwait: push ax + call randomnumber + mov cl,al + pop ax + cmp cl,7 + jc gotcopframe + dec ax +gotcopframe: mov [es:bx+3],ax +nocopper: call showgamereel + call addtopeoplelist + ret + + endp + + + + + + + + + + +Sparky proc near + + cmp card1money,0 + jz animsparky + mov byte ptr [es:bx+7],3 + jmp animsparky + +animsparky: call checkspeed + jnz finishsparky + cmp word ptr [es:bx+3],34 + jnz notsparky1 + call randomnumber + cmp al,30 + jc dosparky + mov word ptr [es:bx+3],27 + jmp finishsparky + +notsparky1: cmp word ptr [es:bx+3],48 + jnz dosparky + mov word ptr [es:bx+3],27 + jmp finishsparky + +dosparky: inc word ptr [es:bx+3] +finishsparky: call showgamereel + call addtopeoplelist + + mov al,[es:bx+7] + and al,128 + jz nottalkedsparky + mov talkedtosparky,1 +nottalkedsparky: ret + + endp + + + + + +Train proc near + + ret + mov ax,[es:bx+3] + cmp ax,21 + jnc notrainyet + inc ax + jmp gottrainframe +notrainyet: call randomnumber + cmp al,253 + jc notrainatall + cmp manspath,5 + jnz notrainatall + cmp finaldest,5 + jnz notrainatall + mov ax,5 +gottrainframe: mov [es:bx+3],ax + call showgamereel +notrainatall: ret + + endp + + + + + + + +Addtopeoplelist proc near + + push es bx bx + mov cl,[es:bx+7] + mov ax,[es:bx+3] + mov bx,listpos + mov es,buffers + mov [es:bx],ax ;reel pointer position + pop ax + mov [es:bx+2],ax + mov [es:bx+4],cl ;coversation number + pop bx es + add listpos,5 + ret + + endp + + + +Showgamereel proc near + + mov ax,[es:bx+3] + cmp ax,512 + jnc noshow + mov reelpointer,ax + push es bx + call plotreel + pop bx es + mov ax,reelpointer + mov [es:bx+3],ax +noshow: ret + + endp + + + + + + +Checkspeed proc near + + cmp lastweapon,-1 + jnz forcenext + inc byte ptr [es:bx+6] + mov al,[es:bx+6] + cmp al,[es:bx+5] + jnz notspeed + mov al,0 + mov [es:bx+6],al + cmp al,al +notspeed: ret + +forcenext: cmp al,al + ret + + endp + + + + + + + + + + +;------------------------------------------------------------Sprite Routines---- + + + +Clearsprites proc near + + mov es,buffers + mov di,spritetable + mov al,255 + mov cx,tablesize*16 + rep stosb + ret + + endp + + + + +Makesprite proc near ;si holds x,y cx holds update + ;di,dx holds data offset,seg + mov es,buffers + mov bx,spritetable +$17: cmp byte ptr [es:bx+15],255 + jz $17a + add bx,tablesize + jmp $17 + +$17a: mov [es:bx],cx + mov [es:bx+10],si + mov [es:bx+6],dx + mov [es:bx+8],di + mov [es:bx+2],0ffffh + mov byte ptr [es:bx+15],0 + mov byte ptr [es:bx+18],0 + ret + + endp + + + + + + + + + + +Delsprite proc near + + mov di,bx + mov cx,tablesize + mov al,255 + rep stosb + ret + + endp + + + + + + + + + + +Spriteupdate proc near + + mov es,buffers + mov bx,spritetable + mov al,ryanon + mov byte ptr [es:bx+31],al + + mov es,buffers + mov bx,spritetable + mov cx,16 +$18: push cx bx + mov ax,[es:bx] + cmp ax,0ffffh + jz $18a + push es ds + mov cx,[es:bx+2] + mov [es:bx+24],cx + call ax + pop ds es +$18a: pop bx cx + cmp nowinnewroom,1 + jz $18b + add bx,tablesize + loop $18 + +$18b: ret + + endp + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Printsprites proc near + + mov es,buffers + mov cx,0 +priorityloop: push cx + mov priority,cl + mov bx,spritetable + mov cx,16 +prtspriteloop: push cx bx + mov ax,[es:bx] + cmp ax,0ffffh + jz skipsprite + mov al,priority + cmp al,[es:bx+23] + jnz skipsprite + cmp byte ptr [es:bx+31],1 + jz skipsprite + call printasprite +skipsprite: pop bx cx + add bx,tablesize + loop prtspriteloop + pop cx + inc cx + cmp cx,7 + jnz priorityloop + ret + + endp + + + + + + + + + + +Printasprite proc near + + push es bx + mov si,bx + mov ds,[es:si+6] + mov al,[es:si+11] + mov ah,0 + cmp al,220 + jc notnegative1 + mov ah,255 +notnegative1: mov bx,ax + add bx,mapady + mov al,[es:si+10] + mov ah,0 + cmp al,220 + jc notnegative2 + mov ah,255 +notnegative2: mov di,ax + add di,mapadx + mov al,[es:si+15] + mov ah,0 + cmp byte ptr [es:si+30],0 + jz steadyframe + mov ah,8 +steadyframe: cmp priority,6 + jnz notquickp +notquickp: call showframe + pop bx es + ret + + endp + + + + +;cmp priority,6 +; ;jz quicksprite ; WIll NEED TO DO THIS LATER!!!!! +;Quicksprite: mov cl,al +; mov ch,0 +; mov dx,[es:bx+6] +; mov es,workspace +; mov ds,dx +; mov bx,ax +; mov dx,vgawidth +; +;printquickloop: push di si +; +; push si +; add si,cx +; dec si +; jmp startzero +;zeroloop: dec si +; dec cl +;startzero: cmp [si],ch +; jz zeroloop +; pop si +; +;;printquickline: cmp [si],ch +; jnz foundfirstpix +; inc si +; inc di +; dec cl +; jnz printquickline +; +;foundfirstpix: cmp cl,0 +; jz finquickspr +; rep movsb +; +;finquickspr: pop si di +; mov cl,bl +; add si,cx +; add di,dx +; dec bh +; jnz printquickloop +; +; pop bx ds es +; ret + + + + + + + +;Calcframe proc near +; +; ret +; +; mov al,[es:bx+15] +; mov ah,0 +; mov cx,6 +; mul cx +; add ax,[es:bx+8] +; +; mov dx,[es:bx+6] +; push bx +; mov ds,dx +; mov bx,ax +; mov ax,[bx] +; mov cx,[bx+2] +; mov dx,[bx+4] +; pop bx +; mov [es:bx+2],ax +; add cx,[es:bx+8] +; add cx,2080 +; mov [es:bx+4],cx ;calculates frame data +; +; mov al,[es:bx+10] ;this bit calculates the actual +; add al,dl ;x and y (including any offset) +; mov [es:bx+12],al +; mov al,[es:bx+11] +; add al,dh +; mov [es:bx+13],al +; ret +; +; endp + + + + + + + + + + + + + + + + + + + + +Checkone proc near ;cx=x,y to check + + push cx + mov al,ch + mov ah,0 + mov cl,4 + shr ax,cl + mov dl,al + pop cx + mov al,cl + mov ah,0 + mov cl,4 + shr ax,cl + mov ah,dl ; al,ah holds x,y in blocks + + push ax + mov ch,0 + mov cl,al + push cx + mov al,ah + mov ah,0 + mov cx,11 + mul cx + pop cx + add ax,cx + + mov cx,3 + mul cx + mov si,ax + + mov ds,buffers + add si,mapflags + lodsw + mov cx,ax + lodsb + pop dx + ret + + + endp + + + + + + + + + + + + + + + + + + +Findsource proc near + + mov ax,currentframe + cmp ax,160 + jnc over1000 + mov ds,reel1 + mov takeoff,0 + ret +over1000: cmp ax,320 + jnc over1001 + mov ds,reel2 + mov takeoff,160 + ret +over1001: mov ds,reel3 + mov takeoff,320 + ret + + endp + + + + + + + + + + + +;---------------------------------------------------------Routines for Ryan---- + + +Initman proc near + + ;mov linepointer,254 + mov al,ryanx + mov ah,ryany + mov si,ax + mov cx,offset cs:mainman + mov dx,mainsprites + mov di,0 + call makesprite + mov byte ptr [es:bx+23],4 + mov byte ptr [es:bx+22],0 + mov byte ptr [es:bx+29],0 + ret + + endp + + + + + + + +Mainman proc near + + cmp resetmanxy,1 + jnz notinnewroom + mov resetmanxy,0 + mov al,ryanx + mov ah,ryany + mov [es:bx+10],ax + mov byte ptr [es:bx+29],0 + jmp executewalk +notinnewroom: dec byte ptr [es:bx+22] + cmp byte ptr [es:bx+22],-1 + jz executewalk + ret + + +executewalk: mov byte ptr [es:bx+22],0 ; speed + mov al,turntoface + cmp al,facing + jz facingok + call aboutturn + jmp notwalk + +facingok: cmp turndirection,0 + jz alreadyturned + cmp linepointer,254 + jnz alreadyturned + mov reasseschanges,1 + mov al,facing + cmp al,leavedirection + jnz alreadyturned + call checkforexit +alreadyturned: mov turndirection,0 + cmp linepointer,254 + jnz walkman + mov byte ptr [es:bx+29],0 + jmp notwalk + +walkman: mov al,[es:bx+29] + inc al + cmp al,11 + jnz notanimend1 + mov al,1 +notanimend1: mov [es:bx+29],al + + call walking + cmp linepointer,254 + jz afterwalk + + mov al,facing + and al,1 + jz isdouble + mov al,[es:bx+29] + cmp al,2 + jz afterwalk + cmp al,7 + jz afterwalk +isdouble: call walking +afterwalk: cmp linepointer,254 + jnz notwalk + mov al,turntoface + cmp al,facing + jnz notwalk + mov reasseschanges,1 + mov al,facing + cmp al,leavedirection + jnz notwalk + call checkforexit + +notwalk: mov al,facing + mov ah,0 + mov di,offset cs:facelist + add di,ax + mov al,[cs:di] + add al,[es:bx+29] + mov [es:bx+15],al + mov ax,[es:bx+10] + mov ryanx,al + mov ryany,ah + ret + +facelist: db 0,60,33,71,11,82,22,93 + + endp + + + + + + + + + + +Aboutturn proc near + + cmp turndirection,1 + jz incdir + cmp turndirection,-1 + jz decdir + mov al,facing + sub al,turntoface + jnc higher + neg al + cmp al,4 + jnc decdir + jmp incdir +higher: cmp al,4 + jnc incdir + jmp decdir + +incdir: mov turndirection,1 + mov al,facing + inc al + and al,7 + mov facing,al + mov byte ptr [es:bx+29],0 + ret + +decdir: mov turndirection,-1 + mov al,facing + dec al + and al,7 + mov facing,al + mov byte ptr [es:bx+29],0 + ret + + endp + + + + + + + + +Walking proc near + + cmp linedirection,0 + jz normalwalk + mov al,linepointer + dec al + mov linepointer,al + cmp al,200 + jnc endofline + jmp continuewalk + +normalwalk: mov al,linepointer + inc al + mov linepointer,al + cmp al,linelength + jnc endofline + +continuewalk: mov ah,0 + add ax,ax + push es bx + mov dx,seg linedata + mov es,dx + mov bx,offset es:linedata + add bx,ax + mov ax,[es:bx] + pop bx es +stillline: mov [es:bx+10],ax + ret + +endofline: mov linepointer,254 + mov al,destination + mov manspath,al + cmp al,finaldest + jz finishedwalk + mov al,finaldest + mov destination,al + push es bx + call autosetwalk + pop bx es + ret + +finishedwalk: call facerightway + ret + + endp + + + + + + + +Facerightway proc near + + push es bx ;Face object when finished + call getroomspaths ;walking + mov al,manspath + mov ah,0 + add ax,ax + add ax,ax + add ax,ax + add bx,ax + mov al,[es:bx+7] + mov turntoface,al + mov leavedirection,al + pop bx es + ret + + endp + + + + + + + +Checkforexit proc near + + mov cl,ryanx ;look under feet to see if + add cl,12 ;any flags are there + mov ch,ryany + add ch,12 + call checkone + mov lastflag,cl + mov lastflagex,ch + mov flagx,dl + mov flagy,dh + mov al,lastflag + + test al,64 + jz notnewdirect + mov al,lastflagex + mov autolocation,al + ret + +notnewdirect: test al,32 + jz notleave + push es bx + cmp reallocation,2 + jnz notlouis + mov bl,0 + push bx + mov al,"W" + mov ah,"E" + mov cl,"T" + mov ch,"A" + call isryanholding + pop bx + jz noshoe1 + inc bl +noshoe1: push bx + mov al,"W" + mov ah,"E" + mov cl,"T" + mov ch,"B" + call isryanholding + pop bx + jz noshoe2 + inc bl +noshoe2: cmp bl,2 + jz notlouis + mov al,42 + cmp bl,0 + jz notravmessage + inc al +notravmessage: mov cx,80 + mov dx,10 + mov bl,68 + mov bh,64 + call setuptimeduse + mov al,facing + add al,4 + and al,7 + mov turntoface,al + pop bx es + ret + +notlouis: pop bx es + mov needtotravel,1 + ret + + + +notleave: test al,4 + jz notaleft + call adjustleft + ret + +notaleft: test al,2 + jz notaright + call adjustright + ret + +notaright: test al,8 + jz notadown + call adjustdown + ret + +notadown: test al,16 + jz notanup + call adjustup + ret + +notanup: ret + + endp + + + + + +Adjustdown proc near + + push es bx + add mapy,10 + mov al,lastflagex + mov cl,16 + mul cl + mov [es:bx+11],al + mov nowinnewroom,1 + pop bx es + ret + + endp + + + + +Adjustup proc near + + push es bx + sub mapy,10 + mov al,lastflagex + mov cl,16 + mul cl + mov [es:bx+11],al + mov nowinnewroom,1 + pop bx es + ret + + endp + + + + + +Adjustleft proc near + + push es bx + mov lastflag,0 + sub mapx,11 + mov al,lastflagex + mov cl,16 + mul cl + mov [es:bx+10],al + mov nowinnewroom,1 + pop bx es + ret + + endp + + + + + + +Adjustright proc near + + push es bx + add mapx,11 + mov al,lastflagex + mov cl,16 + mul cl + sub al,2 + mov [es:bx+10],al + mov nowinnewroom,1 + pop bx es + ret + + endp + + + + + +Reminders proc nar + + cmp reallocation,24 + jnz notinedenslift + cmp mapx,44 + jnz notinedenslift + cmp progresspoints,0 + jnz notfirst + mov al,"D" + mov ah,"K" + mov cl,"E" + mov ch,"Y" + call isryanholding + jz forgotone + mov al,"C" + mov ah,"S" + mov cl,"H" + mov ch,"R" + call findexobject + cmp al,numexobjects + jz forgotone + mov ax,[es:bx+2] + cmp al,4 + jnz forgotone ;card is in inventory + cmp ah,255 + jz havegotcard ;card must be in an ex + mov cl,"P" ;object + mov ch,"U" + mov dl,"R" + mov dh,"S" + xchg al,ah + call compare + jnz forgotone ;is it in wallet? +havegotcard: inc progresspoints +notfirst: ret + +forgotone: mov al,50 ;message number + mov bl,54 ;x pos of message + mov bh,70 ;and y pos + mov cx,48 ;time on screen + mov dx,8 ;pause before show + call setuptimeduse + ret +notinedenslift: ret + + endp + + + + + +;--------------------------------------------------------------------------- +; +; Sprite update routines for rain effect +; +;--------------------------------------------------------------------------- + + + + +Initrain proc near + + mov es,buffers + mov di,rainlist + mov bx,offset cs:rainlocations +checkmorerain: mov al,[cs:bx] + cmp al,255 + jz finishinitrain + cmp al,reallocation + jnz checkrain + mov al,[cs:bx+1] + cmp al,mapx + jnz checkrain + mov al,[cs:bx+2] + cmp al,mapy + jnz checkrain + mov al,[cs:bx+3] + mov rainspace,al + jmp dorain +checkrain: add bx,4 + jmp checkmorerain + +dorain: mov cx,4 +initraintop: call randomnumber + and al,31 + add al,3 + cmp al,rainspace + jnc initraintop + add cl,al + cmp cl,mapxsize + jnc initrainside + push cx + call splitintolines + pop cx + jmp initraintop + +initrainside: mov cl,mapxsize + dec cl +initrainside2: call randomnumber + and al,31 + add al,3 + cmp al,rainspace + jnc initrainside2 + add ch,al + cmp ch,mapysize + jnc finishinitrain + push cx + call splitintolines + pop cx + jmp initrainside2 +finishinitrain: mov al,255 + stosb + ret + +rainlocations: db 1,44,10,16 ;location,map x,y,seed + db 4,11,30,14 + db 4,22,30,14 + db 3,33,10,14 + db 10,33,30,14 + db 10,22,30,24 + db 9,22,10,14 + db 2,33,0,14 + db 2,22,0,14 + db 6,11,30,14 + db 7,11,20,18 + db 7,0,20,18 + db 7,0,30,18 + db 55,44,0,14 + db 5,22,30,14 + + db 8,0,10,18 + db 8,11,10,18 + db 8,22,10,18 + db 8,33,10,18 + db 8,33,20,18 + db 8,33,30,18 + db 8,33,40,18 + db 8,22,40,18 + db 8,11,40,18 + + db 21,44,20,18 + db 255 + + endp + + + + + + + + + + +Splitintolines proc near + + +lookforlinestart: call getblockofpixel + cmp al,0 + jnz foundlinestart + dec cl + inc ch + cmp cl,0 + jz endofthisline + cmp ch,mapysize + jnc endofthisline + jmp lookforlinestart + +foundlinestart: mov [es:di],cx + mov bh,1 +lookforlineend: call getblockofpixel + cmp al,0 + jz foundlineend + dec cl + inc ch + cmp cl,0 + jz foundlineend + cmp ch,mapysize + jnc foundlineend + inc bh + jmp lookforlineend + +foundlineend: push cx + mov [es:di+2],bh + call randomnumber + mov [es:di+3],al + call randomnumber + mov [es:di+4],al + call randomnumber + and al,3 + add al,4 + mov [es:di+5],al + add di,6 + pop cx + cmp cl,0 + jz endofthisline + cmp ch,mapysize + jnc endofthisline + jmp lookforlinestart + +endofthisline: ret + + endp + + + + +Getblockofpixel proc near + + push cx es di + mov ax,mapxstart + add cl,al + mov ax,mapystart + add ch,al + call checkone + and cl,1 + jnz failrain + pop di es cx + ret +failrain: pop di es cx + mov al,0 + ret + + endp + + + + +Showrain proc near + + mov ds,mainsprites + mov si,6*58 + mov ax,[si+2] + mov si,ax + add si,2080 + + mov bx,rainlist + mov es,buffers + cmp byte ptr [es:bx],255 + jz nothunder + +morerain: mov es,buffers + cmp byte ptr [es:bx],255 + jz finishrain + + mov al,[es:bx+1] + mov ah,0 + add ax,mapady + add ax,mapystart + mov cx,320 + mul cx + mov cl,[es:bx] + mov ch,0 + add ax,cx + add ax,mapadx + add ax,mapxstart + mov di,ax + + mov cl,[es:bx+2] + mov ch,0 + mov ax,[es:bx+3] + mov dl,[es:bx+5] + mov dh,0 + sub ax,dx + and ax,511 + mov [es:bx+3],ax + add bx,6 + + push si + add si,ax + mov es,workspace + mov ah,0 + mov dx,320-2 +rainloop: lodsb + cmp al,ah + jz noplot + stosb + add di,dx + loop rainloop + pop si + jmp morerain +noplot: add di,320-1 + loop rainloop + pop si + jmp morerain + +finishrain: cmp ch1blockstocopy,0 + jnz nothunder + cmp reallocation,2 + jnz notlouisthund + cmp beenmugged,1 + jnz nothunder +notlouisthund: cmp reallocation,55 + jz nothunder + call randomnum1 + cmp al,1 + jnc nothunder + mov al,7 + cmp ch0playing,6 + jz isthunder1 + mov al,4 +isthunder1: call playchannel1 +nothunder: ret + + endp + + + + + + + +;--------------------------------------------------------------------------- +; +; Sprite update routines for background objects +; +;--------------------------------------------------------------------------- + + + + + + +Backobject proc near + + mov ds,setdat + mov di,[es:bx+20] + + mov al,[es:bx+18] + cmp al,0 + jz $48z + dec al + mov [es:bx+18],al + jmp finishback + +$48z: mov al,[di+7] + mov [es:bx+18],al + mov al,[di+8] + cmp al,6 + jnz notwidedoor + call widedoor + jmp finishback + +notwidedoor: cmp al,5 + jnz notrandom + call random + jmp finishback + +notrandom: cmp al,4 + jnz notlockdoor + call lockeddoorway + jmp finishback + +notlockdoor: cmp al,3 + jnz notlift + call liftsprite + jmp finishback + +notlift: cmp al,2 + jnz notdoor + call doorway + jmp finishback + +notdoor: cmp al,1 + jnz steadyob + call constant + jmp finishback + +steadyob: call steady + +finishback: ;call calcframe + ret + + endp + + + + + + + + + +Liftsprite proc near + + mov al,liftflag + cmp al,0 + jz liftclosed + cmp al,1 + jz liftopen + cmp al,3 + jz openlift + + mov al,[es:bx+19] + cmp al,0 + jz finishclose + dec al + cmp al,11 + jnz pokelift + push ax + mov al,3 + call liftnoise + pop ax + jmp pokelift +finishclose: mov liftflag,0 + ret + +openlift: mov al,[es:bx+19] + cmp al,12 + jz endoflist + inc al + cmp al,1 + jnz pokelift + push ax + mov al,2 + call liftnoise + pop ax +pokelift: mov [es:bx+19],al + mov ah,0 + push di + add di,ax + mov al,[di+18] + pop di + mov [es:bx+15],al + mov [di+17],al + ret + +endoflist: mov liftflag,1 + ret + +liftopen: mov al,liftpath + push es bx + call turnpathon + pop bx es + cmp counttoclose,0 + jz nocountclose + dec counttoclose + cmp counttoclose,0 + jnz nocountclose + mov liftflag,2 +nocountclose: mov al,12 + jmp pokelift + +liftclosed: mov al,liftpath + push es bx + call turnpathoff + pop bx es + cmp counttoopen,0 + jz nocountopen + dec counttoopen + cmp counttoopen,0 + jnz nocountopen + mov liftflag,3 +nocountopen: mov al,0 + jmp pokelift + + endp + + +Liftnoise proc near + + cmp reallocation,5 + jz hissnoise + cmp reallocation,21 + jz hissnoise + call playchannel1 + ret +hissnoise: if demo + mov al,25 + else + mov al,13 + endif + call playchannel1 + ret + + endp + + + + +Random proc near + + call randomnum1 + push di + and ax,7 + add di,18 + add di,ax + mov al,[di] + pop di + mov [es:bx+15],al + ret + + endp + + + + + + + + +Steady proc near + + mov al,[di+18] + mov [di+17],al + mov [es:bx+15],al + ret + + endp + + + + + +Constant proc near + + inc byte ptr [es:bx+19] + mov cl,[es:bx+19] + mov ch,0 + add di,cx + cmp byte ptr [di+18],255 + jnz gotconst + sub di,cx + mov cx,0 + mov [es:bx+19],cl +gotconst: mov al,[di+18] + sub di,cx + mov [es:bx+15],al + mov [di+17],al + ret + + endp + + + + + + + + + + + + + + +Doorway proc near + + mov doorcheck1,-24 + mov doorcheck2,10 + mov doorcheck3,-30 + mov doorcheck4,10 + call dodoor + ret + + endp + + + +Widedoor proc near + + mov doorcheck1,-24 + mov doorcheck2,24 + mov doorcheck3,-30 + mov doorcheck4,24 + call dodoor + ret + + endp + + + + + + + + + +Dodoor proc near + + mov al,ryanx + mov ah,ryany + mov cl,[es:bx+10] + mov ch,[es:bx+11] + + cmp al,cl + jnc rtofdoor + sub al,cl + cmp al,doorcheck1 + jnc upordown + jmp shutdoor +rtofdoor: sub al,cl + cmp al,doorcheck2 + jnc shutdoor + +upordown: cmp ah,ch + jnc botofdoor + sub ah,ch + cmp ah,doorcheck3 + jc shutdoor + jmp opendoor +botofdoor: sub ah,ch + cmp ah,doorcheck4 + jnc shutdoor + +opendoor: mov cl,[es:bx+19] + cmp throughdoor,1 + jnz notthrough + cmp cl,0 + jnz notthrough + mov cl,6 +notthrough: inc cl + cmp cl,1 + jnz notdoorsound2 + mov al,0 + cmp reallocation,5 + jnz nothoteldoor2 + if demo + mov al,25 + else + mov al,13 + endif +nothoteldoor2: call playchannel1 +notdoorsound2: mov ch,0 + + push di + add di,cx + mov al,[di+18] ; must be a better way than this + cmp al,255 + jnz atlast1 + dec di + dec cl +atlast1: mov [es:bx+19],cl + mov al,[di+18] + pop di + mov [es:bx+15],al + mov [di+17],al + mov throughdoor,1 + ret + + +shutdoor: mov cl,[es:bx+19] + cmp cl,5 + jnz notdoorsound1 + mov al,1 + cmp reallocation,5 + jnz nothoteldoor1 + if demo + mov al,25 + else + mov al,13 + endif +nothoteldoor1: call playchannel1 +notdoorsound1: cmp cl,0 + jz atlast2 + dec cl + mov [es:bx+19],cl +atlast2: mov ch,0 + push di + add di,cx + mov al,[di+18] + pop di + mov [es:bx+15],al + mov [di+17],al + cmp cl,5 + jnz notnearly + mov throughdoor,0 +notnearly: ret + + endp + + + + + + + + +Lockeddoorway proc near + + mov al,ryanx + mov ah,ryany + mov cl,[es:bx+10] + mov ch,[es:bx+11] + + cmp al,cl + jnc rtofdoor2 + sub al,cl + cmp al,-24 + jnc upordown2 + jmp shutdoor2 +rtofdoor2: sub al,cl + cmp al,10 + jnc shutdoor2 + +upordown2: cmp ah,ch + jnc botofdoor2 + sub ah,ch + cmp ah,-30 + jc shutdoor2 + jmp opendoor2 +botofdoor2: sub ah,ch + cmp ah,12 + jnc shutdoor2 + +opendoor2: cmp throughdoor,1 + jz mustbeopen + cmp lockstatus,1 + jz shutdoor +mustbeopen: mov cl,[es:bx+19] + cmp cl,1 + jnz notdoorsound4 + mov al,0 + call playchannel1 +notdoorsound4: cmp cl,6 ; was 3 + jnz noturnonyet + mov al,doorpath + push es bx + call turnpathon + pop bx es + +noturnonyet: mov cl,[es:bx+19] + cmp throughdoor,1 + jnz notthrough2 + cmp cl,0 + jnz notthrough2 + mov cl,6 +notthrough2: inc cl + mov ch,0 + + push di + add di,cx + mov al,[di+18] + cmp al,255 + jnz atlast3 + dec di + dec cl +atlast3: mov [es:bx+19],cl + mov al,[di+18] + pop di + mov [es:bx+15],al + mov [di+17],al + cmp cl,5 + jnz justshutting + mov throughdoor,1 +justshutting: ret + + + +shutdoor2: mov cl,[es:bx+19] + cmp cl,5 + jnz notdoorsound3 + mov al,1 + call playchannel1 +notdoorsound3: cmp cl,0 + jz atlast4 + dec cl + mov [es:bx+19],cl +atlast4: mov ch,0 + mov throughdoor,0 + push di + add di,cx + mov al,[di+18] + pop di + mov [es:bx+15],al + mov [di+17],al + cmp cl,0 ;1 + jnz notlocky + mov al,doorpath + push es bx + call turnpathoff + pop bx es + mov lockstatus,1 +notlocky: ret + + endp + + + + + + + + + + +;------------------------------------------------------------People handler---- + +Updatepeople proc near + + mov es,buffers + mov di,peoplelist + mov listpos,di + mov cx,12*5 + mov al,255 + rep stosb + + inc maintimer + push cs + pop es + mov bx,offset cs:reelroutines + mov di,offset cs:reelcalls +updateloop: mov al,[es:bx] + cmp al,255 + jz endupdate + cmp al,reallocation + jnz notinthisroom + mov cx,[es:bx+1] + cmp cl,mapx + jnz notinthisroom + cmp ch,mapy + jnz notinthisroom + push di + mov ax,[cs:di] + call ax + pop di +notinthisroom: add bx,8 + add di,2 + jmp updateloop +endupdate: ret + + endp + + + + + + + + + + + + + + +Getreelframeax proc near + + push ds + mov currentframe,ax + call findsource + push ds + pop es + pop ds + mov ax,currentframe + sub ax,takeoff + add ax,ax + mov cx,ax + add ax,ax + add ax,cx + mov bx,ax + ret + + endp + + + + + + + + + + +Reelsonscreen proc near + + call reconstruct + call updatepeople + call watchreel + call showrain + call usetimedtext + ret + + endp + + + + + + +Plotreel proc near + + call getreelstart +retryreel: push es si + mov ax,[es:si+2] + cmp al,220 + jc normalreel + cmp al,255 + jz normalreel + call dealwithspecial + inc reelpointer + pop si es + add si,40 + jmp retryreel + +normalreel: mov cx,8 +plotloop: push cx es si + mov ax,[es:si] + cmp ax,0ffffh + jz notplot + call showreelframe +notplot: pop si es cx + add si,5 + loop plotloop + call soundonreels + pop bx es + ret + + endp + + + + + +Soundonreels proc near + + mov bl,reallocation + add bl,bl + xor bh,bh + add bx,offset cs:roombyroom + mov si,[cs:bx] + +reelsoundloop: mov al,[cs:si] + cmp al,255 + jz endreelsound + mov ax,[cs:si+1] + cmp ax,reelpointer + jnz skipreelsound + + cmp ax,lastsoundreel + jz skipreelsound + + mov lastsoundreel,ax + mov al,[cs:si] + cmp al,64 + jc playchannel1 + cmp al,128 + jc channel0once + and al,63 + mov ah,255 + jmp playchannel0 +channel0once: and al,63 + mov ah,0 + jmp playchannel0 +skipreelsound: add si,3 + jmp reelsoundloop +endreelsound: mov ax,lastsoundreel + cmp ax,reelpointer + jz nochange2 + mov lastsoundreel,-1 +nochange2: ret + +roombyroom dw r0,r1,r2,r0,r0,r0,r6,r0,r8,r9,r10,r11,r12,r13,r14,r0,r0,r0,r0,r0 + dw r20,r0,r22,r23,r0,r25,r26,r27,r28,r29,r0,r0,r0,r0,r0 + dw r0,r0,r0,r0,r0,r0,r0,r0,r0,r0,r45,r46,r47,r0,r0,r0,r0,r52,r53,r0,r55 + +r0 db 255 + +r1 db 15 + dw 257 + db 255 + +r2 db 12 + dw 5 + db 13 + dw 21 + db 15 ;hitting floor? + dw 35 + db 17 + dw 50 + db 18 + dw 103 + db 19 + dw 108 + db 255 + +r6 db 18 + dw 19 + db 19 + dw 23 + db 255 + +r8 db 12 + dw 51 + db 13 + dw 53 + db 14 + dw 14 + db 15 + dw 20 + db 0 + dw 78 + db 255 + +r9 db 12 + dw 119 + db 12 + dw 145 + db 255 + +r10 db 13 + dw 16 + db 255 + +r11 db 13 + dw 20 + db 255 + +r12 db 14 + dw 16 + db 255 + +r13 db 15 + dw 4 + db 16 + dw 8 + db 17 + dw 134 + db 18 + dw 153 + db 255 + +r14 db 13 + dw 108 + db 15 + dw 326 + db 15 + dw 331 + db 15 + dw 336 + db 15 + dw 342 + db 15 + dw 348 + db 15 + dw 354 + db 18 + dw 159 + db 18 + dw 178 + db 19+128 + dw 217 + db 20+64 + dw 228 + db 255 + +r20 db 13 + dw 20 + db 13 + dw 21 + db 15 + dw 34 + db 13 + dw 52 + db 13 + dw 55 + db 25 + dw 57 + db 21 + dw 73 + db 255 + +r22 db 13 ;room,sample + dw 196 ;reelpointer + db 13 + dw 234 + db 13 + dw 156 + db 14 + dw 129 + db 13 + dw 124 + db 15 + dw 162 + db 15 + dw 200 + db 15 + dw 239 + db 17 + dw 99 + db 12 + dw 52 + db 255 + +r23 db 15 + dw 56 + db 16 + dw 64 + db 19 + dw 22 + db 20 + dw 33 + db 255 + +r25 db 20 + dw 11 + db 20 + dw 15 + db 15 + dw 28 + db 13 + dw 80 + db 21 + dw 82 + db 19+128 + dw 87 + db 23+64 + dw 128 + db 255 + +r26 db 12 + dw 13 + db 14 + dw 39 + db 12 + dw 67 + db 12 + dw 75 + db 12 + dw 83 + db 12 + dw 91 + db 15 + dw 102 ; was 90, should be mine cart + db 255 + +r27 db 22 + dw 36 + db 13 + dw 125 + db 18 + dw 88 + db 15 + dw 107 + db 14 + dw 127 + db 14 + dw 154 + db 19+128 + dw 170 + db 23+64 + dw 232 + db 255 + +r28 db 21 + dw 16 + db 21 + dw 72 + db 21 + dw 205 + db 22 + dw 63 ;65 + db 23+128 + dw 99 + db 24+64 + dw 158 + db 255 + +r29 db 13 + dw 21 + db 14 + dw 24 + db 19+128 + dw 50 + db 23+64 + dw 75 + if german + else + db 24 + dw 128 + endif + db 255 + +r45 db 19+64 + dw 46 + db 16 + dw 167 + db 255 + +r46 db 16 + dw 19 + db 14 + dw 36 + db 16 + dw 50 + db 14 + dw 65 + db 16 + dw 81 + db 14 + dw 96 + db 16 + dw 114 + db 14 + dw 129 + db 16 + dw 147 + db 14 + dw 162 + db 16 + dw 177 + db 14 + dw 191 + db 255 + +r47 db 13 + dw 48 + db 14 + dw 41 + db 15 + dw 78 + db 16 + dw 92 + db 255 + +r52 db 16 + dw 115 + db 255 + +r53 db 21 + dw 103 + db 20 + dw 199 + db 255 + +r55 db 17 + dw 53 + db 17 + dw 54 + db 17 + dw 55 + db 17 + dw 56 + db 17 + dw 57 + db 17 + dw 58 + db 17 + dw 59 + db 17 + dw 61 + db 17 + dw 63 + db 17 + dw 64 + db 17 + dw 65 + db 255 + + endp + + + + + + + + + +Reconstruct proc near + + cmp havedoneobs,0 + jz noneedtorecon + mov newobs,1 + call drawfloor + call spriteupdate + call printsprites + if foreign + cmp reallocation,20 + jnz notfudge + call undertextline +notfudge: + endif + mov havedoneobs,0 +noneedtorecon: ret + + endp + + + + + + + + + + +Dealwithspecial proc near + + sub al,220 + cmp al,0 + jnz notplset + mov al,ah + call placesetobject + mov havedoneobs,1 + ret +notplset: cmp al,1 + jnz notremset + mov al,ah + call removesetobject + mov havedoneobs,1 + ret +notremset: cmp al,2 + jnz notplfree + mov al,ah + call placefreeobject + mov havedoneobs,1 + ret +notplfree: cmp al,3 + jnz notremfree + mov al,ah + call removefreeobject + mov havedoneobs,1 + ret +notremfree: cmp al,4 + jnz notryanoff + call switchryanoff + ret +notryanoff: cmp al,5 + jnz notryanon + mov turntoface,ah + mov facing,ah + call switchryanon + ret +notryanon: cmp al,6 + jnz notchangeloc + mov newlocation,ah ; was new loc in watch + ;call switchryanon + ret +notchangeloc: call movemap + ret + + endp + + + +Movemap proc near + + cmp ah,32 + jnz notmapup2 + sub mapy,20 + mov nowinnewroom,1 + ret + +notmapup2: cmp ah,16 + jnz notmapupspec + sub mapy,10 + mov nowinnewroom,1 + ret + +notmapupspec: cmp ah,8 + jnz notmapdownspec + add mapy,10 + mov nowinnewroom,1 + ret + +notmapdownspec: cmp ah,2 + jnz notmaprightspec + add mapx,11 + mov nowinnewroom,1 + ret + +notmaprightspec: sub mapx,11 + mov nowinnewroom,1 + ret + + endp + + + + +Getreelstart proc near + + mov ax,reelpointer + mov cx,40 + mul cx + mov es,reels + mov si,ax + add si,reellist + ret + + endp + + + + + +;------------------------------------------------------Printing a reel frame---- + + + +Showreelframe proc near + + mov al,[es:si+2] + mov ah,0 + mov di,ax + add di,mapadx + mov al,[es:si+3] + mov bx,ax + add bx,mapady + mov ax,[es:si] + mov currentframe,ax + call findsource + mov ax,currentframe + sub ax,takeoff + mov ah,8 + call showframe + ret + + endp + + + + + + +;------------------------------------------------------------------------------- + + + + + + + + + +Deleverything proc near + + mov al,mapysize + mov ah,0 + add ax,mapoffsety + cmp ax,182 + jnc bigroom + call maptopanel + ret +bigroom: sub mapysize,8 + call maptopanel + add mapysize,8 + ret + + endp + + + + + + + + + + + +Dumpeverything proc near + + mov es,buffers + mov bx,printedlist +dumpevery1: mov ax,[es:bx] + mov cx,[es:bx+2] + cmp ax,0ffffh + jz finishevery1 + cmp ax,[es:bx+(40*5)] + jnz notskip1 + cmp cx,[es:bx+(40*5)+2] + jz skip1 + +notskip1: push bx es ds + mov bl,ah + mov bh,0 + mov ah,0 + mov di,ax + add di,mapadx + add bx,mapady + call multidump + pop ds es bx + +skip1: add bx,5 + jmp dumpevery1 + +finishevery1: mov bx,printedlist+(40*5) +dumpevery2: mov ax,[es:bx] + mov cx,[es:bx+2] + cmp ax,0ffffh + jz finishevery2 + + push bx es ds + mov bl,ah + mov bh,0 + mov ah,0 + mov di,ax + add di,mapadx + add bx,mapady + call multidump + pop ds es bx + add bx,5 + jmp dumpevery2 + +finishevery2: ret + + endp + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/talk.asm b/devtools/tasmrecover/dreamweb/talk.asm new file mode 100644 index 0000000000..d2c27f059b --- /dev/null +++ b/devtools/tasmrecover/dreamweb/talk.asm @@ -0,0 +1,580 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +Talk proc near + + mov talkpos,0 + mov inmaparea,0 + mov al,command + mov character,al + call createpanel + call showpanel + call showman + call showexit + call undertextline + call convicons + call starttalk + mov commandtype,255 + call readmouse + call showpointer + call worktoscreen +waittalk: call delpointer + call readmouse + call animpointer + call showpointer + call vsync + call dumppointer + call dumptextline + mov getback,0 + mov bx,offset cs:talklist + call checkcoords + cmp getback,0 + jz waittalk +finishtalk: mov bx,persondata + push cs + pop es + cmp talkpos,4 + jc notnexttalk + mov al,[es:bx+7] + or al,128 + mov [es:bx+7],al +notnexttalk: call redrawmainscrn + call worktoscreenm + cmp speechloaded,1 + jnz nospeech + call cancelch1 + mov volumedirection,-1 ;fade (louder) + mov volumeto,0 ;up to 0 (max) +nospeech: ret + +talklist: dw 273,320,157,198,getback1 + dw 240,290,2,44,moretalk + dw 0,320,0,200,blank + dw 0ffffh + + endp + + + + + + + + + + + + +Convicons proc near + + mov al,character + and al,127 + call getpersframe + mov di,234 + mov bx,2 + mov currentframe,ax + call findsource + mov ax,currentframe + sub ax,takeoff + mov ah,0 + call showframe + ret + + endp + + + + + + + + +Getpersframe proc near + + mov ah,0 + add ax,ax + mov bx,ax + mov es,people + add bx,personframes + mov ax,[es:bx] + ret + + endp + + + + + +Starttalk proc near + + mov talkmode,0 + mov al,character + and al,127 + call getpersontext + mov charshift,91+91 + mov di,66 + mov bx,64 + mov dl,241 + mov al,0 + mov ah,79 + call printdirect + mov charshift,0 + mov di,66 + mov bx,80 + mov dl,241 + mov al,0 + mov ah,0 + call printdirect + + if cd + mov speechloaded,0 + mov al,character + and al,127 + mov ah,0 + mov cx,64 + mul cx + mov cl,"C" + mov dl,"R" + mov dh,reallocation + call loadspeech + cmp speechloaded,1 + jnz nospeech1 + mov volumedirection,1 ;quieter + mov volumeto,6 ;quite quiet! + mov al,50+12 + call playchannel1 + endif +nospeech1: ret + + endp + + + + + +Getpersontext proc near + + mov ah,0 + mov cx,64*2 + mul cx + mov si,ax + mov es,people + add si,persontxtdat + mov cx,persontext + mov ax,[es:si] + add ax,cx + mov si,ax + ret + + endp + + + + + + + +Moretalk proc near + + ;cmp ch1playing,255 + ;jnz cantredes + cmp talkmode,0 + jz canmore + call redes + ret + +canmore: cmp commandtype,215 + jz alreadymore + mov commandtype,215 + mov al,49 + call commandonly +alreadymore: mov ax,mousebutton + cmp ax,oldbutton + jz nomore + and ax,1 + jnz domoretalk +nomore: ret + +domoretalk: mov talkmode,2 + mov talkpos,4 + cmp character,100 + jc notsecondpart + mov talkpos,48 +notsecondpart: call dosometalk + ret + + endp + + + + + + + + + + + + + + +Dosometalk proc near + + if cd +dospeech: mov al,talkpos + mov al,character + and al,127 + mov ah,0 + mov cx,64 + mul cx + mov cx,ax + mov al,talkpos + mov ah,0 + add ax,cx + add ax,ax + mov si,ax + + mov es,people + add si,persontxtdat + mov cx,persontext + + mov ax,[es:si] + add ax,cx + mov si,ax + cmp byte ptr [es:si],0 + jz endheartalk + + push es si + call createpanel + call showpanel + call showman + call showexit + call convicons + pop si es + + mov di,164 + mov bx,64 + mov dl,144 + mov al,0 + mov ah,0 + call printdirect + + mov al,character + and al,127 + mov ah,0 + mov cx,64 + mul cx + mov cl,talkpos + mov ch,0 + add ax,cx + mov cl,"C" + mov dl,"R" + mov dh,reallocation + call loadspeech + cmp speechloaded,0 + jz noplay1 + mov al,62 + call playchannel1 + +noplay1: mov pointermode,3 + call worktoscreenm + mov cx,180 + call hangonpq + jnc $1 + ret + +$1: + inc talkpos + + mov al,talkpos + mov al,character + and al,127 + mov ah,0 + mov cx,64 + mul cx + mov cx,ax + mov al,talkpos + mov ah,0 + add ax,cx + add ax,ax + mov si,ax + + mov es,people + add si,persontxtdat + mov cx,persontext + + mov ax,[es:si] + add ax,cx + mov si,ax + cmp byte ptr [es:si],0 + jz endheartalk + cmp byte ptr [es:si],":" + jz skiptalk2 + cmp byte ptr [es:si],32 + jz skiptalk2 + + push es si + call createpanel + call showpanel + call showman + call showexit + call convicons + pop si es + + mov di,48 + mov bx,128 + mov dl,144 + mov al,0 + mov ah,0 + call printdirect + + mov al,character + and al,127 + mov ah,0 + mov cx,64 + mul cx + mov cl,talkpos + mov ch,0 + add ax,cx + mov cl,"C" + mov dl,"R" + mov dh,reallocation + call loadspeech + cmp speechloaded,0 + jz noplay2 + mov al,62 + call playchannel1 + +noplay2: mov pointermode,3 + call worktoscreenm + mov cx,180 + call hangonpq + jnc skiptalk2 + ret + +skiptalk2: inc talkpos + jmp dospeech + +endheartalk: mov pointermode,0 + ret + + else + +watchtalk: mov al,talkpos + mov al,character + and al,127 + mov ah,0 + mov cx,64 + mul cx + mov cx,ax + mov al,talkpos + mov ah,0 + add ax,cx + add ax,ax + mov si,ax + + mov es,people + add si,persontxtdat + mov cx,persontext + + mov ax,[es:si] + add ax,cx + mov si,ax + cmp byte ptr [es:si],0 + jz endwatchtalk + + push es si + call createpanel + call showpanel + call showman + call showexit + call convicons + pop si es + + mov di,164 + mov bx,64 + mov dl,144 + mov al,0 + mov ah,0 + call printdirect + + mov pointermode,3 + call worktoscreenm + mov cx,180 + call hangonpq + jnc $1 + ret +$1: + + inc talkpos + + mov al,talkpos + mov al,character + and al,127 + mov ah,0 + mov cx,64 + mul cx + mov cx,ax + mov al,talkpos + mov ah,0 + add ax,cx + add ax,ax + mov si,ax + + mov es,people + add si,persontxtdat + mov cx,persontext + + mov ax,[es:si] + add ax,cx + mov si,ax + cmp byte ptr [es:si],0 + jz endwatchtalk + cmp byte ptr [es:si],":" + jz skiptalk + cmp byte ptr [es:si],32 + jz skiptalk + + push es si + call createpanel + call showpanel + call showman + call showexit + call convicons + pop si es + + mov di,48 + mov bx,128 + mov dl,144 + mov al,0 + mov ah,0 + call printdirect + + mov pointermode,3 + call worktoscreenm + mov cx,180 + call hangonpq + jnc skiptalk + ret + +skiptalk: inc talkpos + jmp watchtalk + +endwatchtalk: mov pointermode,0 + ret + + endif + + endp + + + + + + + +Hangonpq proc near + + mov getback,0 + mov bx,0 +hangloopq: push cx bx + call delpointer + call readmouse + call animpointer + call showpointer + call vsync + call dumppointer + call dumptextline + mov bx,offset cs:quitlist + call checkcoords + pop bx cx + cmp getback,1 + jz quitconv + cmp speechloaded,1 + jnz notspeaking + cmp ch1playing,255 + jnz notspeaking + inc bx + cmp bx,40 ;pause after speech ends + jz finishconv +notspeaking: cmp mousebutton,0 + jz hangloopq + cmp oldbutton,0 + jnz hangloopq +finishconv: call delpointer + mov pointermode,0 + clc + ret + +quitconv: call delpointer + mov pointermode,0 + call cancelch1 + stc + ret + +quitlist: dw 273,320,157,198,getback1 + dw 0,320,0,200,blank + dw 0ffffh + + endp + + + + + + + + + +Redes proc near + + cmp ch1playing,255 + jnz cantredes + cmp talkmode,2 + jz canredes +cantredes: call blank + ret + +canredes: cmp commandtype,217 + jz alreadyreds + mov commandtype,217 + mov al,50 + call commandonly +alreadyreds: mov ax,mousebutton + and ax,1 + jnz doredes + ret + +doredes: call delpointer + call createpanel + call showpanel + call showman + call showexit + call convicons + call starttalk + call readmouse + call showpointer + call worktoscreen + call delpointer + ret + + endp + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/titles.asm b/devtools/tasmrecover/dreamweb/titles.asm new file mode 100644 index 0000000000..a47f31a327 --- /dev/null +++ b/devtools/tasmrecover/dreamweb/titles.asm @@ -0,0 +1,583 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text + +Titles proc near + + if demo + ret + else + call clearpalette + call biblequote + call intro + ret + endif + + endp + + + + +Endgame proc near + + mov dx,offset cs:endtextname + call loadtemptext + call monkspeaking + call gettingshot + call getridoftemptext + mov volumeto,7 + mov volumedirection,1 + mov cx,200 + call hangon + ret + + endp + + + if cd + +Monkspeaking proc near + + mov roomssample,35 + call loadroomssample + mov dx,offset cs:monkface + call loadintotemp + call clearwork ;createpanel2 + call showmonk + call worktoscreen + mov volume,7 + mov volumedirection,-1 + mov volumeto,5 + mov al,12 + mov ah,255 + call playchannel0 + call fadescreenups + mov cx,300 + call hangon + + mov al,40 +loadspeech2: push ax + mov dl,"T" + mov dh,83 + mov cl,"T" + mov ah,0 + call loadspeech + mov al,50+12 + call playchannel1 +notloadspeech2: + call vsync + cmp ch1playing,255 + jnz notloadspeech2 + pop ax + inc al + cmp al,48 + jnz loadspeech2 + + mov volumedirection,1 + mov volumeto,7 + call fadescreendowns + mov cx,300 + call hangon + call getridoftemp + ret + + endp + + else + +Monkspeaking proc near + + mov roomssample,35 + call loadroomssample + mov dx,offset cs:monkface + call loadintotemp + call clearwork ;createpanel2 + call showmonk + call worktoscreen + mov volume,7 + mov volumedirection,-1 + mov volumeto,0 + mov al,12 + mov ah,255 + call playchannel0 + call fadescreenups + mov cx,300 + call hangon + + mov al,40 +nextmonkspeak: push ax + mov ah,0 + mov si,ax + add si,si + mov es,textfile1 + mov ax,[es:si] + add ax,textstart + mov si,ax +nextbit: mov di,36 + mov bx,140 + mov dl,239 + call printdirect + push ax si es + call worktoscreen + call clearwork + call showmonk + mov cx,240 + call hangon + pop es si ax + cmp al,0 + jnz nextbit + pop ax + inc al + cmp al,44 + jnz nextmonkspeak + + mov volumedirection,1 + mov volumeto,7 + call fadescreendowns + mov cx,300 + call hangon + call getridoftemp + ret + + endp + + endif + + + + +Showmonk proc near + + mov al,0 + mov ah,128 + mov di,160 + mov bx,72 + mov ds,tempgraphics + call showframe + ret + + endp + + +Gettingshot proc near + + mov newlocation,55 + call clearpalette + call loadintroroom + call fadescreenups + mov volumeto,0 + mov volumedirection,-1 + call runendseq + call clearbeforeload + ret + + endp + + + + + + +Credits proc near + + call clearpalette + call realcredits + ret + + endp + + + +Biblequote proc near + + call mode640x480 + mov dx,offset cs:title0graphics + call showpcx + call fadescreenups + mov cx,80 + call hangone + cmp lasthardkey,1 + jz biblequotearly + mov cx,560 + call hangone + cmp lasthardkey,1 + jz biblequotearly + call fadescreendowns + mov cx,200 ;128 + call hangone + cmp lasthardkey,1 + jz biblequotearly + call cancelch0 +biblequotearly: + mov lasthardkey,0 + ret + + endp + + + + +Hangone proc near + +hangonloope: push cx + call vsync + pop cx + cmp lasthardkey,1 + jz hangonearly + loop hangonloope +hangonearly: + ret + + endp + + + + + + +Intro proc near + + mov dx,offset cs:introtextname + call loadtemptext + + call loadpalfromiff + call setmode + + mov newlocation,50 + call clearpalette + call loadintroroom + mov volume,7 + mov volumedirection,-1 + if cd + mov volumeto,4 + else + mov volumeto,0 + endif + mov al,12 ;4 + mov ah,255 + call playchannel0 + call fadescreenups + call runintroseq + cmp lasthardkey,1 + jz introearly + +;waitsound: cmp ch1blockstoplay,0 +; jnz waitsound + call clearbeforeload + + mov newlocation,52 + call loadintroroom + call runintroseq + cmp lasthardkey,1 + jz introearly + call clearbeforeload + + mov newlocation,53 + call loadintroroom + call runintroseq + cmp lasthardkey,1 + jz introearly + call clearbeforeload + + call allpalette + mov newlocation,54 + call loadintroroom + ;mov al,12 + ;mov ah,255 + ;call playchannel0 + call runintroseq + cmp lasthardkey,1 + jz introearly + + call getridoftemptext + call clearbeforeload +introearly: + mov lasthardkey, 0 + ret + + endp + + + + + + + + +Runintroseq proc near + + mov getback,0 + +moreintroseq: call vsync + cmp lasthardkey,1 + jz earlyendrun + call spriteupdate + call vsync + cmp lasthardkey,1 + jz earlyendrun + call deleverything + call printsprites + call reelsonscreen + call afterintroroom + call usetimedtext + call vsync + cmp lasthardkey,1 + jz earlyendrun + call dumpmap + call dumptimedtext + call vsync + cmp lasthardkey,1 + jz earlyendrun + cmp getback,1 + jnz moreintroseq + ret +earlyendrun: + call getridoftemptext + call clearbeforeload + ret + + endp + + + + + +Runendseq proc near + + call atmospheres + mov getback,0 +moreendseq: call vsync + call spriteupdate + call vsync + call deleverything + call printsprites + call reelsonscreen + call afterintroroom + call usetimedtext + call vsync + call dumpmap + call dumptimedtext + call vsync + cmp getback,1 + jnz moreendseq + ret + + endp + + + + +Loadintroroom proc near + + mov introcount,0 + mov location,255 + call loadroom + mov mapoffsetx,72 + mov mapoffsety,16 + call clearsprites + mov throughdoor,0 + mov currentkey,"0" + mov mainmode,0 + call clearwork + mov newobs,1 + call drawfloor + call reelsonscreen + call spriteupdate + call printsprites + call worktoscreen + ret + + endp + + + + + + +Mode640x480 proc near + + mov al,12h+128 + mov ah,0 + int 10h + ;call clearpalette + ret + + endp + + + +Set16colpalette proc near + + mov cx,16 + mov bl,0 + mov bh,0 + mov al,0 + mov ah,10h +set16palloop2: push ax bx cx + int 10h + pop cx bx ax + inc bl + inc bh + loop set16palloop2 + + mov bl,31h + mov al,1 + mov ah,12h + int 10h + ret + + endp + + + + + +RealCredits proc near + + mov roomssample,33 + call loadroomssample + mov volume,0 + + call mode640x480 + mov cx,35 + call hangon + + mov dx,offset cs:title1graphics + call showpcx + mov al,12 + mov ah,0 + call playchannel0 + mov cx,2 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + call allpalette + mov cx,80 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + call fadescreendowns + mov cx,256 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + + mov dx,offset cs:title2graphics + call showpcx + mov al,12 + mov ah,0 + call playchannel0 + mov cx,2 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + call allpalette + mov cx,80 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + call fadescreendowns + mov cx,256 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + + if demo + else + mov dx,offset cs:title3graphics + call showpcx + mov al,12 + mov ah,0 + call playchannel0 + mov cx,2 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + call allpalette + mov cx,80 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + call fadescreendowns + mov cx,256 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + + mov dx,offset cs:title4graphics + call showpcx + mov al,12 + mov ah,0 + call playchannel0 + mov cx,2 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + call allpalette + mov cx,80 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + call fadescreendowns + mov cx,256 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + + mov dx,offset cs:title5graphics + call showpcx + mov al,12 + mov ah,0 + call playchannel0 + mov cx,2 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + call allpalette + mov cx,80 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + call fadescreendowns + mov cx,256 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + endif + + mov dx,offset cs:title6graphics + call showpcx + call fadescreenups + mov cx,60 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + mov al,13 + mov ah,0 + call playchannel0 + mov cx,350 + call hangone + cmp lasthardkey,1 + jz realcreditsearly + call fadescreendowns + mov cx,256 + call hangone +realcreditsearly: + mov lasthardkey, 0 + ret + + endp + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/use.asm b/devtools/tasmrecover/dreamweb/use.asm new file mode 100644 index 0000000000..250aa00240 --- /dev/null +++ b/devtools/tasmrecover/dreamweb/use.asm @@ -0,0 +1,3810 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text + +Useobject proc near + + mov withobject,255 + + cmp commandtype,229 + jz alreadyuse + mov commandtype,229 + + mov bl,command + mov bh,objecttype + mov al,51 + call commandwithob +alreadyuse: mov ax,mousebutton + cmp ax,oldbutton + jz nouse + and ax,1 + jnz douse +nouse: ret + +douse: call useroutine + ret + + endp + + + + + + + +Useroutine proc near + + cmp reallocation,50 + jc nodream7 + cmp pointerpower,0 + jnz powerok + ret +powerok: mov pointerpower,0 + +nodream7: call getanyad + mov dx,seg uselist + mov ds,dx + mov si,offset uselist +checkuselist: push si + lodsb + sub al,"A" + cmp al,[es:bx+12] + jnz failed + lodsb + sub al,"A" + cmp al,[es:bx+13] + jnz failed + lodsb + sub al,"A" + cmp al,[es:bx+14] + jnz failed + lodsb + sub al,"A" + cmp al,[es:bx+15] + jnz failed + lodsw + pop si + call ax + ret +failed: pop si + add si,6 + cmp byte ptr [si],140 + jnz checkuselist + + call delpointer + call getobtextstart + call findnextcolon + cmp al,0 + jz cantuse2 + call findnextcolon + cmp al,0 + jz cantuse2 + mov al,[es:si] + cmp al,0 + jz cantuse2 + call usetext + mov cx,400 + call hangonp + call putbackobstuff + ret +cantuse2: call createpanel + call showpanel + call showman + call showexit + call obicons + mov di,33 + mov bx,100 + mov al,63 + mov dl,241 + call printmessage + call worktoscreenm + mov cx,50 + call hangonp + call putbackobstuff + mov commandtype,255 + ret + +Uselist: db "NETW" + dw usemon + db "ELVA" + dw useelevator1 + db "ELVB" + dw useelevator2 + db "ELVC" + dw useelevator3 + db "ELVE" + dw useelevator4 + db "ELVF" + dw useelevator5 + db "CGAT" + dw usechurchgate + db "REMO" + dw usestereo + db "BUTA" + dw usebuttona + db "CBOX" + dw usewinch + db "LITE" + dw uselighter + db "PLAT" + dw useplate + db "LIFT" + dw usecontrol + db "WIRE" + dw usewire + db "HNDL" + dw usehandle + db "HACH" + dw usehatch + db "DOOR" + dw useelvdoor + db "CSHR" + dw usecashcard + db "GUNA" + dw usegun + db "CRAA" + dw usecardreader1 + db "CRBB" + dw usecardreader2 + db "CRCC" + dw usecardreader3 + db "SEAT" + dw sitdowninbar + db "MENU" + dw usemenu + db "COOK" + dw usecooker + db "ELCA" + dw callhotellift + db "EDCA" + dw calledenslift + db "DDCA" + dw calledensdlift + db "ALTR" + dw usealtar + db "LOKA" + dw openhoteldoor + db "LOKB" + dw openhoteldoor2 + db "ENTA" + dw openlouis + db "ENTB" + dw openryan + db "ENTE" + dw openpoolboss + db "ENTC" + dw openyourneighbour + db "ENTD" + dw openeden + db "ENTH" + dw opensarters + db "WWAT" + dw wearwatch + db "POOL" + dw usepoolreader + db "WSHD" + dw wearshades + db "GRAF" + dw grafittidoor + db "TRAP" + dw trapdoor + db "CDPE" + dw edenscdplayer + + db "DLOK" + dw opentvdoor + + db "HOLE" + dw usehole + + db "DRYR" + dw usedryer + + db "HOLY" + dw usechurchhole + + db "WALL" + dw usewall + db "BOOK" + dw usediary + + db "AXED" + dw useaxe + db "SHLD" + dw useshield + + db "BCNY" + dw userailing + db "LIDC" + dw usecoveredbox + db "LIDU" + dw useclearbox + db "LIDO" + dw useopenbox + db "PIPE" + dw usepipe + + db "BALC" + dw usebalcony + db "WIND" + dw usewindow + db "PAPR" + dw viewfolder + + db "UWTA" + dw usetrainer + db "UWTB" + dw usetrainer + + db "STAT" + dw entersymbol + db "TLID" + dw opentomb + db "SLAB" + dw useslab + db "CART" + dw usecart + db "FCAR" + dw usefullcart + + + db "SLBA" + dw slabdoora + db "SLBB" + dw slabdoorb + db "SLBC" + dw slabdoorc + db "SLBD" + dw slabdoord + db "SLBE" + dw slabdoore + db "SLBF" + dw slabdoorf + db "PLIN" + dw useplinth + + db "LADD" + dw useladder + db "LADB" + dw useladderb + + db "GUMA" + dw chewy + + db "SQEE" + dw wheelsound + db "TAPP" + dw runtap + db "GUIT" + dw playguitar + db "CONT" + dw hotelcontrol + + db "BELL" + dw hotelbell + + db 140,140,140,140 + + endp + + + + + + +;-----------------------------------------------------------Puzzle routines---- + + +Wheelsound proc near + + mov al,17 + call playchannel1 + call showfirstuse + call putbackobstuff + ret + + endp + + + + +Runtap proc near + + cmp withobject,255 + jnz tapwith + call withwhat + ret +tapwith: mov al,withobject + mov ah,withtype + mov cl,"C" + mov ch,"U" + mov dl,"P" + mov dh,"E" + call compare + jz fillcupfromtap + mov al,withobject + mov ah,withtype + mov cl,"C" + mov ch,"U" + mov dl,"P" + mov dh,"F" + call compare + jz cupfromtapfull + mov cx,300 + mov al,56 + call showpuztext + call putbackobstuff + ret + +fillcupfromtap: mov al,withobject + call getexad + mov byte ptr [es:bx+15],"F"-"A" + mov al,8 + call playchannel1 + mov cx,300 + mov al,57 + call showpuztext + call putbackobstuff + ret + +cupfromtapfull: mov cx,300 + mov al,58 + call showpuztext + call putbackobstuff + ret + + + endp + + + +Playguitar proc near + + mov al,14 + call playchannel1 + call showfirstuse + call putbackobstuff + ret + + endp + + + +Hotelcontrol proc near + + cmp reallocation,21 + jnz notrightcont + cmp mapx,33 + jnz notrightcont + call showfirstuse + call putbackobstuff + ret +notrightcont: call showseconduse + call putbackobstuff + ret + + endp + + + + +Hotelbell proc near + + if demo + mov al,24 + else + mov al,12 + endif + call playchannel1 + call showfirstuse + call putbackobstuff + ret + + endp + + + + + +Opentomb proc near + + inc progresspoints + call showfirstuse + mov watchingtime,35*2 + mov reeltowatch,1 + mov endwatchreel,33 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + ret + + endp + + + +Usetrainer proc near + + call getanyad + cmp byte ptr [es:bx+2],4 + jnz notheldtrainer + inc progresspoints + call makeworn + call showseconduse + call putbackobstuff + ret +notheldtrainer: call nothelderror + ret + + endp + + + +Nothelderror proc near + + call createpanel + call showpanel + call showman + call showexit + call obicons + mov di,64 + mov bx,100 + mov al,63 + mov ah,1 + mov dl,201 + call printmessage2 + call worktoscreenm + mov cx,50 + call hangonp + call putbackobstuff + ret + + endp + + + +Usepipe proc near + + cmp withobject,255 + jnz pipewith + call withwhat + ret +pipewith: mov al,withobject + mov ah,withtype + mov cl,"C" + mov ch,"U" + mov dl,"P" + mov dh,"E" + call compare + jz fillcup + mov al,withobject + mov ah,withtype + mov cl,"C" + mov ch,"U" + mov dl,"P" + mov dh,"F" + call compare + jz alreadyfull + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +fillcup: mov cx,300 + mov al,36 + call showpuztext + call putbackobstuff + mov al,withobject + call getexad + mov byte ptr [es:bx+15],"F"-"A" + ret + +alreadyfull: mov cx,300 + mov al,35 + call showpuztext + call putbackobstuff + ret + + endp + + + + + + +Usefullcart proc near + + inc progresspoints + mov al,2 + mov ah,roomnum + add ah,6 + call turnanypathon + mov manspath,4 + mov facing,4 + mov turntoface,4 + mov finaldest,4 + call findxyfrompath + mov resetmanxy,1 + call showfirstuse + mov watchingtime,72*2 + mov reeltowatch,58 + mov endwatchreel,142 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + ret + + endp + + + + + + + +Useplinth proc near + + cmp withobject,255 + jnz plinthwith + call withwhat + ret + +plinthwith: mov al,withobject + mov ah,withtype + mov cl,"D" + mov ch,"K" + mov dl,"E" + mov dh,"Y" + call compare + jz isrightkey + call showfirstuse + call putbackobstuff + ret + +isrightkey: inc progresspoints + call showseconduse + mov watchingtime,220 + mov reeltowatch,0 + mov endwatchreel,104 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + mov al,roomafterdream + mov newlocation,al + ret + + endp + + + +Chewy proc near + + call showfirstuse + call getanyad + mov byte ptr [es:bx+2],255 + mov getback,1 + ret + + endp + + + + + +Useladder proc near + + call showfirstuse + sub mapx,11 + call findroominloc + mov facing,6 + mov turntoface,6 + mov manspath,0 + mov destination,0 + mov finaldest,0 + call findxyfrompath + mov resetmanxy,1 + mov getback,1 + ret + + endp + + + + + +Useladderb proc near + + call showfirstuse + add mapx,11 + call findroominloc + mov facing,2 + mov turntoface,2 + mov manspath,1 + mov destination,1 + mov finaldest,1 + call findxyfrompath + mov resetmanxy,1 + mov getback,1 + ret + + endp + + + + + +Slabdoora proc near + + call showfirstuse + mov getback,1 + mov watchspeed,1 + mov speedcount,1 + mov reeltowatch,13 + cmp dreamnumber,3 + jnz slabawrong + inc progresspoints + mov watchingtime,60 + mov endwatchreel,42 + mov newlocation,47 + ret +slabawrong: mov watchingtime,40 + mov endwatchreel,34 + mov watchspeed,1 + mov speedcount,1 + ret + + endp + + + + +Slabdoorb proc near + + cmp dreamnumber,1 + jnz slabbwrong + mov al,"S" + mov ah,"H" + mov cl,"L" + mov ch,"D" + call isryanholding + jnz gotcrystal + mov al,44 + mov cx,200 + call showpuztext + call putbackobstuff + ret +gotcrystal: call showfirstuse + inc progresspoints + mov getback,1 + mov watchspeed,1 + mov speedcount,1 + mov reeltowatch,44 + mov watchingtime,60 + mov endwatchreel,71 + mov newlocation,47 + ret +slabbwrong: call showfirstuse + mov getback,1 + mov watchspeed,1 + mov speedcount,1 + mov reeltowatch,44 + mov watchingtime,40 + mov endwatchreel,63 + mov watchspeed,1 + mov speedcount,1 + ret + + endp + + + +Slabdoord proc near + + call showfirstuse + mov getback,1 + mov watchspeed,1 + mov speedcount,1 + mov reeltowatch,75 + cmp dreamnumber,0 + jnz slabcwrong + inc progresspoints + mov watchingtime,60 + mov endwatchreel,102 + mov newlocation,47 + ret +slabcwrong: mov watchingtime,40 + mov endwatchreel,94 + mov watchspeed,1 + mov speedcount,1 + ret + + endp + + + +Slabdoorc proc near + + call showfirstuse + mov getback,1 + mov watchspeed,1 + mov speedcount,1 + mov reeltowatch,108 + cmp dreamnumber,4 + jnz slabdwrong + inc progresspoints + mov watchingtime,60 + mov endwatchreel,135 + mov newlocation,47 + ret +slabdwrong: mov watchingtime,40 + mov endwatchreel,127 + mov watchspeed,1 + mov speedcount,1 + ret + + endp + + + +Slabdoore proc near + + call showfirstuse + mov getback,1 + mov watchspeed,1 + mov speedcount,1 + mov reeltowatch,141 + cmp dreamnumber,5 + jnz slabewrong + inc progresspoints + mov watchingtime,60 + mov endwatchreel,168 + mov newlocation,47 + ret +slabewrong: mov watchingtime,40 + mov endwatchreel,160 + mov watchspeed,1 + mov speedcount,1 + ret + + endp + + + +Slabdoorf proc near + + call showfirstuse + mov getback,1 + mov watchspeed,1 + mov speedcount,1 + mov reeltowatch,171 + cmp dreamnumber,2 + jnz slabfwrong + inc progresspoints + mov watchingtime,60 + mov endwatchreel,197 + mov newlocation,47 + ret +slabfwrong: mov watchingtime,40 + mov endwatchreel,189 + mov watchspeed,1 + mov speedcount,1 + ret + + endp + + + + + + +Useslab proc near + + cmp withobject,255 + jnz slabwith + call withwhat + ret +slabwith: mov al,withobject + mov ah,withtype + mov cl,"J" + mov ch,"E" + mov dl,"W" + mov dh,"L" + call compare + jz nextslab + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret +nextslab: mov al,withobject + call getexad + mov byte ptr [es:bx+2],0 + mov al,command + push ax + call removesetobject + pop ax + inc al + push ax + call placesetobject + pop ax + cmp al,54 + jnz notlastslab + mov al,0 + call turnpathon + mov watchingtime,22 + mov reeltowatch,35 + mov endwatchreel,48 + mov watchspeed,1 + mov speedcount,1 +notlastslab: inc progresspoints + call showfirstuse + mov getback,1 + ret + + endp + + + + + +Usecart proc near + + cmp withobject,255 + jnz cartwith + call withwhat + ret +cartwith: mov al,withobject + mov ah,withtype + mov cl,"R" + mov ch,"O" + mov dl,"C" + mov dh,"K" + call compare + jz nextcart + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret +nextcart: mov al,withobject + call getexad + mov byte ptr [es:bx+2],0 + mov al,command + push ax + call removesetobject + pop ax + inc al + call placesetobject + inc progresspoints + mov al,17 + call playchannel1 + call showfirstuse + mov getback,1 + ret + + endp + + + + + + + + +Useclearbox proc near + + cmp withobject,255 + jnz clearboxwith + call withwhat + ret +clearboxwith: mov al,withobject + mov ah,withtype + mov cl,"R" + mov ch,"A" + mov dl,"I" + mov dh,"L" + call compare + jz openbox + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +openbox: inc progresspoints + call showfirstuse + mov watchingtime,80 + mov reeltowatch,67 + mov endwatchreel,105 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + ret + + endp + + + + + +Usecoveredbox proc near + + inc progresspoints + call showfirstuse + mov watchingtime,50 + mov reeltowatch,41 + mov endwatchreel,66 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + ret + + endp + + + +Userailing proc near + + call showfirstuse + mov watchingtime,80 + mov reeltowatch,0 + mov endwatchreel,30 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + mov mandead,4 + ret + + endp + + + + + +Useopenbox proc near + + cmp withobject,255 + jnz openboxwith + call withwhat + ret +openboxwith: mov al,withobject + mov ah,withtype + mov cl,"C" + mov ch,"U" + mov dl,"P" + mov dh,"F" + call compare + jz destoryopenbox + mov al,withobject + mov ah,withtype + mov cl,"C" + mov ch,"U" + mov dl,"P" + mov dh,"E" + call compare + jz openboxwrong + call showfirstuse + ret + +destoryopenbox: inc progresspoints + mov cx,300 + mov al,37 + call showpuztext + mov al,withobject + call getexad + mov byte ptr [es:bx+15],"E"-"A" + mov watchingtime,140 + mov reeltowatch,105 + mov endwatchreel,181 + mov watchspeed,1 + mov speedcount,1 + mov al,4 + call turnpathon + mov getback,1 + ret + +openboxwrong: mov cx,300 + mov al,38 + call showpuztext + call putbackobstuff + ret + + endp + + + + + + + + + + + + + + +Wearwatch proc near + + cmp watchon,1 + jz wearingwatch + call showfirstuse + mov watchon,1 + mov getback,1 + call getanyad + call makeworn + ret +wearingwatch: call showseconduse + call putbackobstuff + ret + + endp + + + + +Wearshades proc near + + cmp shadeson,1 + jz wearingshades + mov shadeson,1 + call showfirstuse + mov getback,1 + call getanyad + call makeworn + ret +wearingshades: call showseconduse + call putbackobstuff + ret + + endp + + + +Sitdowninbar proc near + + cmp watchmode,-1 + jnz satdown + call showfirstuse + mov watchingtime,50 + mov reeltowatch,55 + mov endwatchreel,71 + mov reeltohold,73 + mov endofholdreel,83 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + ret +satdown: call showseconduse + call putbackobstuff + ret + + endp + + + +Usechurchhole proc near + + call showfirstuse + mov getback,1 + mov watchingtime,28 + mov reeltowatch,13 + mov endwatchreel,26 + mov watchspeed,1 + mov speedcount,1 + ret + + endp + + + +Usehole proc near + + cmp withobject,255 + jnz holewith + call withwhat + ret +holewith: mov al,withobject + mov ah,withtype + mov cl,"H" + mov ch,"N" + mov dl,"D" + mov dh,"A" + call compare + jz righthand + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +righthand: call showfirstuse + mov al,86 + call removesetobject + mov al,withobject + call getexad + mov byte ptr [es:bx+2],255 + mov canmovealtar,1 + mov getback,1 + ret + + endp + + + + +Usealtar proc near + + mov al,"C" + mov ah,"N" + mov cl,"D" + mov ch,"A" + call findexobject + cmp al,numexobjects + jz thingsonaltar + mov al,"C" + mov ah,"N" + mov cl,"D" + mov ch,"B" + call findexobject + cmp al,numexobjects + jz thingsonaltar + cmp canmovealtar,1 + jz movealtar + mov cx,300 + mov al,23 + call showpuztext + mov getback,1 + ret + +movealtar: inc progresspoints + call showseconduse + mov watchingtime,160 + mov reeltowatch,81 + mov endwatchreel,174 + mov watchspeed,1 + mov speedcount,1 + + mov al,47 ;message number + mov bl,52 ;x pos of message + mov bh,76 ;and y pos + mov cx,32 ;time on screen + mov dx,98 ;pause before show + call setuptimeduse + mov getback,1 + ret + +thingsonaltar: call showfirstuse + mov getback,1 + ret + + endp + + + + + + + + + +Opentvdoor proc near + + cmp withobject,255 + jnz tvdoorwith + call withwhat + ret +tvdoorwith: mov al,withobject + mov ah,withtype + mov cl,"U" + mov ch,"L" + mov dl,"O" + mov dh,"K" + call compare + jz keyontv + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +keyontv: call showfirstuse + mov lockstatus,0 + mov getback,1 + ret + + endp + + + + + + + +Usedryer proc near + + mov al,12 + call playchannel1 + call showfirstuse + mov getback,1 + ret + + endp + + + + + +Openlouis proc near + + mov al,5 + mov ah,2 + mov cl,3 + mov ch,8 + call entercode + mov getback,1 + ret + + endp + + + + +Nextcolon proc near + +lookcolon: mov al,[es:si] + inc si + cmp al,":" + jnz lookcolon + ret + + endp + + + + +Openyourneighbour proc near + + mov al,255 + mov ah,255 + mov cl,255 + mov ch,255 + call entercode + mov getback,1 + ret + + endp + + + +Usewindow proc near + + cmp manspath,6 + jnz notonbalc + inc progresspoints + call showfirstuse + mov newlocation,29 + mov getback,1 + ret +notonbalc: call showseconduse + call putbackobstuff + ret + + endp + + + +Usebalcony proc near + + call showfirstuse + mov al,6 + call turnpathon + mov al,0 + call turnpathoff + mov al,1 + call turnpathoff + mov al,2 + call turnpathoff + mov al,3 + call turnpathoff + mov al,4 + call turnpathoff + mov al,5 + call turnpathoff + inc progresspoints + mov manspath,6 + mov destination,6 + mov finaldest,6 + call findxyfrompath + call switchryanoff + mov resetmanxy,1 + + mov watchingtime,30*2 + mov reeltowatch,183 + mov endwatchreel,212 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + ret + + endp + + + +Openryan proc near + + mov al,5 + mov ah,1 + mov cl,0 + mov ch,6 + call entercode + mov getback,1 + ret + + endp + + + +Openpoolboss proc near + + mov al,5 + mov ah,2 + mov cl,2 + mov ch,2 + call entercode + mov getback,1 + ret + + endp + + + + +Openeden proc near + + mov al,2 + mov ah,8 + mov cl,6 + mov ch,5 + call entercode + mov getback,1 + ret + + endp + + +Opensarters proc near + + mov al,7 + mov ah,8 + mov cl,3 + mov ch,3 + call entercode + mov getback,1 + ret + + endp + + + + +Isitright proc near + + mov bx,seg presslist + mov es,bx + mov bx,offset es:presslist + cmp [es:bx+0],al + jnz notright + cmp [es:bx+1],ah + jnz notright + cmp [es:bx+2],cl + jnz notright + cmp [es:bx+3],ch +notright: ret + + endp + + + + +Drawitall proc near + + call createpanel + call drawfloor + ;call dumpallmap + call printsprites + call showicon + ret + + endp + + + + +Openhoteldoor proc near + + cmp withobject,255 + jnz hoteldoorwith + call withwhat + ret +hoteldoorwith: mov al,withobject + mov ah,withtype + mov cl,"K" + mov ch,"E" + mov dl,"Y" + mov dh,"A" + call compare + jz keyonhotel1 + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +keyonhotel1: if demo + mov al,27 + else + mov al,16 + endif + call playchannel1 + call showfirstuse + ;mov destination,1 + ;mov finaldest,1 + ;call autosetwalk + mov lockstatus,0 + mov getback,1 + ret + + endp + + + +Openhoteldoor2 proc near + + cmp withobject,255 + jnz hoteldoorwith2 + call withwhat + ret +hoteldoorwith2: mov al,withobject + mov ah,withtype + mov cl,"K" + mov ch,"E" + mov dl,"Y" + mov dh,"A" + call compare + jz keyonhotel2 + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +keyonhotel2: if demo + mov al,27 + else + mov al,16 + endif + call playchannel1 + call showfirstuse + call putbackobstuff + ret + + endp + + + + + + +Grafittidoor proc near + + cmp withobject,255 + jnz grafwith + call withwhat + ret +grafwith: mov al,withobject + mov ah,withtype + mov cl,"A" + mov ch,"P" + mov dl,"E" + mov dh,"N" + call compare + jz dograf + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +dograf: call showfirstuse + call putbackobstuff + ret + + endp + + + + + +Trapdoor proc near + + inc progresspoints + call showfirstuse + call switchryanoff + mov watchingtime,20*2 + mov reeltowatch,181 + mov endwatchreel,197 + mov newlocation,26 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + ret + + endp + + + + +Callhotellift proc near + + if demo + mov al,24 + else + mov al,12 + endif + call playchannel1 + call showfirstuse + mov counttoopen,8 + mov getback,1 + mov destination,5 + mov finaldest,5 + call autosetwalk + mov al,4 + call turnpathon + ret + + endp + + + + +Calledenslift proc near + + call showfirstuse + mov counttoopen,8 + mov getback,1 + mov al,2 + call turnpathon + ret + + endp + + + +Calledensdlift proc near + + cmp liftflag,1 + jz edensdhere + call showfirstuse + mov counttoopen,8 + mov getback,1 + mov al,2 + call turnpathon + ret +edensdhere: call showseconduse + call putbackobstuff + ret + + endp + + + + + + +Usepoolreader proc near + + cmp withobject,255 + jnz poolwith + call withwhat + ret +poolwith: mov al,withobject + mov ah,withtype + mov cl,"M" + mov ch,"E" + mov dl,"M" + mov dh,"B" + call compare + jz openpool + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +openpool: cmp talkedtoattendant,1 + jz canopenpool + call showseconduse + call putbackobstuff + ret + +canopenpool: mov al,17 + call playchannel1 + call showfirstuse + mov counttoopen,6 + mov getback,1 + ret + + endp + + + + + + + + + + + + + +Uselighter proc near + + cmp withobject,255 + jnz gotlighterwith + call withwhat + ret +gotlighterwith: mov al,withobject + mov ah,withtype + mov cl,"S" + mov ch,"M" + mov dl,"K" + mov dh,"E" + call compare + jz cigarette + call showfirstuse + call putbackobstuff + ret +cigarette: mov cx,300 + mov al,9 + call showpuztext + mov al,withobject + call getexad + mov byte ptr [es:bx+2],255 + mov getback,1 + ret + + endp + + + + + + + + + + + + + +Showseconduse proc near + + call getobtextstart + call nextcolon + call nextcolon + call nextcolon + call usetext + mov cx,400 + call hangonp + ret + + endp + + + + + + +Usecardreader1 proc near + + cmp withobject,255 + jnz gotreader1with + call withwhat + ret +gotreader1with: mov al,withobject + mov ah,withtype + mov cl,"C" + mov ch,"S" + mov dl,"H" + mov dh,"R" + call compare + jz correctcard + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret +correctcard: cmp talkedtosparky,0 + jz notyet + cmp card1money,0 + jz getscash + mov cx,300 + mov al,17 + call showpuztext + call putbackobstuff + ret +getscash: mov al,16 + call playchannel1 + mov cx,300 + mov al,18 + call showpuztext + inc progresspoints + mov card1money,12432 + mov getback,1 + ret +notyet: call showfirstuse + call putbackobstuff + ret + + endp + + + + +Usecardreader2 proc near + + cmp withobject,255 + jnz gotreader2with + call withwhat + ret +gotreader2with: mov al,withobject + mov ah,withtype + mov cl,"C" + mov ch,"S" + mov dl,"H" + mov dh,"R" + call compare + jz correctcard2 + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +correctcard2: cmp talkedtoboss,0 + jz notyetboss + cmp card1money,0 + jz nocash + cmp gunpassflag,2 + jz alreadygotnew + mov al,18 + call playchannel1 + mov cx,300 + mov al,19 + call showpuztext + mov al,94 + call placesetobject + mov gunpassflag,1 + sub card1money,2000 + inc progresspoints + mov getback,1 + ret +nocash: mov cx,300 + mov al,20 + call showpuztext + call putbackobstuff + ret +alreadygotnew: mov cx,300 + mov al,22 + call showpuztext + call putbackobstuff + ret +notyetboss: call showfirstuse + call putbackobstuff + ret + + endp + + + + + + + +Usecardreader3 proc near + + cmp withobject,255 + jnz gotreader3with + call withwhat + ret +gotreader3with: mov al,withobject + mov ah,withtype + mov cl,"C" + mov ch,"S" + mov dl,"H" + mov dh,"R" + call compare + jz rightcard + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +rightcard: cmp talkedtorecep,0 + jz notyetrecep + cmp cardpassflag,0 + jnz alreadyusedit + if demo + mov al,27 + else + mov al,16 + endif + call playchannel1 + mov cx,300 + mov al,25 + call showpuztext + inc progresspoints + sub card1money,8300 + mov cardpassflag,1 + mov getback,1 + ret +alreadyusedit: mov cx,300 + mov al,26 + call showpuztext + call putbackobstuff + ret +notyetrecep: call showfirstuse + call putbackobstuff + ret + + endp + + + + + + + + +Usecashcard proc near + + call getridofreels + call loadkeypad + call createpanel + call showpanel + call showexit + call showman + + mov di,114 + if foreign + mov bx,120-3 + else + mov bx,120 + endif + mov ds,tempgraphics + mov al,39 + mov ah,0 + call showframe + + mov ax,card1money + call moneypoke + + call getobtextstart + call nextcolon + call nextcolon + + mov di,36 + mov bx,98 + mov dl,241 + mov al,0 + mov ah,0 + call printdirect + + mov di,160 + mov bx,155 + push cs + pop es + mov si,offset cs:money1poke + mov charshift,91*2+75 + mov al,0 + mov ah,0 + mov dl,240 + call printdirect + mov di,187 + mov bx,155 + push cs + pop es + mov si,offset cs:money2poke + mov charshift,91*2+85 + mov al,0 + mov ah,0 + mov dl,240 + call printdirect + mov charshift,0 + call worktoscreenm + mov cx,400 + call hangonp + call getridoftemp + call restorereels + call putbackobstuff + ret + +money1poke: db "0000",0 +money2poke: db "00",0 + + endp + + + + +Lookatcard proc near + + mov manisoffscreen,1 + call getridofreels + call loadkeypad + + call createpanel2 + mov di,160 + mov bx,80 + mov ds,tempgraphics + mov al,42 + mov ah,128 + call showframe + + call getobtextstart + call findnextcolon + call findnextcolon + call findnextcolon + mov di,36 + mov bx,124 + mov dl,241 + mov al,0 + mov ah,0 + call printdirect + + push es si + call worktoscreenm + mov cx,280 + call hangonw + call createpanel2 + mov di,160 + mov bx,80 + mov ds,tempgraphics + mov al,42 + mov ah,128 + call showframe + pop si es + + mov di,36 + mov bx,130 + mov dl,241 + mov al,0 + mov ah,0 + call printdirect + call worktoscreenm + + mov cx,200 + call hangonw + mov manisoffscreen,0 + call getridoftemp + call restorereels + call putbackobstuff + ret + + endp + + + + + +Moneypoke proc near + + mov bx,offset cs:money1poke + mov cl,48-1 +numberpoke0: inc cl + sub ax,10000 + jnc numberpoke0 + add ax,10000 + mov [cs:bx],cl + inc bx + + mov cl,48-1 +numberpoke1: inc cl + sub ax,1000 + jnc numberpoke1 + add ax,1000 + mov [cs:bx],cl + inc bx + + mov cl,48-1 +numberpoke2: inc cl + sub ax,100 + jnc numberpoke2 + add ax,100 + mov [cs:bx],cl + inc bx + + mov cl,48-1 +numberpoke3: inc cl + sub ax,10 + jnc numberpoke3 + add ax,10 + mov [cs:bx],cl + + mov bx,offset cs:money2poke + add al,48 + mov [cs:bx],al + ret + + endp + + + + + + + +Usecontrol proc near + + cmp withobject,255 + jnz gotcontrolwith + call withwhat + ret +gotcontrolwith: mov al,withobject + mov ah,withtype + mov cl,"K" + mov ch,"E" + mov dl,"Y" + mov dh,"A" + call compare + jz rightkey + cmp reallocation,21 + jnz balls + mov al,withobject + mov ah,withtype + mov cl,"K" + mov ch,"N" + mov dl,"F" + mov dh,"E" + call compare + jz jimmycontrols + mov al,withobject + mov ah,withtype + mov cl,"A" + mov ch,"X" + mov dl,"E" + mov dh,"D" + call compare + jz axeoncontrols + +balls: call showfirstuse + call putbackobstuff + ret + +rightkey: mov al,16 + call playchannel1 + cmp location,21 + jz goingdown + mov cx,300 + mov al,0 + call showpuztext + mov newlocation,21 + mov counttoclose,8 + mov counttoopen,0 + mov watchingtime,80 + mov getback,1 + ret + +goingdown: mov cx,300 + mov al,3 + call showpuztext + mov newlocation,30 + mov counttoclose,8 + mov counttoopen,0 + mov watchingtime,80 + mov getback,1 + ret + +jimmycontrols: mov al,50 + call placesetobject + mov al,51 + call placesetobject + mov al,26 + call placesetobject + mov al,30 + call placesetobject + mov al,16 + call removesetobject + mov al,17 + call removesetobject + if demo + mov al,26 + else + mov al,14 + endif + call playchannel1 + mov cx,300 + mov al,10 + call showpuztext + inc progresspoints + mov getback,1 + ret + +axeoncontrols: mov cx,300 + mov al,16 + call showpuztext + inc progresspoints + call putbackobstuff + ret + + endp + + + + + + +Usehatch proc near + + call showfirstuse + mov newlocation,40 + mov getback,1 + ret + + endp + + + + + +Usewire proc near + + cmp withobject,255 + jnz gotwirewith + call withwhat + ret +gotwirewith: mov al,withobject + mov ah,withtype + mov cl,"K" + mov ch,"N" + mov dl,"F" + mov dh,"E" + call compare + jz wireknife + mov al,withobject + mov ah,withtype + mov cl,"A" + mov ch,"X" + mov dl,"E" + mov dh,"D" + call compare + jz wireaxe + + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +wireaxe: mov cx,300 + mov al,16 + call showpuztext + call putbackobstuff + ret + +wireknife: mov al,51 + call removesetobject + mov al,52 + call placesetobject + mov cx,300 + mov al,11 + call showpuztext + inc progresspoints + mov getback,1 + ret + + endp + + + + + + + +Usehandle proc near + + mov al,"C" + mov ah,"U" + mov cl,"T" + mov ch,"W" + call findsetobject + mov al,[es:bx+58] + cmp al,255 + jnz havecutwire + mov cx,300 + mov al,12 + call showpuztext + mov getback,1 + ret + +havecutwire: mov cx,300 + mov al,13 + call showpuztext + mov newlocation,22 + mov getback,1 + ret + + endp + + + + + + + + +Useelevator1 proc near + + call showfirstuse + call selectlocation + mov getback,1 + ret + + endp + + + + + + +Showfirstuse proc near ;shows but does not delete the + ;first bit of text after the + call getobtextstart ;description + call findnextcolon + call findnextcolon + call usetext + mov cx,400 + call hangonp + ret + + endp + + + + + +Useelevator3 proc near + + call showfirstuse + mov counttoclose,20 + mov newlocation,34 + mov reeltowatch,46 + mov endwatchreel,63 + mov watchspeed,1 + mov speedcount,1 + mov watchingtime,80 ;40 + mov getback,1 + ret + + endp + + + + +Useelevator4 proc near + + call showfirstuse + mov reeltowatch,0 + mov endwatchreel,11 + mov watchspeed,1 + mov speedcount,1 + mov counttoclose,20 + mov watchingtime,80 ;40 + mov getback,1 + mov newlocation,24 + ret + + endp + + + +Useelevator2 proc near + + cmp location,23 + jz inpoolhall + call showfirstuse + mov newlocation,23 + mov counttoclose,20 + mov counttoopen,0 + mov watchingtime,80 + mov getback,1 + ret +inpoolhall: call showfirstuse + mov newlocation,31 + mov counttoclose,20 + mov counttoopen,0 + mov watchingtime,80 + mov getback,1 + ret + + endp + + + + +Useelevator5 proc near + + mov al,4 + call placesetobject + mov al,0 + call removesetobject + mov newlocation,20 + mov watchingtime,80 + mov liftflag,1 + mov counttoclose,8 + mov getback,1 + ret + + endp + + + + + +Usekey proc near + + cmp location,5 + jz usekey1 + cmp location,30 + jz usekey1 + cmp location,21 + jz usekey2 + mov cx,200 + mov al,1 + call showpuztext + call putbackobstuff + ret + +usekey1: cmp mapx,22 + jnz wrongroom1 + cmp mapy,10 + jnz wrongroom1 + mov cx,300 + mov al,0 + call showpuztext + mov counttoclose,100 + mov getback,1 + ret + +usekey2: cmp mapx,11 + jnz wrongroom1 + cmp mapy,10 + jnz wrongroom1 + mov cx,300 + mov al,3 + call showpuztext + mov newlocation,30 + mov al,2 + call fadescreendown + call showfirstuse + call putbackobstuff + ret + +wrongroom1: mov cx,200 + mov al,2 + call showpuztext + call putbackobstuff + ret + + endp + + + + + + + +Usestereo proc near + + cmp location,0 + jz stereook + mov cx,400 ;Ryan isn't in his flat. + mov al,4 + call showpuztext + call putbackobstuff + ret + +stereook: cmp mapx,11 + jnz stereonotok + cmp mapy,0 + jz stereook2 +stereonotok: mov cx,400 ;Ryan isn't in his bedroom. + mov al,5 + call showpuztext + call putbackobstuff + ret + +stereook2: mov al,"C" + mov ah,"D" + mov cl,"P" + mov ch,"L" + call findsetobject ;find object number of CD player + mov ah,1 ;searching for inside a set ob + call checkinside ;see if there is anything inside + cmp cl,numexobjects + jnz cdinside + mov al,6 ;Need a CD inside + mov cx,400 + call showpuztext + call putbackobstuff + call getanyad ;if the CD's been taken out, + mov al,255 ;make sure the player isn't still + mov [es:bx+10],al ;playing, ie:reset the puzzle + ret ;flag for the remote. + +cdinside: call getanyad + mov al,[es:bx+10] + xor al,1 + mov [es:bx+10],al + cmp al,255 + jz stereoon + mov al,7 ;The stereo works + mov cx,400 + call showpuztext + call putbackobstuff + ret + +stereoon: mov al,8 ;Stereo was already on, + mov cx,400 ;so switch it off + call showpuztext + call putbackobstuff + ret + + endp + + + + + + + + + + + + + + + +Usecooker proc near + + mov al,command + mov ah,objecttype + call checkinside ;see if there is anything inside + cmp cl,numexobjects + jnz foodinside + call showfirstuse + call putbackobstuff + ret ;flag for the remote. + +foodinside: call showseconduse + call putbackobstuff + ret + + endp + + + + + + +Useaxe proc near + + cmp reallocation,22 + jnz notinpool + cmp mapy,10 + jz axeondoor + call showseconduse + inc progresspoints + mov lastweapon,2 + mov getback,1 + call removeobfrominv + ret + +notinpool: call showfirstuse + ret + + endp + + + + + + + + +Useelvdoor proc near + + cmp withobject,255 + jnz gotdoorwith + call withwhat + ret +gotdoorwith: mov al,withobject + mov ah,withtype + mov cl,"A" + mov ch,"X" + mov dl,"E" + mov dh,"D" + call compare + jz axeondoor + mov al,14 + mov cx,300 + call showpuztext + call putbackobstuff + ret + +axeondoor: mov al,15 + mov cx,300 + call showpuztext + inc progresspoints + + mov watchingtime,46*2 + mov reeltowatch,31 + mov endwatchreel,77 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + ret + + endp + +;------------------------------------------------------------------------------ + +Withwhat proc near ;Gets player to identify object + ;to use selected item with. + call createpanel + call showpanel + call showman + call showexit + mov al,command + mov ah,objecttype + push cs + pop es + mov di,offset cs:commandline + call copyname + + mov di,100 + mov bx,21 + mov dl,200 + mov al,63 + mov ah,2 + call printmessage2 + + mov di,lastxpos + add di,5 + mov bx,21 + push cs + pop es + mov si,offset cs:commandline + mov dl,220 + mov al,0 + mov ah,0 + call printdirect + + mov di,lastxpos + add di,5 + mov bx,21 + mov dl,200 + mov al,63 + mov ah,3 + call printmessage2 + + call fillryan + mov commandtype,255 + call readmouse + call showpointer + call worktoscreen + call delpointer + mov invopen,2 + ret + + endp + + + + + +Selectob proc near + + call findinvpos + mov ax,[es:bx] + cmp al,255 + jnz canselectob + call blank + ret + +canselectob: mov withobject,al + mov withtype,ah + cmp ax,oldsubject + jnz diffsub3 + cmp commandtype,221 + jz alreadyselob + mov commandtype,221 + +diffsub3: mov oldsubject,ax + mov bx,ax + mov al,0 + call commandwithob +alreadyselob: mov ax,mousebutton + cmp ax,oldbutton + jz notselob + and ax,1 + jnz doselob +notselob: ret + +doselob: call delpointer + mov invopen,0 + call useroutine + ret + + endp + + + + + + + + +Compare proc near + + sub dl,"A" + sub dh,"A" + sub cl,"A" + sub ch,"A" + push cx dx + call getanyaddir + pop dx cx + cmp [es:bx+12],cx + jnz comparefin + cmp [es:bx+14],dx +comparefin: ret + + endp + + + + + + + + + + + +Findsetobject proc near ;searches set object ID's + ;for contents of ax,cx + sub al,"A" ;returns number in al and data + sub ah,"A" ;start point in es:bx + sub cl,"A" + sub ch,"A" + mov es,setdat + mov bx,0 + mov dl,0 ;dl counts object number +findsetloop: cmp al,[es:bx+12] + jnz nofind + cmp ah,[es:bx+13] + jnz nofind + cmp cl,[es:bx+14] + jnz nofind + cmp ch,[es:bx+15] + jnz nofind + mov al,dl + ret +nofind: add bx,64 + inc dl + cmp dl,128 ;number of objects to search + jnz findsetloop + mov al,dl + ret + + endp + + + + + + +Findexobject proc near ;searches ex object ID's + ;for contents of ax,cx + sub al,"A" ;returns number in al and data + sub ah,"A" ;start point in es:bx + sub cl,"A" + sub ch,"A" + mov es,extras + mov bx,exdata + mov dl,0 ;dl counts object number +findexloop: cmp al,[es:bx+12] + jnz nofindex + cmp ah,[es:bx+13] + jnz nofindex + cmp cl,[es:bx+14] + jnz nofindex + cmp ch,[es:bx+15] + jnz nofindex + mov al,dl + ret +nofindex: add bx,16 + inc dl + cmp dl,numexobjects ;number of objects to search + jnz findexloop + mov al,dl + ret + + endp + + + +Isryanholding proc near + + sub al,"A" ;returns number in al and data + sub ah,"A" ;start point in es:bx + sub cl,"A" + sub ch,"A" + mov es,extras + mov bx,exdata + mov dl,0 ;dl counts object number +searchinv: cmp byte ptr [es:bx+2],4 + jnz nofindininv + cmp al,[es:bx+12] + jnz nofindininv + cmp ah,[es:bx+13] + jnz nofindininv + cmp cl,[es:bx+14] + jnz nofindininv + cmp ch,[es:bx+15] + jnz nofindininv + mov al,dl + cmp al,numexobjects + ret +nofindininv: add bx,16 + inc dl + cmp dl,numexobjects ;number of objects to search + jnz searchinv + mov al,dl + cmp al,numexobjects ;if not zero he is holding + ret ;if zero, he is not holding + + endp + + + + +Checkinside proc near ;finds an extra object inside + ;object number al, type ah + + mov es,extras + mov bx,exdata + mov cl,0 +insideloop: cmp al,[es:bx+3] ;OI! might need to check room number!!! + jnz notfoundinside + cmp ah,[es:bx+2] + jnz notfoundinside + ret +notfoundinside: add bx,16 + inc cl + cmp cl,numexobjects + jnz insideloop + ret ;ch returns the object number + ;in the extras list + endp + + + + + + + + + + + + +Usetext proc near + + push es si + call createpanel + call showpanel + call showman + call showexit + call obicons + pop si es + + mov di,36 + mov bx,104 + mov dl,241 + mov al,0 + mov ah,0 + call printdirect + + call worktoscreenm + ret + + endp + + + + + +Putbackobstuff proc near + + call createpanel + call showpanel + call showman + call obicons + call showexit + call obpicture + call describeob + call undertextline + mov commandtype,255 + call readmouse + call showpointer + call worktoscreen + call delpointer + ret + + endp + + + + + + + +Showpuztext proc near + + push cx + call findpuztext + push es si + call createpanel + call showpanel + call showman + call showexit + call obicons + pop si es + mov di,36 + mov bx,104 + mov dl,241 + mov ah,0 + call printdirect + call worktoscreenm + pop cx + call hangonp + ret + + endp + + + +Findpuztext proc near + + mov ah,0 + mov si,ax + add si,si + mov es,puzzletext + mov ax,[es:si] + add ax,textstart + mov si,ax + ret + + endp + + + +;------------------------------------------------------------------------------- + +Placesetobject proc near + + push es bx + mov cl,0 + mov ch,0 + call findormake + call getsetad + mov byte ptr [es:bx+58],0 + pop bx es + ret + + endp + + + + +Removesetobject proc near + + push es bx + mov cl,255 + mov ch,0 + call findormake + call getsetad + mov byte ptr [es:bx+58],255 + pop bx es + ret + + endp + + + + +Issetobonmap proc near + + push es bx + call getsetad + mov al,[es:bx+58] + pop bx es + cmp al,0 + ret + + endp + + + + + + +Placefreeobject proc near + + push es bx + mov cl,0 + mov ch,1 + call findormake + call getfreead + mov byte ptr [es:bx+2],0 + pop bx es + ret + + endp + + + + + +Removefreeobject proc near + + push es bx + ;mov cl,255 + ;mov ch,1 + ;call findormake + call getfreead + mov byte ptr [es:bx+2],255 + pop bx es + ret + + endp + + + + + + + + + + +Findormake proc near + + mov bx,listofchanges + push ax + mov es,buffers + mov ah,reallocation +changeloop: cmp byte ptr [es:bx],255 + jz haventfound + cmp ax,[es:bx] + jnz nofoundchange + cmp ch,[es:bx+3] + jz foundchange +nofoundchange: add bx,4 + jmp changeloop +foundchange: pop ax + mov [es:bx+2],cl + ret +haventfound: mov [es:bx],ax + mov [es:bx+2],cx + pop ax + ret + + endp + + + + + + + + +Switchryanon proc near + + mov ryanon,255 + ret + + endp + + + + + +Switchryanoff proc near + + mov ryanon,1 + ret + + endp + + + +Setallchanges proc near + + mov es,buffers + mov bx,listofchanges +setallloop: mov ax,[es:bx] + cmp al,255 + jz endsetloop + mov cx,[es:bx+2] + add bx,4 + cmp ah,reallocation + jnz setallloop + push es bx + call dochange + pop bx es + jmp setallloop +endsetloop: ret + + endp + + + + + + +Dochange proc near + + cmp ch,0 + jz object + cmp ch,1 + jz freeobject + +path: push cx + mov ah,0 + add ax,ax + add ax,ax + add ax,ax + push ax + mov al,ch + sub al,100 + mov ah,0 + mov cx,144 + mul cx + pop bx + add bx,ax + add bx,pathdata + mov es,reels + pop cx + mov byte ptr [es:bx+6],cl +nopath: ret + +object: push cx + call getsetad + pop cx + mov [es:bx+58],cl + ret + +freeobject: push cx + call getfreead + pop cx + cmp byte ptr [es:bx+2],255 + jnz beenpickedup + mov [es:bx+2],cl +beenpickedup: ret + + endp + + + +Autoappear proc near ;places objects that appear + ;in rooms after certain + cmp location,32 ;conditions are met. + jnz notinalley + mov al,5 ;switch off travel to + call resetlocation ;hotel after kill + mov al,10 + call setlocation + mov destpos,10 + ret +notinalley: cmp reallocation,24 + jnz notinedens + cmp generaldead,1 + jnz edenspart2 + inc generaldead + mov al,44 + call placesetobject + mov al,18 + call placesetobject + mov al,93 + call placesetobject + mov al,92 + call removesetobject + mov al,55 + call removesetobject + mov al,75 + call removesetobject + mov al,84 + call removesetobject + mov al,85 + call removesetobject + ret +edenspart2: cmp sartaindead,1 + jnz notedens2 + mov al,44 + call removesetobject + mov al,93 + call removesetobject + mov al,55 + call placesetobject + inc sartaindead +notedens2: ret +notinedens: cmp reallocation,25 + jnz notonsartroof + mov newsitem,3 + mov al,6 + call resetlocation ;turn off Sartain Industries + mov al,11 + call setlocation ;turn on carpark for later + mov destpos,11 + ret +notonsartroof: cmp reallocation,2 + jnz notinlouiss + cmp rockstardead,0 + jz notinlouiss + mov al,23 + call placesetobject +notinlouiss: ret + + endp + + + + + + + + + + +;--------------------------------------------------------- Timed text stuff ---- + + + +Getundertimed proc near + + mov al,timedy + if foreign + sub al,3 + endif + mov ah,0 + mov bx,ax + mov al,timedx + mov ah,0 + mov di,ax + mov ch,undertimedysize + mov cl,240 + mov ds,buffers + mov si,undertimedtext + call multiget + ret + + endp + + + + +Putundertimed proc near + + mov al,timedy + if foreign + sub al,3 + endif + mov ah,0 + mov bx,ax + mov al,timedx + mov ah,0 + mov di,ax + mov ch,undertimedysize + mov cl,240 + mov ds,buffers + mov si,undertimedtext + call multiput + ret + + endp + + + + + + +Dumptimedtext proc near + + cmp needtodumptimed,1 + jnz nodumptimed + mov al,timedy + if foreign + sub al,3 + endif + mov ah,0 + mov bx,ax + mov al,timedx + mov ah,0 + mov di,ax + mov cl,240 + mov ch,undertimedysize + call multidump + mov needtodumptimed,0 +nodumptimed: ret + + endp + + + + + + + + +Setuptimeduse proc near + + cmp timecount,0 + jnz cantsetup + + mov timedy,bh + mov timedx,bl + mov counttotimed,cx + add dx,cx + mov timecount,dx + mov bl,al + mov bh,0 + add bx,bx + mov es,puzzletext + mov cx,textstart + mov ax,[es:bx] + add ax,cx + mov bx,ax + mov timedseg,es + mov timedoffset,bx +cantsetup: ret + + endp + + + +Setuptimedtemp proc near + + if cd + cmp ah,0 + jz notloadspeech3 + mov dl,"T" + mov dh,ah + mov cl,"T" + mov ah,0 + call loadspeech + cmp speechloaded,1 + jnz notloadspeech3 + mov al,50+12 + call playchannel1 + ret +notloadspeech3: + endif + cmp timecount,0 + jnz cantsetup2 + mov timedy,bh + mov timedx,bl + mov counttotimed,cx + add dx,cx + mov timecount,dx + mov bl,al + mov bh,0 + add bx,bx + mov es,textfile1 + mov cx,textstart + mov ax,[es:bx] + add ax,cx + mov bx,ax + mov timedseg,es + mov timedoffset,bx +cantsetup2: ret + + endp + + + + + + + +Usetimedtext proc near + + cmp timecount,0 + jz notext + dec timecount + cmp timecount,0 + jz deltimedtext + mov ax,timecount + cmp ax,counttotimed + jz firsttimed + jnc notext + jmp notfirsttimed +firsttimed: call getundertimed +notfirsttimed: mov bl,timedy + mov bh,0 + mov al,timedx + mov ah,0 + mov di,ax + mov es,timedseg + mov si,timedoffset + mov dl,237 + mov ah,0 + call printdirect + mov needtodumptimed,1 +notext: ret + +deltimedtext: call putundertimed + mov needtodumptimed,1 + ret + + endp + + + + + + + + + + + + +Edenscdplayer proc near + + call showfirstuse + mov watchingtime,18*2 + mov reeltowatch,25 + mov endwatchreel,42 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + ret + + endp + + + + + +Usewall proc near + + call showfirstuse + cmp manspath,3 + jz gobackover + mov watchingtime,30*2 + mov reeltowatch,2 + mov endwatchreel,31 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + mov al,3 + call turnpathon + mov al,4 + call turnpathon + mov al,0 + call turnpathoff + mov al,1 + call turnpathoff + mov al,2 + call turnpathoff + mov al,5 + call turnpathoff + mov manspath,3 + mov finaldest,3 + call findxyfrompath + mov resetmanxy,1 + call switchryanoff + ret +gobackover: mov watchingtime,30*2 + mov reeltowatch,34 + mov endwatchreel,60 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + mov al,3 + call turnpathoff + mov al,4 + call turnpathoff + mov al,0 + call turnpathon + mov al,1 + call turnpathon + mov al,2 + call turnpathon + mov al,5 + call turnpathon + mov manspath,5 + mov finaldest,5 + call findxyfrompath + mov resetmanxy,1 + call switchryanoff + ret + + endp + + + + + + + +Usechurchgate proc near + + cmp withobject,255 + jnz gatewith + call withwhat + ret +gatewith: mov al,withobject + mov ah,withtype + mov cl,"C" + mov ch,"U" + mov dl,"T" + mov dh,"T" + call compare + jz cutgate + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +cutgate: call showfirstuse + mov watchingtime,64*2 + mov reeltowatch,4 + mov endwatchreel,70 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + inc progresspoints + mov al,3 + call turnpathon + cmp aidedead,0 + jz notopenchurch + mov al,2 + call turnpathon +notopenchurch: ret + + endp + + + + + +Usegun proc near + + cmp objecttype,4 + jz istakengun + call showseconduse + call putbackobstuff + ret +istakengun: cmp reallocation,22 + jnz notinpoolroom + mov cx,300 + mov al,34 + call showpuztext + mov lastweapon,1 + mov combatcount,39 + mov getback,1 + inc progresspoints + ret +notinpoolroom: cmp reallocation,25 + jnz nothelicopter + mov cx,300 + mov al,34 + call showpuztext + mov lastweapon,1 + mov combatcount,19 + mov getback,1 + mov dreamnumber,2 + mov roomafterdream,38 + mov sartaindead,1 + inc progresspoints + ret +nothelicopter: cmp reallocation,27 + jnz notinrockroom + mov cx,300 + mov al,46 + call showpuztext + mov pointermode,2 ;0 + mov rockstardead,1 + mov lastweapon,1 + mov newsitem,1 + mov getback,1 + mov roomafterdream,32 ; skip + mov dreamnumber,0 + inc progresspoints + ret +notinrockroom: cmp reallocation,8 + jnz notbystudio + cmp mapx,22 + jnz notbystudio + cmp mapy,40 + jnz notbystudio + mov al,92 + call issetobonmap + jz notbystudio + cmp manspath,9 + jz notbystudio + mov destination,9 + mov finaldest,9 + call autosetwalk + mov lastweapon,1 + mov getback,1 + inc progresspoints + ret +notbystudio: cmp reallocation,6 + jnz notsarters + cmp mapx,11 + jnz notsarters + cmp mapy,20 + jnz notsarters + mov al,5 + call issetobonmap + jnz notsarters + mov destination,1 + mov finaldest,1 + call autosetwalk + mov al,5 + call removesetobject + mov al,6 + call placesetobject + mov al,1 + mov ah,roomnum + dec ah + call turnanypathon + mov liftflag,1 + mov watchingtime,40*2 + mov reeltowatch,4 + mov endwatchreel,43 + mov watchspeed,1 + mov speedcount,1 + mov getback,1 + inc progresspoints + ret +notsarters: cmp reallocation,29 + jnz notaide + mov getback,1 + mov al,13 + call resetlocation + mov al,12 + call setlocation + mov destpos,12 + mov destination,2 + mov finaldest,2 + call autosetwalk + mov watchingtime,164*2 + mov reeltowatch,3 + mov endwatchreel,164 + mov watchspeed,1 + mov speedcount,1 + mov aidedead,1 + mov dreamnumber,3 + mov roomafterdream,33 + inc progresspoints + ret +notaide: cmp reallocation,23 + jnz notwithboss + cmp mapx,0 + jnz notwithboss + cmp mapy,50 + jnz notwithboss + cmp manspath,5 + jz pathokboss + mov destination,5 + mov finaldest,5 + call autosetwalk +pathokboss: mov lastweapon,1 + mov getback,1 + ret +notwithboss: cmp reallocation,8 + jnz nottvsoldier + cmp mapx,11 + jnz nottvsoldier + cmp mapy,10 + jnz nottvsoldier + cmp manspath,2 + jz pathoktv + mov destination,2 + mov finaldest,2 + call autosetwalk +pathoktv: mov lastweapon,1 + mov getback,1 + ret +nottvsoldier: call showfirstuse + call putbackobstuff + ret + + endp + + + + + + + +Useshield proc near + + cmp reallocation,20 + jnz notinsartroom + cmp combatcount,0 + jz notinsartroom + mov lastweapon,3 + call showseconduse + mov getback,1 + inc progresspoints + call removeobfrominv + ret +notinsartroom: call showfirstuse + call putbackobstuff + ret + + endp + + + + + + +Usebuttona proc near + + mov al,95 + call issetobonmap + jz donethisbit + + call showfirstuse + mov al,0 + mov ah,roomnum + dec ah + call turnanypathon + mov al,9 + call removesetobject + mov al,95 + call placesetobject + + mov watchingtime,15*2 + mov reeltowatch,71 + mov endwatchreel,85 + mov watchspeed,1 + mov speedcount,1 + + mov getback,1 + inc progresspoints + ret +donethisbit: call showseconduse + call putbackobstuff + ret + + endp + + + + +Useplate proc near + + cmp withobject,255 + jnz platewith + call withwhat + ret +platewith: mov al,withobject + mov ah,withtype + mov cl,"S" + mov ch,"C" + mov dl,"R" + mov dh,"W" + call compare + jz unscrewplate + mov al,withobject + mov ah,withtype + mov cl,"K" + mov ch,"N" + mov dl,"F" + mov dh,"E" + call compare + jz triedknife + mov cx,300 + mov al,14 + call showpuztext + call putbackobstuff + ret + +unscrewplate: mov al,20 + call playchannel1 + call showfirstuse + mov al,28 + call placesetobject + mov al,24 + call placesetobject + mov al,25 + call removesetobject + mov al,0 + call placefreeobject + inc progresspoints + mov getback,1 + ret + +triedknife: mov cx,300 + mov al,54 + call showpuztext + call putbackobstuff + ret + + endp + + + + + +Usewinch proc near + + mov al,40 + mov ah,1 + call checkinside + cmp cl,numexobjects + jz nowinch + mov al,cl + mov ah,4 + mov cl,"F" + mov ch,"U" + mov dl,"S" + mov dh,"E" + call compare + jnz nowinch + + mov watchingtime,217*2 + mov reeltowatch,0 + mov endwatchreel,217 + mov watchspeed,1 + mov speedcount,1 + mov destpos,1 + mov newlocation,45 + mov dreamnumber,1 + mov roomafterdream,44 + mov generaldead,1 + mov newsitem,2 + mov getback,1 + inc progresspoints + ret + +nowinch: call showfirstuse + call putbackobstuff + ret + + endp + + + + + + + + + + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/vars.asm b/devtools/tasmrecover/dreamweb/vars.asm new file mode 100644 index 0000000000..e38470a7de --- /dev/null +++ b/devtools/tasmrecover/dreamweb/vars.asm @@ -0,0 +1,564 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +;---------------------------------------------------Equates and definitions---- + +Inputport equ 63h +Mapwidth equ 66 ;132/2 +Maplength equ 60 ;6/2 +Tablesize equ 32 ;size of each entry in spritetable +Itempicsize equ 44 ;size of inventory slots +Opsy equ 52 +Opsx equ 60 +Inventx equ 80 +Inventy equ 58 +Zoomx equ 8 +Zoomy equ 132 +Keypadx equ 36+112 +Keypady equ 72 +Diaryx equ 68+24 +Diaryy equ 48+12 +Symbolx equ 64 +Symboly equ 56 +Menux equ 80+40 +Menuy equ 60 + + if foreign +Undertextsizex equ 228 +Undertextsizey equ 13 +Undertimedysize equ 30 + else +Undertextsizex equ 180 +Undertextsizey equ 10 +Undertimedysize equ 24 + endif + +Numchanges equ 250 + +Textunder equ 0 ;offsets for items in buffer segment +Openinvlist equ textunder+(undertextsizex*undertextsizey) +Ryaninvlist equ openinvlist+32 +Pointerback equ ryaninvlist+60 +Mapflags equ pointerback+(32*32) +Startpal equ mapflags+(11*10*3) +Endpal equ startpal+768 +Maingamepal equ endpal+768 +Spritetable equ maingamepal+768 +Setlist equ spritetable+(32*tablesize) +Freelist equ setlist+(128*5) +Exlist equ freelist+(80*5) +Peoplelist equ exlist+(100*5) +Zoomspace equ peoplelist+(12*5) +Printedlist equ zoomspace+(46*40) +Listofchanges equ printedlist+(5*80) +Undertimedtext equ listofchanges+(numchanges*4) +Rainlist equ undertimedtext+(256*undertimedysize) +Initialreelrouts equ rainlist+(6*64) +Initialvars equ initialreelrouts+lenofreelrouts +Lengthofbuffer equ initialvars+lengthofvars + +Flags equ 0 ;offsets of items in backdrop segment +Blocks equ flags+192 +Map equ 0 +Lengthofmap equ map+(mapwidth*maplength) + +Intextdat equ 0 +Intext equ intextdat+(38*2) +Blocktextdat equ 0 +Blocktext equ blocktextdat+(98*2) +Settextdat equ 0 +Settext equ settextdat+(130*2) +Freetextdat equ 0 +Freetext equ freetextdat+(82*2) + +Numexobjects equ 114 +Exframeslen equ 30000 +Extextlen equ 18000 + +Exframedata equ 0 +Exframes equ exframedata+2080 +Exdata equ exframes+exframeslen +Extextdat equ exdata+(16*numexobjects) +Extext equ extextdat+((numexobjects+2)*2) +Lengthofextra equ extext+extextlen + +Framedata equ 0 +Frames equ framedata+2080 + +Frframedata equ 0 +Frframes equ frframedata+2080 + +Personframes equ 0 +Persontxtdat equ personframes+24 +Persontext equ persontxtdat+(1026*2) + +Pathdata equ 0 +Reellist equ pathdata+(36*144) + +Lenofmapstore equ 22*8*20*8 +Maplen equ mapwidth*maplength +Freedatlen equ 16*80 +Setdatlen equ 64*128 +Textstart equ 66*2 + +;-----------------------------------------------------------------Variables---- + + +startvars db 0 +progresspoints db 0 +watchon db 0 +shadeson db 0 +secondcount db 0 +minutecount db 30 +hourcount db 19 +zoomon db 1 +location db 0 +expos db 0 +exframepos dw 0 +extextpos dw 0 +card1money dw 0 +listpos dw 0 +ryanpage db 0 + + +watchingtime dw 0 +reeltowatch dw -1 ;reel plays from here in mode 0 +endwatchreel dw 0 ;and stops here. Mode set to 1 +speedcount db 0 +watchspeed db 0 +reeltohold dw -1 ;if mode is 1 hold on this reel +endofholdreel dw -1 ;if mode is 2 then play to end of +watchmode db -1 ;hold reel. Set mode back to -1 +destafterhold db 0 ;set walking destination. + +newsitem db 0 + +liftflag db 0 +liftpath db 0 +lockstatus db 1 +doorpath db 0 +counttoopen db 0 +counttoclose db 0 +rockstardead db 0 +generaldead db 0 +sartaindead db 0 +aidedead db 0 +beenmugged db 0 + +gunpassflag db 0 +canmovealtar db 0 +talkedtoattendant db 0 +talkedtosparky db 0 +talkedtoboss db 0 +talkedtorecep db 0 +cardpassflag db 0 +madmanflag db 0 +keeperflag db 0 +lasttrigger db 0 +mandead db 0 +seed db 1,2,3 +needtotravel db 0 +throughdoor db 0 +newobs db 0 +ryanon db 255 +combatcount db 0 +lastweapon db -1 + +dreamnumber db 0 +roomafterdream db 0 + +shakecounter db 48 + +lengthofvars equ $-startvars + + +speechcount db 0 + +charshift dw 0 +kerning db 0 + +brightness db 0 + +roomloaded db 0 + +didzoom db 0 + +linespacing dw 10 +textaddressx dw 13 +textaddressy dw 182 ;address on screen for text +textlen db 0 +lastxpos dw 0 + +icontop dw 0 +iconleft dw 0 +itemframe db 0 +itemtotran db 0 +roomad dw 0 +oldsubject dw 0 + +withobject db 0 +withtype db 0 + +lookcounter dw 0 + +command db 0 +commandtype db 0 +oldcommandtype db 0 +objecttype db 0 +getback db 0 +invopen db 0 +mainmode db 0 +pickup db 0 +lastinvpos db 0 +examagain db 0 +newtextline db 0 + +openedob db 0 +openedtype db 0 + +oldmapadx dw 0 +oldmapady dw 0 +mapadx dw 0 +mapady dw 0 +mapoffsetx dw 104 +mapoffsety dw 38 + +mapxstart dw 0 +mapystart dw 0 +mapxsize db 0 +mapysize db 0 + +havedoneobs db 0 +manisoffscreen db 0 +rainspace db 0 + +facing db 0 +leavedirection db 0 +turntoface db 0 +turndirection db 0 + +maintimer dw 0 +introcount db 0 +arrowad dw 0 +currentkey db 0 +oldkey db 0 +useddirection db 0 +currentkey2 db 0 + +timercount db 0 +oldtimercount db 0 + +mapx db 0 +mapy db 0 +newscreen db 0 +ryanx db 0 +ryany db 0 +lastflag db 0 +lastflagex db 0 +flagx db 0 +flagy db 0 + +currentex db 0 +currentfree db 0 +currentframe dw 0 +framesad dw 0 +dataad dw 0 +frsegment dw 0 +objectx dw 0 +objecty dw 0 +offsetx dw 0 +offsety dw 0 +savesize dw 0 +savesource dw 0 +savex db 0 +savey db 0 +currentob db 0 +priority db 0 + +destpos db 0 + +reallocation db 0 ;----------;some rooms have more than one +roomnum db 0 ;place in the Roomdata list, to + ;account for different start points +nowinnewroom db 0 ;this variable holds the rooms +resetmanxy db 0 ;real value - ie:which file it's in +newlocation db -1 ;if set then room is loaded at end of watch mode, or straight away if not in watch mode +autolocation db -1 +mustload db 0 +answered db 0 +saidno db 0 + +doorcheck1 db 0 +doorcheck2 db 0 +doorcheck3 db 0 +doorcheck4 db 0 + +mousex dw 0 +mousey dw 0 +mousebutton dw 0 +mousebutton1 dw 0 +mousebutton2 dw 0 +mousebutton3 dw 0 +mousebutton4 dw 0 +oldbutton dw 0 +oldx dw 0 +oldy dw 0 +lastbutton dw 0 +oldpointerx dw 0 +oldpointery dw 0 +delherex dw 0 +delherey dw 0 +pointerxs db 32 +pointerys db 32 +delxs db 0 +delys db 0 +pointerframe db 0 +pointerpower db 0 +auxpointerframe db 0 +pointermode db 0 +pointerspeed db 0 +pointercount db 0 +inmaparea db 0 + +reelpointer dw 0 +slotdata db 0 +thisslot db 0 +slotflags db 0 +takeoff dw 0 + +talkmode db 0 +talkpos db 0 +character db 0 +persondata dw 0 +talknum db 0 +numberinroom db 0 + +currentcel db 0 +oldselection db 0 + +stopwalking db 0 + +mouseon db 0 +played dw 0 +timer1 db 0 +timer2 db 0 +timer3 db 0 +wholetimer dw 0 +timer1to db 0 +timer2to db 0 +timer3to db 0 + +watchdump db 0 + +currentset dw 0 + +logonum db 0 +oldlogonum db 0 +newlogonum db 0 +netseg dw 0 +netpoint dw 0 +keynum db 0 +cursorstate db 0 + +pressed db 0 +presspointer dw 0 +graphicpress db 0 +presscount db 0 +keypadax dw 0 +keypadcx dw 0 +lightcount db 0 +folderpage db 0 +diarypage db 0 +menucount db 0 +symboltopx db 0 +symboltopnum db 0 +symboltopdir db 0 +symbolbotx db 0 +symbolbotnum db 0 +symbolbotdir db 0 + +symboltolight db 0 +symbol1 db 0 +symbol2 db 0 +symbol3 db 0 +symbolnum db 0 +dumpx dw 0 +dumpy dw 0 + +walkandexam db 0 +walkexamtype db 0 +walkexamnum db 0 + +cursloc dw 0 +curslocx dw 0 +curslocy dw 0 +curpos dw 0 +monadx dw 0 +monady dw 0 +gotfrom dw 0 + +monsource dw 0 +numtodo dw 0 + +timecount dw 0 +counttotimed dw 0 +timedseg dw 0 +timedoffset dw 0 +timedy db 0 +timedx db 0 +needtodumptimed db 0 + +;recordpos dw 0 +;rechandle dw 0 +handle dw 0 + +loadingorsave db 0 ;1 if load 2 if save +currentslot db 0 +cursorpos db 0 + +colourpos db 0 +fadedirection db 0 +numtofade db 0 +fadecount db 0 +addtogreen db 0 +addtored db 0 +addtoblue db 0 + + +lastsoundreel dw 0 + +soundbuffer dw 0 +soundbufferad dw 0 +soundbufferpage db 0 +soundtimes db 0 +needsoundbuff db 0 + +oldint9seg dw -1 +oldint9add dw -1 +oldint8seg dw -1 +oldint8add dw -1 +oldsoundintseg dw 0 +oldsoundintadd dw 0 +soundbaseadd dw 0 +dsp_status dw 0 +dsp_write dw 0 +dmaaddress db 0 +soundint db 5 +sounddmachannel db 1 +sampleplaying db 255 +testresult db 0 +currentirq db 0 +speechloaded db 0 +speechlength dw 0 +volume db 0 +volumeto db 0 +volumedirection db 0 +volumecount db 0 + +playblock db 0 + +wongame db 0 + +lasthardkey db 0 +bufferin dw 0 +bufferout dw 0 + +extras dw 0 ;for allocated memory +workspace dw 0 ;allocated mem for screen buffer +mapstore dw 0 ;allocated mem for copy of room +charset1 dw 0 ;allocated mem for normal charset +tempcharset dw 0 ;monitor char set +icons1 dw 0 ;allocated mem for on screen stuff +icons2 dw 0 +buffers dw 0 ;allocated mem for buffers +mainsprites dw 0 ;allocated mem for Ryan sprites +backdrop dw 0 +mapdata dw 0 + +sounddata dw 0 +sounddata2 dw 0 + +recordspace dw 0 + +freedat dw 0 +setdat dw 0 + +reel1 dw -1 +reel2 dw -1 +reel3 dw -1 +roomdesc dw -1 +freedesc dw -1 +setdesc dw -1 +blockdesc dw -1 +setframes dw -1 +freeframes dw -1 +people dw -1 +reels dw -1 +commandtext dw -1 +puzzletext dw -1 +traveltext dw -1 +tempgraphics dw -1 +tempgraphics2 dw -1 +tempgraphics3 dw -1 +tempsprites dw -1 + +textfile1 dw -1 +textfile2 dw -1 +textfile3 dw -1 + +blinkframe db 23 +blinkcount db 0 + + +reasseschanges db 0 ; if it's a 1 then obname will assume that +pointerspath db 0 ;the command has changed. +manspath db 0 ;ie. from "walk to" to "Examine" +pointerfirstpath db 0 +finaldest db 0 +destination db 0 +linestartx dw 0 +linestarty dw 0 +lineendx dw 0 +lineendy dw 0 +increment1 dw 0 +increment2 dw 0 +lineroutine db 0 +linepointer db 0 +linedirection db 0 +linelength db 0 + +liftsoundcount db 0 + +emmhandle dw 0 +emmpageframe dw 0 +emmhardwarepage db 0 + +ch0emmpage dw 0 +ch0offset dw 0 +ch0blockstocopy dw 0 + +ch0playing db 0 +ch0repeat db 0 +ch0oldemmpage dw 0 +ch0oldoffset dw 0 +ch0oldblockstocopy dw 0 + +ch1playing db 255 +ch1emmpage dw 0 +ch1offset dw 0 +ch1blockstocopy dw 0 +ch1blocksplayed dw 0 + +soundbufferwrite dw 0 + +soundemmpage dw 0 +speechemmpage dw 0 + +currentsample db -1 +roomssample db 0 + +gameerror db 0 + +howmuchalloc dw 0 + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/vgafades.asm b/devtools/tasmrecover/dreamweb/vgafades.asm new file mode 100644 index 0000000000..26874a428f --- /dev/null +++ b/devtools/tasmrecover/dreamweb/vgafades.asm @@ -0,0 +1,867 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +Fadedos proc near + + call vsync + mov es,buffers + mov di,startpal + mov al,0 + mov dx,3c7h + out dx,al + mov dx,3c9h + mov cx,768/4 +dos1: in al,dx + stosb + loop dos1 + + mov cx,64 +fadedosloop: push cx + + mov ds,buffers + mov si,startpal + mov cx,768 +dos3: lodsb + cmp al,0 + jz nodown + dec al +nodown: mov [si-1],al + loop dos3 + + call vsync + mov ds,buffers + mov si,startpal + mov al,0 + mov dx,3c8h + out dx,al + inc dx + mov cx,768/4 +dos2: lodsb + out dx,al + loop dos2 + + pop cx + loop fadedosloop + ret + + endp + + + + + + + + + + + +Dofade proc near + + cmp fadedirection,0 + jz finishfade + mov cl,numtofade + mov ch,0 + mov al,colourpos + mov ah,0 + mov ds,buffers + mov si,startpal + add si,ax + add si,ax + add si,ax + call showgroup + mov al,numtofade + add al,colourpos + mov colourpos,al + cmp al,0 + jnz finishfade + call fadecalculation +finishfade: ret + + endp + + + + + + + +Clearendpal proc near + + mov es,buffers + mov di,endpal + mov cx,768 + mov al,0 + rep stosb + ret + + endp + + + + +Clearpalette proc near + + mov fadedirection,0 + call clearstartpal + call dumpcurrent + ret + + endp + + + + + + + + + + +Fadescreenup proc near + + call clearstartpal + call paltoendpal + mov fadedirection,1 + mov fadecount,63 + mov colourpos,0 + mov numtofade,128 + ret + + endp + + + + +Fadetowhite proc near + + mov es,buffers + mov di,endpal + mov cx,768 + mov al,63 + rep stosb + mov di,endpal + mov al,0 + stosb + stosb + stosb + call paltostartpal + mov fadedirection,1 + mov fadecount,63 + mov colourpos,0 + mov numtofade,128 + ret + + endp + + + +Fadefromwhite proc near + + mov es,buffers + mov di,startpal + mov cx,768 + mov al,63 + rep stosb + mov di,startpal + mov al,0 + stosb + stosb + stosb + call paltoendpal + mov fadedirection,1 + mov fadecount,63 + mov colourpos,0 + mov numtofade,128 + ret + + endp + + + + + + + + + +Fadescreenups proc near + + call clearstartpal + call paltoendpal + mov fadedirection,1 + mov fadecount,63 + mov colourpos,0 + mov numtofade,64 + ret + + endp + + + +Fadescreendownhalf proc near + + call paltostartpal + call paltoendpal + mov cx,768 + mov es,buffers + mov bx,endpal +halfend: mov al,[es:bx] + shr al,1 + mov [es:bx],al + inc bx + loop halfend + + mov ds,buffers + mov es,buffers + mov si,startpal+(56*3) + mov di,endpal+(56*3) + mov cx,3*5 + rep movsb + mov si,startpal+(77*3) + mov di,endpal+(77*3) + mov cx,3*2 + rep movsb + + mov fadedirection,1 + mov fadecount,31 + mov colourpos,0 + mov numtofade,32 + ret + + endp + + +Fadescreenuphalf proc near + + call endpaltostart + call paltoendpal + mov fadedirection,1 + mov fadecount,31 + mov colourpos,0 + mov numtofade,32 + ret + + endp + + + + + + + + + + +Fadescreendown proc near + + call paltostartpal + call clearendpal + mov fadedirection,1 + mov fadecount,63 + mov colourpos,0 + mov numtofade,128 + ret + + endp + + + +Fadescreendowns proc near + + call paltostartpal + call clearendpal + mov fadedirection,1 + mov fadecount,63 + mov colourpos,0 + mov numtofade,64 + ret + + endp + + + + + + + + +Clearstartpal proc near + + mov es,buffers + mov di,startpal + mov cx,256 +wholeloop1: mov ax,0 + stosw + mov al,0 + stosb + loop wholeloop1 + ret + + endp + + + + + + +Showgun proc near + + mov addtored,0 ;12 + mov addtogreen,0 + mov addtoblue,0 + call paltostartpal + call paltoendpal + call greyscalesum + +; mov es,buffers +; mov di,endpal+3 +; mov cx,255 +; mov ax,0 +;reds: mov byte ptr [es:di],63 +; inc di +; stosw +; loop reds + + mov fadedirection,1 + mov fadecount,63 + mov colourpos,0 + mov numtofade,128 + mov cx,130 + call hangon + call endpaltostart + call clearendpal + mov fadedirection,1 + mov fadecount,63 + mov colourpos,0 + mov numtofade,128 + mov cx,200 + call hangon + mov roomssample,34 + call loadroomssample + mov volume,0 + mov dx,offset cs:gungraphic + call loadintotemp + call createpanel2 + mov ds,tempgraphics + mov al,0 + mov ah,0 + mov di,100 + mov bx,4 + call showframe + mov ds,tempgraphics + mov al,1 + mov ah,0 + mov di,158 + mov bx,106 + call showframe + call worktoscreen + call getridoftemp + call fadescreenup + mov cx,160 + call hangon + mov al,12 + mov ah,0 + call playchannel0 + mov dx,offset cs:endtextname + call loadtemptext + call rollendcredits2 + call getridoftemptext + ret + + endp + + + + + +Rollendcredits2 proc near + + call rollem + ret + + endp + + + + +Rollem proc near + + mov cl,160 + mov ch,160 + mov di,25 + mov bx,20 + mov ds,mapstore + mov si,0 + call multiget + + mov es,textfile1 + mov si,49*2 + mov ax,[es:si] + mov si,ax + add si,textstart + + mov cx,80 +endcredits21: push cx + + mov bx,10 + mov cx,linespacing +endcredits22: push cx si di es bx + + call vsync + mov cl,160 + mov ch,160 + mov di,25 + mov bx,20 + mov ds,mapstore + mov si,0 + call multiput + call vsync + pop bx es di si + push si di es bx + + mov cx,18 +onelot2: push cx + mov di,25 ;75 + mov dx,161 + mov ax,0 + call printdirect + add bx,linespacing + pop cx + loop onelot2 + + call vsync + mov cl,160 + mov ch,160 + mov di,25 ;75 + mov bx,20 + call multidump + + pop bx es di si cx + cmp lasthardkey,1 + jz endearly2 + dec bx + loop endcredits22 + pop cx +looknext2: mov al,[es:si] + inc si + cmp al,":" + jz gotnext2 + cmp al,0 + jz gotnext2 + jmp looknext2 +gotnext2: cmp lasthardkey,1 + jz endearly + loop endcredits21 + + mov cx,120 + call hangone + ret +endearly2: pop cx +endearly: ret + + endp + + + + + + + + + +Fadecalculation proc near + + cmp fadecount,0 + jz nomorefading + mov bl,fadecount + mov es,buffers + mov si,startpal + mov di,endpal + mov cx,768 +fadecolloop: mov al,[es:si] + mov ah,[es:di] + cmp al,ah + jz gotthere + jc lesscolour + dec byte ptr [es:si] + jmp gotthere +lesscolour: cmp bl,ah + jz withit + jnc gotthere +withit: inc byte ptr [es:si] +gotthere: inc si + inc di + loop fadecolloop + dec fadecount + ret +nomorefading: mov fadedirection,0 + ret + + endp + + + + + + + + + + + + + + + + + + + + + + + + +Greyscalesum proc near ;converts palette to grey scale + ;summed using formula: + mov es,buffers ; .20xred + .59xGreen + .11xBlue + mov si,maingamepal + mov di,endpal + mov cx,256 ;convert 256 colours + +greysumloop1: push cx + mov bx,0 + mov al,[es:si] + mov ah,0 + mov cx,20 + mul cx + add bx,ax + mov al,[es:si+1] + mov ah,0 + mov cx,59 + mul cx + add bx,ax + mov al,[es:si+2] + mov ah,0 + mov cx,11 + mul cx + add bx,ax ;bx holds equationx100 + + mov al,-1 ;divide result by 100 +greysumloop2: inc al + sub bx,100 + jnc greysumloop2 ;ah holds grey scale number + mov bl,al + + mov al,bl + mov ah,addtored + cmp al,0 + ;jz noaddr + add al,ah +noaddr: stosb + mov ah,addtogreen + mov al,bl + cmp al,0 + jz noaddg + add al,ah +noaddg: stosb ;store result in red, green and + mov ah,addtoblue + mov al,bl + cmp al,0 + jz noaddb + add al,ah +noaddb: stosb ;blue portions of palette. + + add si,3 + pop cx + loop greysumloop1 + ret + + endp + + + + + + + + + + + + + + + + + + + + + + +Showgroup proc near + + mov dx,3c8h + out dx,al + mov dx,3c9h +showgroup1: lodsb + out dx,al + lodsb + out dx,al + lodsb + out dx,al + loop showgroup1 + ret + + endp + + + + + +Paltostartpal proc near + + mov es,buffers + mov ds,buffers + mov si,maingamepal + mov di,startpal + mov cx,768/2 + rep movsw + ret + + endp + + + +Endpaltostart proc near + + mov es,buffers + mov ds,buffers + mov si,endpal + mov di,startpal + mov cx,768/2 + rep movsw + ret + + endp + + +Startpaltoend proc near + + mov es,buffers + mov ds,buffers + mov di,endpal + mov si,startpal + mov cx,768/2 + rep movsw + ret + + endp + + + + + + + + +Paltoendpal proc near + + mov es,buffers + mov ds,buffers + mov di,endpal + mov si,maingamepal + mov cx,768/2 + rep movsw + ret + + endp + + + + + + + + + + + + + +Allpalette proc near + + mov es,buffers + mov ds,buffers + mov di,startpal + mov si,maingamepal + mov cx,768/2 + rep movsw + call dumpcurrent + ret + + endp + + + + + +Dumpcurrent proc near + + mov si,startpal + mov ds,buffers + call vsync + mov al,0 + mov cx,128 + call showgroup + call vsync + mov al,128 + mov cx,128 + call showgroup + ret + + endp + + + + + + + + + + + +Fadedownmon proc near + + call paltostartpal + call paltoendpal + mov es,buffers + mov di,endpal+(231*3) + mov cx,3*8 + mov ax,0 + rep stosb + mov di,endpal+(246*3) + stosb + stosw + mov fadedirection,1 + mov fadecount,63 + mov colourpos,0 + mov numtofade,128 + mov cx,64 ;100 + call hangon ;curs + ret + + endp + + + + + +Fadeupmon proc near + + call paltostartpal + call paltoendpal + mov es,buffers + mov di,startpal+(231*3) + mov cx,3*8 + mov ax,0 + rep stosb + mov di,startpal+(246*3) + stosb + stosw + mov fadedirection,1 + mov fadecount,63 + mov colourpos,0 + mov numtofade,128 + mov cx,128 + call hangon ;curs + ret + + endp + + + + + +Fadeupmonfirst proc near + + call paltostartpal + call paltoendpal + mov es,buffers + mov di,startpal+(231*3) + mov cx,3*8 + mov ax,0 + rep stosb + mov di,startpal+(246*3) + stosb + stosw + mov fadedirection,1 + mov fadecount,63 + mov colourpos,0 + mov numtofade,128 + mov cx,64 + call hangon + mov al,26 + call playchannel1 + mov cx,64 + call hangon + + ret + + endp + + + + + + + +Fadeupyellows proc near + + ;call startpaltoend + call paltoendpal + mov es,buffers + mov di,endpal+(231*3) + mov cx,3*8 + mov ax,0 + rep stosb + mov di,endpal+(246*3) + stosb + stosw + mov fadedirection,1 + mov fadecount,63 + mov colourpos,0 + mov numtofade,128 + mov cx,128 + call hangon + ret + + endp + + + +Initialmoncols proc near + + call paltostartpal + mov es,buffers + mov di,startpal+(230*3) + mov cx,3*9 + mov ax,0 + rep stosb + mov di,startpal+(246*3) + stosb + stosw + mov ds,buffers + mov si,startpal+(230*3) + mov al,230 + mov cx,18 + call showgroup + ret + + endp + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/dreamweb/vgagrafx.asm b/devtools/tasmrecover/dreamweb/vgagrafx.asm new file mode 100644 index 0000000000..1d8e5f5dc7 --- /dev/null +++ b/devtools/tasmrecover/dreamweb/vgagrafx.asm @@ -0,0 +1,1763 @@ +;Copyright (c) 1990-2011 by Neil Dodwell +;Released with permission from Neil Dodwell under GPLv2 +;See LICENSE file for full license text +Screenwidth equ 320 ;physical width of screen + + + +Allocatework proc near + + mov bx,1000h + call allocatemem + mov workspace,ax + ret + + endp + + + + + +Showpcx proc near + + call openfile + mov bx,handle + mov ds,workspace + mov ah,3fh + mov cx,128 + mov dx,0 + int 21h + + mov ds,workspace + mov si,16 + mov cx,48 + mov es,buffers + mov di,maingamepal +pcxpal: push cx + call readabyte + shr al,1 + shr al,1 + stosb + pop cx + loop pcxpal + mov cx,768-48 + mov ax,0ffffh + rep stosw + + call readoneblock + mov si,0 + mov di,0 + mov cx,480 +convertpcx: push cx + push di + mov ds,workspace + mov es,buffers + mov di,pointerback + mov bx,0 +sameline: call readabyte + mov ah,al + and ah,11000000b + cmp ah,11000000b + jnz normal + mov cl,al + and cl,00111111b + mov ch,0 + push cx + call readabyte + pop cx + add bx,cx + rep stosb + cmp bx,4*80 + jnz sameline + jmp endline +normal: stosb + inc bx + cmp bx,4*80 + jnz sameline + +endline: pop di + push si + mov dx,0a000h + mov es,dx + mov si,pointerback + mov ds,buffers + + mov dx,03c4h + mov al,2 + mov ah,1 + out dx,ax + mov cx,40 + push di + rep movsw + pop di + mov ah,2 + out dx,ax + mov cx,40 + push di + rep movsw + pop di + mov ah,4 + out dx,ax + mov cx,40 + push di + rep movsw + pop di + mov ah,8 + out dx,ax + mov cx,40 + rep movsw + + pop si + pop cx + loop convertpcx + + mov bx,handle + call closefile + ret + + endp + + + + +Readabyte proc near + + cmp si,30000 + jnz notendblock + push bx es di ds si + call readoneblock + pop si ds di es bx + mov si,0 +notendblock: lodsb + ret + + endp + + + + +Readoneblock proc near + + mov bx,handle + mov ah,3fh + mov ds,workspace + mov ah,3fh + mov cx,30000 + mov dx,0 + int 21h + ret + + endp + + + + + + + + +Loadpalfromiff proc near + + mov dx,offset cs:palettescreen + call openfile + mov cx,2000 + mov ds,mapstore + mov dx,0 + call readfromfile + call closefile + mov es,buffers + mov di,maingamepal + mov ds,mapstore + mov si,30h + mov cx,768 +palloop: lodsb + shr al,1 + shr al,1 + + cmp brightness,1 + jnz nought + cmp al,0 + jz nought + mov ah,al + shr ah,1 + add al,ah + shr ah,1 + add al,ah + cmp al,64 + jc nought + mov al,63 + +nought: stosb + loop palloop + ret + + endp + + + + + + +Setmode proc near + + call vsync + mov ah,12h + mov al,1 + mov bl,33h + int 10h + + mov ah,0 + mov al,13h + int 10h + + mov al,6 ; sets graphic controller + mov dx,3ceh ; register 6 (MM) to 1 - 64K + out dx,al + inc dx + in al,dx + and al,11110011b + or al,00000100b + out dx,al + + mov al,4 ; sets sequencer + mov dx,3c4h ; register 4 (EM) to 1 - >64K + out dx,al + inc dx + in al,dx + and al,11111101b + or al,00000010b + out dx,al + + mov al,13h ;give screen 16 extra hidden + mov dx,3d4h ;pixels at one side + out dx,al + inc dx + mov al,screenwidth/8 ; width of screen + out dx,al + + mov al,8h + mov dx,3d4h + out dx,al + inc dx + mov al,00000000b + out dx,al + + mov al,11h + mov dx,3d4h + out dx,al + inc dx + in al,dx + or al,128 + out dx,al + + mov al,00 + mov dx,3d4h + out dx,al + inc dx + mov al,3fh + out dx,al + mov al,01 + mov dx,3d4h + out dx,al + inc dx + mov al,3fh + out dx,al + ret + + endp + + + +Cls proc near + + mov ax,0a000h + mov es,ax + mov di,0 + mov cx,7fffh + mov ax,0 + rep stosw + ret + + endp + + + +Printundermon proc near ;prints workspace through the text + + mov si,(screenwidth*43)+76 + mov di,si + mov es,workspace + add si,8*screenwidth + mov dx,0a000h + mov ds,dx + mov cx,104 +scrollmonloop1: push cx di si + mov cx,170 +scrollmonloop2: lodsb + cmp al,231 + jnc dontplace +placeit: stosb + loop scrollmonloop2 + jmp finmonscroll +dontplace: inc di + loop scrollmonloop2 + +finmonscroll: pop si di cx + add si,screenwidth + add di,screenwidth + loop scrollmonloop1 + ret + + endp + + + + + + + + +Worktoscreen proc near + + call vsync + mov si,0 + mov di,0 + mov cx,25 + mov ds,workspace + mov dx,0a000h + mov es,dx + +dumpallloop: call width160 + call width160 + call width160 + call width160 + call width160 + call width160 + call width160 + call width160 + loop dumpallloop + + ret + + endp + + + + + + + + + +; +;Worktoscreen2 proc near +; +; call showpointer +; +; mov ds,workspace +; mov dx,0a000h +; mov es,dx +; +; mov si,320-16 +; mov di,320-16 +; mov bl,33 +; mov cx,16 +;screen2loop1: push di si cx +; call vsync +; cmp bl,21 +; jc screen2loop2 +; sub cx,16 +; jz isoneblock +;screen2loop2: movsw +; movsw +; movsw +; movsw +; movsw +; movsw +; movsw +; movsw +; add di,320-15 +; add si,320-15 +; loop screen2loop2 +;isoneblock: mov cx,16 +; mov ax,320-15 +;oneblockloop: push cx +; rep movsb +; pop cx +; add si,ax +; add di,ax +; inc ax +; loop oneblockloop +; +; pop cx si di +; add cx,16 +; cmp cx,200 +; jc itsallright +; mov cx,200 +;itsallright: sub si,16 +; sub di,16 +; dec bl +; jnz screen2loop1 +; +; call delpointer +; ret +; +; endp +; +; +; +; + + + + +Paneltomap proc near + + mov di,mapxstart + add di,mapadx + mov bx,mapystart + add bx,mapady + mov ds,mapstore + mov si,0 + mov cl,mapxsize + mov ch,mapysize + call multiget + ret + + endp + + + +Maptopanel proc near + + mov di,mapxstart + add di,mapadx + mov bx,mapystart + add bx,mapady + mov ds,mapstore + mov si,0 + mov cl,mapxsize + mov ch,mapysize + call multiput + + ret + + endp + + + + + +Dumpmap proc near + + mov di,mapxstart + add di,mapadx + mov bx,mapystart + add bx,mapady + mov cl,mapxsize + mov ch,mapysize + call multidump + ret + + endp + + + + +Pixelcheckset proc near ;al=x, ah=y, es:bx=setlist pos + ;checks exact pixel in a frame + push ax + sub al,[es:bx] ;for detection. + sub ah,[es:bx+1] ;al,ah now holds offset within + ;the frame + push es bx cx ax + mov al,[es:bx+4] ;object number + call getsetad + mov al,[es:bx+17] ;finds frame number + mov es,setframes + mov bx,framedata + mov ah,0 + mov cx,6 + mul cx + add bx,ax ;get data for this frame in es:bx + pop ax + + push ax + mov al,ah + mov ah,0 + mov cl,[es:bx] + mov ch,0 + mul cx + pop cx + mov ch,0 + add ax,cx ;ax now holds offset from corner + ;of the frame + add ax,[es:bx+2] + mov bx,ax ;es:bx now holds offset of pixel! + add bx,frames + + mov al,[es:bx] + mov dl,al + pop cx bx es ax + cmp dl,0 + ret + + endp + + + + + + + + + + + + +Createpanel proc near + + mov di,0 + mov bx,8 + mov ds,icons2 + mov al,0 + mov ah,2 + call showframe ;spritef + mov di,160 + mov bx,8 + mov ds,icons2 + mov al,0 + mov ah,2 + call showframe ;spritef + mov di,0 + mov bx,104 + mov ds,icons2 + mov al,0 + mov ah,2 + call showframe ;spritef + mov di,160 + mov bx,104 + mov ds,icons2 + mov al,0 + mov ah,2 + call showframe ;spritef + ret + + endp + + + +Createpanel2 proc near + + call createpanel + mov di,0 + mov bx,0 + mov ds,icons2 + mov al,5 + mov ah,2 + call showframe + mov di,160 + mov bx,0 + mov ds,icons2 + mov al,5 + mov ah,2 + call showframe + ret + + endp + + + + + + +;Showspritef proc near +; +; mov ax,bx +; mov bx,screenwidth +; mul bx +; add di,ax +; mov dx,screenwidth +; mov es,workspace +; mov si,2080 +; mov ah,0 +; add ax,ax +; mov bx,ax +; add ax,ax +; add bx,ax +; add si,[bx+2] +; mov cx,[bx+0] +;spritefloop: push cx di +; call width80 +; pop di cx +; add di,dx +; dec ch +; jnz spritefloop +; ret +; +; endp +; +; + + + + + + + + +Clearwork proc near + + mov ax,0h + mov es,workspace + mov di,0 + mov cx,(200*320)/64 +clearloop: stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + loop clearloop + ret + + endp + + + + + + +Vsync proc near + + push ax bx cx dx si di ds es + + mov dx,03dah +loop2: in al,dx + test al,8 + jz loop2 +loop1: in al,dx + test al,8 + jnz loop1 + + call doshake + call dofade + if debuglevel2 + call debugkeys + endif + pop es ds di si dx cx bx ax + ret + + endp + + + +Doshake proc near + + cmp shakecounter,48 + jz finishshake + inc shakecounter + mov bl,shakecounter + mov bh,0 + add bx,offset cs:shaketable + mov al,10h + mov dx,3d4h + out dx,al + inc dx + mov al,[cs:bx] + out dx,al +finishshake: ret + +shaketable: db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh + db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh + db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh + db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh + db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh + db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh + db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh + db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9eh + db 9ch,9ah,9fh,9ah,9ch,9eh,0a0h,9bh,9dh,99h,9fh,9ch + + endp + + + + + + +Zoom proc near + + cmp watchingtime,0 + jnz inwatching + cmp zoomon,1 + jz zoomswitch +inwatching: ret + +zoomswitch: cmp commandtype,199 + jc zoomit +cantzoom: call putunderzoom + ret + +zoomit: mov ax,oldpointery + sub ax,9 + mov cx,screenwidth + mul cx + add ax,oldpointerx + sub ax,11 + mov si,ax + + mov ax,zoomy+4 + mov cx,screenwidth + mul cx + add ax,zoomx+5 + mov di,ax + mov es,workspace + mov ds,workspace + + mov cx,20 +zoomloop: push cx + mov cx,23 +zoomloop2: lodsb + mov ah,al + stosw + mov [es:di+screenwidth-2],ax + loop zoomloop2 + add si,screenwidth-23 + add di,screenwidth-46+screenwidth + pop cx + loop zoomloop + + call crosshair + mov didzoom,1 + ret + + endp + + + + + + + + + +Delthisone proc near + + push ax + push ax + mov al,ah + mov ah,0 + add ax,mapady + mov bx,screenwidth + mul bx + pop bx + mov bh,0 + add bx,mapadx + add ax,bx + mov di,ax + pop ax + push ax + mov al,ah + mov ah,0 + mov bx,22*8 + mul bx + pop bx + mov bh,0 + add ax,bx + mov si,ax + + mov es,workspace + mov ds,mapstore + mov dl,cl + mov dh,0 + mov ax,screenwidth + sub ax,dx + neg dx + add dx,22*8 +deloneloop: push cx + mov ch,0 + rep movsb + pop cx + add di,ax + add si,dx + dec ch + jnz deloneloop + ret + + endp + + + + + + + +;------------------------------------------------------------Pointer update---- + + +Multiget proc near ;di,bx = dest x,y + ;cl,ch = size + mov ax,bx ;si,di = storage + mov bx,screenwidth + mul bx + add di,ax + + mov es,workspace + push es ds + pop es ds + xchg di,si + mov al,cl + mov ah,0 + mov dx,screenwidth + sub dx,ax + + mov al,cl + and al,1 + jnz oddwidth2 + + mov bl,cl + mov bh,0 + mov ax,offset cs:width0 + shr bx,1 + sub ax,bx + mov cl,ch + mov ch,0 +multiloop3: call ax + add si,dx + loop multiloop3 + ret + +oddwidth2: mov bl,cl + mov bh,0 + shr bx,1 + mov ax,offset cs:width0 + sub ax,bx + mov cl,ch + mov ch,0 +multiloop4: call ax + movsb + add si,dx + loop multiloop4 + ret + + endp + + + + + + + +Multiput proc near ;di,bx = dest x,y + ;cl,ch = size + mov ax,bx ;si,di = storage + mov bx,screenwidth + mul bx + add di,ax + + mov es,workspace + mov al,cl + mov ah,0 + mov dx,screenwidth + sub dx,ax + + mov al,cl + and al,1 + jnz oddwidth3 + + mov bl,cl + mov bh,0 + shr bx,1 + mov ax,offset cs:width0 + sub ax,bx + mov cl,ch + mov ch,0 +multiloop5: call ax + add di,dx + loop multiloop5 + ret + +oddwidth3: mov bl,cl + mov bh,0 + shr bx,1 + mov ax,offset cs:width0 + sub ax,bx + mov cl,ch + mov ch,0 +multiloop6: call ax + movsb + add di,dx + loop multiloop6 + ret + + + endp + + + + + + + + + +Multidump proc near ;di,bx = dest x,y + ;cl,ch = size + mov dx,0a000h + mov es,dx + mov ds,workspace + + mov ax,bx + mov bx,screenwidth + mul bx + add di,ax + mov dx,screenwidth + mov si,di + + mov al,cl + and al,1 + jnz oddwidth + + mov bl,cl + mov bh,0 + shr bx,1 + mov ax,offset cs:width0 + sub ax,bx + mov bl,cl + mov bh,0 + neg bx + add bx,dx + mov cl,ch + mov ch,0 +multiloop1: call ax + add di,bx + add si,bx + loop multiloop1 + ret + +oddwidth: mov bl,cl + mov bh,0 + shr bx,1 + mov ax,offset cs:width0 + sub ax,bx + mov bl,cl + mov bh,0 + neg bx + add bx,screenwidth + mov cl,ch + mov ch,0 +multiloop2: call ax + movsb + add di,bx + add si,bx + loop multiloop2 + ret + + endp + + + + + +Width160 proc near + + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw +width128: movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw +width110: movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw +width88: movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw +width80: movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw +width63: movsw +width62: movsw +width61: movsw +width60: movsw +width59: movsw +width58: movsw +width57: movsw +width56: movsw +width55: movsw +width54: movsw +width53: movsw +width52: movsw +width51: movsw +width50: movsw +width49: movsw +width48: movsw +width47: movsw +width46: movsw +width45: movsw +width44: movsw +width43: movsw +width42: movsw +width41: movsw +width40: movsw +width39: movsw +width38: movsw +width37: movsw +width36: movsw +width35: movsw +width34: movsw +width33: movsw +width32: movsw +width31: movsw +width30: movsw +width29: movsw +width28: movsw +width27: movsw +width26: movsw +width25: movsw +width24: movsw +width23: movsw +width22: movsw +width21: movsw +width20: movsw +width19: movsw +width18: movsw +width17: movsw +width16: movsw +width15: movsw +width14: movsw +width13: movsw +width12: movsw +width11: movsw +width10: movsw +width9: movsw +width8: movsw +width7: movsw +width6: movsw +width5: movsw +width4: movsw +width3: movsw +width2: movsw +width1: movsw +width0: ret + + endp + + + + + + + + + +Doblocks proc near + + mov es,workspace + mov ax,mapady + mov cx,screenwidth + mul cx + mov di,mapadx + add di,ax + + mov al,mapy + mov ah,0 + mov bx,mapwidth + mul bx + mov bl,mapx + mov bh,0 + add ax,bx + + mov si,map + add si,ax + + mov cx,10 +loop120: push di cx + mov cx,11 +loop124: push cx di + + mov ds,mapdata + lodsb + mov ds,backdrop + + push si + cmp al,0 + jz zeroblock + mov ah,al + mov al,0 + mov si,blocks + add si,ax + mov bh,14 + + + mov bh,4 +firstbitofblock: movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + add di,screenwidth-16 + dec bh + jnz firstbitofblock + + mov bh,12 +loop125: movsw + movsw + movsw + movsw + movsw + movsw + movsw + movsw + mov ax,0dfdfh + stosw + stosw + + add di,screenwidth-20 + dec bh + jnz loop125 + + add di,4 + mov ax,0dfdfh + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + add di,screenwidth-16 + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + add di,screenwidth-16 + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + add di,screenwidth-16 + stosw + stosw + stosw + stosw + stosw + stosw + stosw + stosw + + +zeroblock: pop si + + pop di cx + add di,16 + loop loop124 + add si,mapwidth-11 + pop cx di + add di,screenwidth*16 + loop loop120 + ret + + endp + + + + + + + +;----------------------------------------------General sprite output routine---- + +Showframe proc near ; shows a frame from sprites + + push dx ax ; es=destination + mov cx,ax ; ds=source + and cx,511 ; di=x, bx=y + add cx,cx ; al=frame number + mov si,cx ; ah=effects flag + add cx,cx + add si,cx + cmp word ptr [si],0 + jnz notblankshow + pop ax dx + mov cx,0 + ret + +notblankshow: test ah,128 + jnz skipoffsets + mov al,[si+4] + mov ah,0 + add di,ax + mov al,[si+5] + mov ah,0 + add bx,ax +skipoffsets: mov cx,[si+0] + mov ax,[si+2] + add ax,2080 + mov si,ax + pop ax dx + cmp ah,0 + jz noeffects + + test ah,128 + jz notcentred + push ax + mov al,cl + mov ah,0 + shr ax,1 + sub di,ax + mov al,ch + mov ah,0 + shr ax,1 + sub bx,ax + pop ax + +notcentred: test ah,64 + jz notdiffdest + push cx + call frameoutfx + pop cx + ret + +notdiffdest: test ah,8 + jz notprintlist + push ax + mov ax,di + sub ax,mapadx + push bx + sub bx,mapady + mov ah,bl + pop bx + ;call addtoprintlist + pop ax + +notprintlist: test ah,4 + jz notflippedx + mov dx,screenwidth + mov es,workspace + push cx + call frameoutfx + pop cx + ret + +notflippedx: test ah,2 + jz notnomask + mov dx,screenwidth + mov es,workspace + push cx + call frameoutnm + pop cx + ret + +notnomask: test ah,32 + jz noeffects + mov dx,screenwidth + mov es,workspace + push cx + call frameoutbh + pop cx + ret + +noeffects: mov dx,screenwidth + mov es,workspace + push cx + call frameoutv + pop cx ; returns size printed in cx + ret + + endp + + + + + + + + + + +Frameoutv proc near + + push dx + mov ax,bx + mov bx,dx + mul bx + add di,ax + pop dx + + push cx + mov ch,0 + sub dx,cx + pop cx + +frameloop1: push cx + mov ch,0 + +frameloop2: lodsb + cmp al,0 + jnz backtosolid +backtoother: inc di + loop frameloop2 + pop cx + add di,dx + dec ch + jnz frameloop1 + ret + +frameloop3: lodsb + cmp al,0 + jz backtoother +backtosolid: stosb + loop frameloop3 + pop cx + add di,dx + dec ch + jnz frameloop1 + ret + + endp + + + + + + +Frameoutnm proc near + + push dx + mov ax,bx + mov bx,dx + mul bx + add di,ax + pop dx + + push cx + mov ch,0 + sub dx,cx + pop cx + + mov al,cl + and al,1 + jnz oddwidthframe + + mov bl,cl + mov bh,0 + mov ax,offset cs:width0 + shr bx,1 + sub ax,bx + mov cl,ch + mov ch,0 +nmloop1: call ax + add di,dx + loop nmloop1 + ret + +oddwidthframe: mov bl,cl + mov bh,0 + shr bx,1 + mov ax,offset cs:width0 + sub ax,bx + mov cl,ch + mov ch,0 +nmloop2: call ax + movsb + add di,dx + loop nmloop2 + ret + + endp + + + + + + +Frameoutbh proc near + + push dx + mov ax,bx + mov bx,dx + mul bx + add di,ax + pop dx + + push cx + mov ch,0 + sub dx,cx + pop cx + +bhloop2: push cx + mov ch,0 + mov ah,255 +bhloop1: cmp [es:di],ah + jnz nofill + movsb + loop bhloop1 + jmp nextline +nofill: inc di + inc si + loop bhloop1 +nextline: add di,dx + pop cx + dec ch + jnz bhloop2 + ret + + endp + + + + + + + +Frameoutfx proc near + + push dx + mov ax,bx + mov bx,dx + mul bx + add di,ax + pop dx + + push cx + mov ch,0 + add dx,cx + pop cx + +frameloopfx1: push cx + mov ch,0 + +frameloopfx2: lodsb + cmp al,0 + jnz backtosolidfx +backtootherfx: dec di + loop frameloopfx2 + pop cx + add di,dx + dec ch + jnz frameloopfx1 + ret + +frameloopfx3: lodsb + cmp al,0 + jz backtootherfx +backtosolidfx: mov [es:di],al + dec di + loop frameloopfx3 + pop cx + add di,dx + dec ch + jnz frameloopfx1 + ret + + endp + + + + +;---------------------------------------------------Transfers for extra data---- + +Transferinv proc near + + mov di,exframepos + push di + mov al,expos + mov ah,0 + mov bx,ax + add ax,ax + add ax,bx + inc ax + mov cx,6 + mul cx + mov es,extras + mov bx,exframedata + add bx,ax + add di,exframes + + push bx + mov al,itemtotran + mov ah,0 + mov bx,ax + add ax,ax + add ax,bx + inc ax + mov cx,6 + mul cx + mov ds,freeframes + mov bx,frframedata + add bx,ax + mov si,frframes + mov al,[bx] + mov ah,0 + mov cl,[bx+1] + mov ch,0 + add si,[bx+2] ;we have si, and length + mov dx,[bx+4] + pop bx + mov [es:bx+0],al + mov [es:bx+1],cl + mov [es:bx+4],dx + + mul cx + mov cx,ax + push cx + rep movsb + pop cx + pop ax + mov [es:bx+2],ax + add exframepos,cx + ret + + endp + + + + + + + + + + +Transfermap proc near + + mov di,exframepos + push di + mov al,expos + mov ah,0 + mov bx,ax + add ax,ax + add ax,bx + mov cx,6 + mul cx + mov es,extras + mov bx,exframedata + add bx,ax + add di,exframes + + push bx + mov al,itemtotran + mov ah,0 + mov bx,ax + add ax,ax + add ax,bx + mov cx,6 + mul cx + mov ds,freeframes + mov bx,frframedata + add bx,ax + mov si,frframes + mov al,[bx] + mov ah,0 + mov cl,[bx+1] + mov ch,0 + add si,[bx+2] ;we have si, and length + mov dx,[bx+4] + pop bx + mov [es:bx+0],al + mov [es:bx+1],cl + mov [es:bx+4],dx + + mul cx + mov cx,ax + push cx + rep movsb + pop cx + pop ax + mov [es:bx+2],ax + add exframepos,cx + ret + + endp + + +;------------------------------------------------------------------Filenames---- + + +Spritename1 db "DREAMWEB.S00",0 +Spritename3 db "DREAMWEB.S02",0 + +Idname db "INSTALL.DAT",0 + +Characterset1 db "DREAMWEB.C00",0 +Characterset2 db "DREAMWEB.C01",0 +Characterset3 db "DREAMWEB.C02",0 + +Samplename db "DREAMWEB.V00",0 + +Basicsample db "DREAMWEB.V99",0 + +Icongraphics0 db "DREAMWEB.G00",0 +Icongraphics1 db "DREAMWEB.G01",0 +Extragraphics1 db "DREAMWEB.G02",0 +Icongraphics8 db "DREAMWEB.G08",0 +Mongraphicname db "DREAMWEB.G03",0 +Mongraphics2 db "DREAMWEB.G07",0 +Cityname db "DREAMWEB.G04",0 +Travelgraphic1 db "DREAMWEB.G05",0 +Travelgraphic2 db "DREAMWEB.G06",0 +Diarygraphic db "DREAMWEB.G14",0 + +Monitorfile1 db "DREAMWEB.T01",0 +Monitorfile2 db "DREAMWEB.T02",0 +Monitorfile10 db "DREAMWEB.T10",0 ;News items 10-13 +Monitorfile11 db "DREAMWEB.T11",0 +Monitorfile12 db "DREAMWEB.T12",0 +Monitorfile13 db "DREAMWEB.T13",0 +Monitorfile20 db "DREAMWEB.T20",0 +Monitorfile21 db "DREAMWEB.T21",0 ;Ryan's private stuff +Monitorfile22 db "DREAMWEB.T22",0 ;Use for blank carts +Monitorfile23 db "DREAMWEB.T23",0 ;Use for edens cart +Monitorfile24 db "DREAMWEB.T24",0 ;Use for church cart +Foldertext db "DREAMWEB.T50",0 +Diarytext db "DREAMWEB.T51",0 +Puzzletextname db "DREAMWEB.T80",0 ;puzzle text +Traveltextname db "DREAMWEB.T81",0 ;location descriptions +Introtextname db "DREAMWEB.T82",0 ;intro sequence +Endtextname db "DREAMWEB.T83",0 ;end sequence/credits +Commandtextname db "DREAMWEB.T84",0 ;commands + +Volumetabname db "DREAMWEB.VOL",0 + +Foldergraphic1 db "DREAMWEB.G09",0 +Foldergraphic2 db "DREAMWEB.G10",0 +Foldergraphic3 db "DREAMWEB.G11",0 +Symbolgraphic db "DREAMWEB.G12",0 +Gungraphic db "DREAMWEB.G13",0 +Monkface db "DREAMWEB.G15",0 + +Title0graphics db "DREAMWEB.I00",0 +Title1graphics db "DREAMWEB.I01",0 +Title2graphics db "DREAMWEB.I02",0 +Title3graphics db "DREAMWEB.I03",0 +Title4graphics db "DREAMWEB.I04",0 +Title5graphics db "DREAMWEB.I05",0 +Title6graphics db "DREAMWEB.I06",0 +Title7graphics db "DREAMWEB.I07",0 + +Palettescreen db "DREAMWEB.PAL",0 + + +
\ No newline at end of file diff --git a/devtools/tasmrecover/tasm-recover b/devtools/tasmrecover/tasm-recover new file mode 100755 index 0000000000..35e20d20ab --- /dev/null +++ b/devtools/tasmrecover/tasm-recover @@ -0,0 +1,24 @@ +#!/usr/bin/python + +from tasm.parser import parser +from tasm.cpp import cpp + +p = parser() +p.strip_path = 3 +context = p.parse('dreamweb/dreamweb.asm') +p.link() +generator = cpp(context, "DreamGen", blacklist = [ + 'randomnumber', + 'quickquit', + 'quickquit2', + 'seecommandtail', + 'multiget', + 'multiput', + 'multidump', + 'frameoutnm', + 'cls', + 'printundermon', + 'worktoscreen', + 'width160' + ]) +generator.generate('dreamweb') #start routine diff --git a/devtools/tasmrecover/tasm/__init__.py b/devtools/tasmrecover/tasm/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/devtools/tasmrecover/tasm/__init__.py diff --git a/devtools/tasmrecover/tasm/cpp.py b/devtools/tasmrecover/tasm/cpp.py new file mode 100644 index 0000000000..0196e5b45c --- /dev/null +++ b/devtools/tasmrecover/tasm/cpp.py @@ -0,0 +1,579 @@ +import op, traceback, re, proc +from copy import copy +proc_module = proc + +class CrossJump(Exception): + pass + +def parse_bin(s): + b = s.group(1) + v = hex(int(b, 2)) + #print "BINARY: %s -> %s" %(b, v) + return v + +class cpp: + def __init__(self, context, namespace, skip_first = 0, blacklist = []): + self.namespace = namespace + fname = namespace.lower() + ".cpp" + header = namespace.lower() + ".h" + banner = "/* PLEASE DO NOT MODIFY THIS FILE. ALL CHANGES WILL BE LOST! LOOK FOR README FOR DETAILS */" + self.fd = open(fname, "wt") + self.hd = open(header, "wt") + hid = "TASMRECOVER_%s_STUBS_H__" %namespace.upper() + self.hd.write("""#ifndef %s +#define %s + +%s + +""" %(hid, hid, banner)) + self.context = context + self.data_seg = context.binary_data + self.procs = context.proc_list + self.skip_first = skip_first + self.proc_queue = [] + self.proc_done = [] + self.blacklist = blacklist + self.failed = list(blacklist) + self.translated = [] + self.proc_addr = [] + self.methods = [] + self.fd.write("""%s + +#include \"%s\" + +namespace %s { +""" %(banner, header, namespace)) + + def expand_cb(self, match): + name = match.group(0).lower() + if len(name) == 2 and \ + ((name[0] in ['a', 'b', 'c', 'd'] and name[1] in ['h', 'x', 'l']) or name in ['si', 'di', 'es', 'ds', 'cs']): + return "%s" %name + + if self.indirection == -1: + try: + offset,p,p = self.context.get_offset(name) + print "OFFSET = %d" %offset + self.indirection = 0 + return str(offset) + except: + pass + + g = self.context.get_global(name) + if isinstance(g, op.const): + value = self.expand_equ(g.value) + print "equ: %s -> %s" %(name, value) + elif isinstance(g, proc.proc): + if self.indirection != -1: + raise Exception("invalid proc label usage") + value = str(g.offset) + self.indirection = 0 + else: + size = g.size + if size == 0: + raise Exception("invalid var '%s' size %u" %(name, size)) + if self.indirection == 0: + value = "data.%s(k%s)" %("byte" if size == 1 else "word", name.capitalize()) + elif self.indirection == -1: + value = "%s" %g.offset + self.indirection = 0 + else: + raise Exception("invalid indirection %d" %self.indirection) + return value + + def get_size(self, expr): + #print 'get_size("%s")' %expr + try: + v = self.context.parse_int(expr) + return 1 if v < 256 else 2 + except: + pass + + if re.match(r'byte\s+ptr\s', expr) is not None: + return 1 + + if re.match(r'word\s+ptr\s', expr) is not None: + return 2 + + if len(expr) == 2 and expr[0] in ['a', 'b', 'c', 'd'] and expr[1] in ['h', 'l']: + return 1 + if expr in ['ax', 'bx', 'cx', 'dx', 'si', 'di', 'sp', 'bp', 'ds', 'cs', 'es', 'fs']: + return 2 + + m = re.match(r'[a-zA-Z_]\w*', expr) + if m is not None: + name = m.group(0) + try: + g = self.context.get_global(name) + return g.size + except: + pass + + return 0 + + def expand_equ_cb(self, match): + name = match.group(0).lower() + g = self.context.get_global(name) + if isinstance(g, op.const): + return g.value + return str(g.offset) + + def expand_equ(self, expr): + n = 1 + while n > 0: + expr, n = re.subn(r'\b[a-zA-Z_][a-zA-Z0-9_]+\b', self.expand_equ_cb, expr) + expr = re.sub(r'\b([0-9][a-fA-F0-9]*)h', '0x\\1', expr) + return "(%s)" %expr + + def expand(self, expr, def_size = 0): + #print "EXPAND \"%s\"" %expr + size = self.get_size(expr) if def_size == 0 else def_size + indirection = 0 + seg = None + reg = True + + m = re.match(r'seg\s+(.*?)$', expr) + if m is not None: + return "data" + + match_id = True + m = re.match(r'offset\s+(.*?)$', expr) + if m is not None: + indirection -= 1 + expr = m.group(1).strip() + + m = re.match(r'byte\s+ptr\s+(.*?)$', expr) + if m is not None: + expr = m.group(1).strip() + + m = re.match(r'word\s+ptr\s+(.*?)$', expr) + if m is not None: + expr = m.group(1).strip() + + m = re.match(r'\[(.*)\]$', expr) + if m is not None: + indirection += 1 + expr = m.group(1).strip() + + m = re.match(r'(\w{2,2}):(.*)$', expr) + if m is not None: + seg_prefix = m.group(1) + expr = m.group(2).strip() + print "SEGMENT %s, remains: %s" %(seg_prefix, expr) + else: + seg_prefix = "ds" + + m = re.match(r'(([abcd][xhl])|si|di|bp|sp)([\+-].*)?$', expr) + if m is not None: + reg = m.group(1) + plus = m.group(3) + if plus is not None: + plus = self.expand(plus) + else: + plus = "" + match_id = False + #print "COMMON_REG: ", reg, plus + expr = "%s%s" %(reg, plus) + + expr = re.sub(r'\b([0-9][a-fA-F0-9]*)h', '0x\\1', expr) + expr = re.sub(r'\b([0-1]+)b', parse_bin, expr) + expr = re.sub(r'"(.)"', '\'\\1\'', expr) + if match_id: + #print "BEFORE: %d" %indirection + self.indirection = indirection + expr = re.sub(r'\b[a-zA-Z_][a-zA-Z0-9_]+\b', self.expand_cb, expr) + indirection = self.indirection + #print "AFTER: %d" %indirection + + if indirection == 1: + if size == 1: + expr = "%s.byte(%s)" %(seg_prefix, expr) + elif size == 2: + expr = "%s.word(%s)" %(seg_prefix, expr) + else: + expr = "@invalid size 0" + elif indirection == 0: + pass + elif indirection == -1: + expr = "&%s" %expr + else: + raise Exception("invalid indirection %d" %indirection) + return expr + + def mangle_label(self, name): + name = name.lower() + return re.sub(r'\$', '_tmp', name) + + def resolve_label(self, name): + name = name.lower() + if not name in self.proc.labels: + try: + offset, proc, pos = self.context.get_offset(name) + except: + print "no label %s, trying procedure" %name + proc = self.context.get_global(name) + pos = 0 + if not isinstance(proc, proc_module.proc): + raise CrossJump("cross-procedure jump to non label and non procedure %s" %(name)) + self.proc.labels.add(name) + for i in xrange(0, len(self.unbounded)): + u = self.unbounded[i] + if u[1] == proc: + if pos < u[2]: + self.unbounded[i] = (name, proc, pos) + return self.mangle_label(name) + self.unbounded.append((name, proc, pos)) + + return self.mangle_label(name) + + def jump_to_label(self, name): + jump_proc = False + if name in self.blacklist: + jump_proc = True + + if self.context.has_global(name) : + g = self.context.get_global(name) + if isinstance(g, proc_module.proc): + jump_proc = True + + if jump_proc: + return "{ %s(); return; }" %name + else: + # TODO: name or self.resolve_label(name) or self.mangle_label(name)?? + if name in self.proc.retlabels: + return "return /* (%s) */" % (name) + return "goto %s" %self.resolve_label(name) + + def _label(self, name): + self.body += "%s:\n" %self.mangle_label(name) + + def schedule(self, name): + name = name.lower() + if name in self.proc_queue or name in self.proc_done or name in self.failed: + return + print "+scheduling function %s..." %name + self.proc_queue.append(name) + + def _call(self, name): + name = name.lower() + if name == 'ax': + self.body += "\t__dispatch_call(%s);\n" %self.expand('ax', 2) + return + self.body += "\t%s();\n" %name + self.schedule(name) + + def _ret(self): + self.body += "\treturn;\n" + + def parse2(self, dst, src): + dst_size, src_size = self.get_size(dst), self.get_size(src) + if dst_size == 0: + if src_size == 0: + raise Exception("both sizes are 0") + dst_size = src_size + if src_size == 0: + src_size = dst_size + + dst = self.expand(dst, dst_size) + src = self.expand(src, src_size) + return dst, src + + def _mov(self, dst, src): + self.body += "\t%s = %s;\n" %self.parse2(dst, src) + + def _add(self, dst, src): + self.body += "\t_add(%s, %s);\n" %self.parse2(dst, src) + + def _sub(self, dst, src): + self.body += "\t_sub(%s, %s);\n" %self.parse2(dst, src) + + def _and(self, dst, src): + self.body += "\t_and(%s, %s);\n" %self.parse2(dst, src) + + def _or(self, dst, src): + self.body += "\t_or(%s, %s);\n" %self.parse2(dst, src) + + def _xor(self, dst, src): + self.body += "\t_xor(%s, %s);\n" %self.parse2(dst, src) + + def _neg(self, dst): + dst = self.expand(dst) + self.body += "\t_neg(%s);\n" %(dst) + + def _cbw(self): + self.body += "\tax.cbw();\n" + + def _shr(self, dst, src): + self.body += "\t_shr(%s, %s);\n" %self.parse2(dst, src) + + def _shl(self, dst, src): + self.body += "\t_shl(%s, %s);\n" %self.parse2(dst, src) + + #def _sar(self, dst, src): + # self.body += "\t_sar(%s%s);\n" %self.parse2(dst, src) + + #def _sal(self, dst, src): + # self.body += "\t_sal(%s, %s);\n" %self.parse2(dst, src) + + #def _rcl(self, dst, src): + # self.body += "\t_rcl(%s, %s);\n" %self.parse2(dst, src) + + #def _rcr(self, dst, src): + # self.body += "\t_rcr(%s, %s);\n" %self.parse2(dst, src) + + def _mul(self, src): + src = self.expand(src) + self.body += "\t_mul(%s);\n" %(src) + + def _div(self, src): + src = self.expand(src) + self.body += "\t_div(%s);\n" %(src) + + def _inc(self, dst): + dst = self.expand(dst) + self.body += "\t_inc(%s);\n" %(dst) + + def _dec(self, dst): + dst = self.expand(dst) + self.body += "\t_dec(%s);\n" %(dst) + + def _cmp(self, a, b): + self.body += "\t_cmp(%s, %s);\n" %self.parse2(a, b) + + def _test(self, a, b): + self.body += "\t_test(%s, %s);\n" %self.parse2(a, b) + + def _js(self, label): + self.body += "\tif (flags.s())\n\t\t%s;\n" %(self.jump_to_label(label)) + + def _jns(self, label): + self.body += "\tif (!flags.s())\n\t\t%s;\n" %(self.jump_to_label(label)) + + def _jz(self, label): + self.body += "\tif (flags.z())\n\t\t%s;\n" %(self.jump_to_label(label)) + + def _jnz(self, label): + self.body += "\tif (!flags.z())\n\t\t%s;\n" %(self.jump_to_label(label)) + + def _jl(self, label): + self.body += "\tif (flags.l())\n\t\t%s;\n" %(self.jump_to_label(label)) + + def _jg(self, label): + self.body += "\tif (!flags.le())\n\t\t%s;\n" %(self.jump_to_label(label)) + + def _jle(self, label): + self.body += "\tif (flags.le())\n\t\t%s;\n" %(self.jump_to_label(label)) + + def _jge(self, label): + self.body += "\tif (!flags.l())\n\t\t%s;\n" %(self.jump_to_label(label)) + + def _jc(self, label): + self.body += "\tif (flags.c())\n\t\t%s;\n" %(self.jump_to_label(label)) + + def _jnc(self, label): + self.body += "\tif (!flags.c())\n\t\t%s;\n" %(self.jump_to_label(label)) + + def _xchg(self, dst, src): + self.body += "\t_xchg(%s, %s);\n" %self.parse2(dst, src) + + def _jmp(self, label): + self.body += "\t%s;\n" %(self.jump_to_label(label)) + + def _loop(self, label): + self.body += "\tif (--cx)\n\t\t%s;\n" %self.jump_to_label(label) + + def _push(self, regs): + p = str(); + for r in regs: + r = self.expand(r) + p += "\tpush(%s);\n" %(r) + self.body += p + + def _pop(self, regs): + p = str(); + for r in regs: + self.temps_count -= 1 + i = self.temps_count + r = self.expand(r) + p += "\t%s = pop();\n" %r + self.body += p + + def _rep(self): + self.body += "\twhile(cx--)\n\t" + + def _lodsb(self): + self.body += "\t_lodsb();\n" + + def _lodsw(self): + self.body += "\t_lodsw();\n" + + def _stosb(self, n, clear_cx): + self.body += "\t_stosb(%s%s);\n" %("" if n == 1 else n, ", true" if clear_cx else "") + + def _stosw(self, n, clear_cx): + self.body += "\t_stosw(%s%s);\n" %("" if n == 1 else n, ", true" if clear_cx else "") + + def _movsb(self, n, clear_cx): + self.body += "\t_movsb(%s%s);\n" %("" if n == 1 else n, ", true" if clear_cx else "") + + def _movsw(self, n, clear_cx): + self.body += "\t_movsw(%s%s);\n" %("" if n == 1 else n, ", true" if clear_cx else "") + + def _stc(self): + self.body += "\tflags._c = true;\n " + + def _clc(self): + self.body += "\tflags._c = false;\n " + + def __proc(self, name, def_skip = 0): + try: + skip = def_skip + self.temps_count = 0 + self.temps_max = 0 + if self.context.has_global(name): + self.proc = self.context.get_global(name) + else: + print "No procedure named %s, trying label" %name + off, src_proc, skip = self.context.get_offset(name) + + self.proc = proc_module.proc(name) + self.proc.stmts = copy(src_proc.stmts) + self.proc.labels = copy(src_proc.labels) + self.proc.retlabels = copy(src_proc.retlabels) + #for p in xrange(skip, len(self.proc.stmts)): + # s = self.proc.stmts[p] + # if isinstance(s, op.basejmp): + # o, p, s = self.context.get_offset(s.label) + # if p == src_proc and s < skip: + # skip = s + + + self.proc_addr.append((name, self.proc.offset)) + self.body = str() + self.body += "void %sContext::%s() {\n\tSTACK_CHECK;\n" %(self.namespace, name); + self.proc.optimize() + self.unbounded = [] + self.proc.visit(self, skip) + + #adding remaining labels: + for i in xrange(0, len(self.unbounded)): + u = self.unbounded[i] + print "UNBOUNDED: ", u + proc = u[1] + for p in xrange(u[2], len(proc.stmts)): + s = proc.stmts[p] + if isinstance(s, op.basejmp): + self.resolve_label(s.label) + + #adding statements + for label, proc, offset in self.unbounded: + self.body += "/*continuing to unbounded code: %s from %s:%d-%d*/\n" %(label, proc.name, offset, len(proc.stmts)) + start = len(self.proc.stmts) + self.proc.add_label(label) + for s in proc.stmts[offset:]: + if isinstance(s, op.label): + self.proc.labels.add(s.name) + self.proc.stmts.append(s) + self.proc.add("ret") + print "skipping %d instructions, todo: %d" %(start, len(self.proc.stmts) - start) + print "re-optimizing..." + self.proc.optimize(keep_labels=[label]) + self.proc.visit(self, start) + self.body += "}\n"; + self.translated.insert(0, self.body) + self.proc = None + if self.temps_count > 0: + raise Exception("temps count == %d at the exit of proc" %self.temps_count); + return True + except (CrossJump, op.Unsupported) as e: + print "%s: ERROR: %s" %(name, e) + self.failed.append(name) + except: + raise + + def get_type(self, width): + return "uint%d_t" %(width * 8) + + def write_stubs(self, fname, procs): + fd = open(fname, "wt") + fd.write("namespace %s {\n" %self.namespace) + for p in procs: + fd.write("void %sContext::%s() {\n\t::error(\"%s\");\n}\n\n" %(self.namespace, p, p)) + fd.write("} /*namespace %s */\n" %self.namespace) + fd.close() + + + def generate(self, start): + #print self.prologue() + #print context + self.proc_queue.append(start) + while len(self.proc_queue): + name = self.proc_queue.pop() + if name in self.failed or name in self.proc_done: + continue + if len(self.proc_queue) == 0 and len(self.procs) > 0: + print "queue's empty, adding remaining procs:" + for p in self.procs: + self.schedule(p) + self.procs = [] + print "continuing on %s" %name + self.proc_done.append(name) + self.__proc(name) + self.methods.append(name) + self.write_stubs("_stubs.cpp", self.failed) + self.methods += self.failed + done, failed = len(self.proc_done), len(self.failed) + + self.fd.write("\n") + self.fd.write("\n".join(self.translated)) + self.fd.write("\n\n") + print "%d ok, %d failed of %d, %.02g%% translated" %(done, failed, done + failed, 100.0 * done / (done + failed)) + print "\n".join(self.failed) + data_bin = self.data_seg + data_impl = "\n\tstatic const uint8 src[] = {\n\t\t" + n = 0 + for v in data_bin: + data_impl += "0x%02x, " %v + n += 1 + if (n & 0xf) == 0: + data_impl += "\n\t\t" + data_impl += "};\n\tds.assign(src, src + sizeof(src));\n" + self.hd.write( +"""\n#include "dreamweb/runtime.h" + +namespace %s { + +class %sContext : public Context { +public: + void __start(); + void __dispatch_call(uint16 addr); + +""" +%(self.namespace, self.namespace)) + offsets = [] + for k, v in self.context.get_globals().items(): + if isinstance(v, op.var): + offsets.append((k.capitalize(), v.offset)) + elif isinstance(v, op.const): + offsets.append((k.capitalize(), self.expand_equ(v.value))) #fixme: try to save all constants here + + offsets = sorted(offsets, key=lambda t: t[1]) + for o in offsets: + self.hd.write("\tconst static uint16 k%s = %s;\n" %o) + self.hd.write("\n") + for p in set(self.methods): + self.hd.write("\tvoid %s();\n" %p) + + self.hd.write("};\n}\n\n#endif\n") + self.hd.close() + + self.fd.write("\nvoid %sContext::__start() { %s%s(); \n}\n" %(self.namespace, data_impl, start)) + + self.fd.write("\nvoid %sContext::__dispatch_call(uint16 addr) {\n\tswitch(addr) {\n" %self.namespace) + self.proc_addr.sort(cmp = lambda x, y: x[1] - y[1]) + for name,addr in self.proc_addr: + self.fd.write("\t\tcase 0x%04x: %s(); break;\n" %(addr, name)) + self.fd.write("\t\tdefault: ::error(\"invalid call to %04x dispatched\", (uint16)ax);") + self.fd.write("\n\t}\n}\n\n} /*namespace*/\n") + + self.fd.close() diff --git a/devtools/tasmrecover/tasm/lex.py b/devtools/tasmrecover/tasm/lex.py new file mode 100644 index 0000000000..cf7e6e19bf --- /dev/null +++ b/devtools/tasmrecover/tasm/lex.py @@ -0,0 +1,52 @@ +def parse_args(text): + #print "parsing: [%s]" %text + escape = False + string = False + result = [] + token = str() + value = 0; + for c in text: + #print "[%s]%s: %s: %s" %(token, c, escape, string) + if c == '\\': + escape = True + continue + + if escape: + if not string: + raise SyntaxError("escape found in no string: %s" %text); + + #print "escaping[%s]" %c + escape = False + token += c + continue + + if string: + if c == '\'' or c == '"': + string = False + + token += c + continue + + if c == '\'' or c == '"': + string = True + token += c + continue + + if c == ',': + result.append(token.strip()) + token = str() + continue + + if c == ';': #comment, bailing out + break + + token += c + #token = token.strip() + if len(token): + result.append(token) + #print result + return result + +def compile(width, data): + print data + return data diff --git a/devtools/tasmrecover/tasm/op.py b/devtools/tasmrecover/tasm/op.py new file mode 100644 index 0000000000..10fdd8a568 --- /dev/null +++ b/devtools/tasmrecover/tasm/op.py @@ -0,0 +1,410 @@ +import re +import lex + +class Unsupported(Exception): + pass + +class var: + def __init__(self, size, offset): + self.size = size + self.offset = offset + +class const: + def __init__(self, value): + self.value = value + +class reg: + def __init__(self, name): + self.name = name + def size(self): + return 2 if self.name[1] == 'x' else 1 + def __str__(self): + return "<register %s>" %self.name + +class unref: + def __init__(self, exp): + self.exp = exp + def __str__(self): + return "<unref %s>" %self.exp + +class ref: + def __init__(self, name): + self.name = name + def __str__(self): + return "<ref %s>" %self.name + +class glob: + def __init__(self, name): + self.name = name + def __str__(self): + return "<global %s>" %self.name + +class segment: + def __init__(self, name): + self.name = name + def __str__(self): + return "<segment %s>" %self.name + +class baseop(object): + def parse_arg(self, arg): + return arg + + def split(self, text): + a, b = lex.parse_args(text) + return self.parse_arg(a), self.parse_arg(b) + def __str__(self): + return str(self.__class__) + +class basejmp(baseop): + pass + +class _call(baseop): + def __init__(self, arg): + self.name = arg + def visit(self, visitor): + visitor._call(self.name) + def __str__(self): + return "call(%s)" %self.name + +class _rep(baseop): + def __init__(self, arg): + pass + def visit(self, visitor): + visitor._rep() + +class _mov(baseop): + def __init__(self, arg): + self.dst, self.src = self.split(arg) + def visit(self, visitor): + visitor._mov(self.dst, self.src) + def __str__(self): + return "mov(%s, %s)" %(self.dst, self.src) + +class _mov2(baseop): + def __init__(self, dst, src): + self.dst, self.src = dst, src + def visit(self, visitor): + visitor._mov(self.dst, self.src) + +class _shr(baseop): + def __init__(self, arg): + self.dst, self.src = self.split(arg) + def visit(self, visitor): + visitor._shr(self.dst, self.src) + +class _shl(baseop): + def __init__(self, arg): + self.dst, self.src = self.split(arg) + def visit(self, visitor): + visitor._shl(self.dst, self.src) + +class _ror(baseop): + def __init__(self, arg): + pass + +class _rol(baseop): + def __init__(self, arg): + pass + +class _sar(baseop): + def __init__(self, arg): + self.dst, self.src = self.split(arg) + def visit(self, visitor): + visitor._sar(self.dst, self.src) + +class _sal(baseop): + def __init__(self, arg): + self.dst, self.src = self.split(arg) + def visit(self, visitor): + visitor._sal(self.dst, self.src) + +class _rcl(baseop): + def __init__(self, arg): + self.dst, self.src = self.split(arg) + def visit(self, visitor): + visitor._rcl(self.dst, self.src) + +class _rcr(baseop): + def __init__(self, arg): + self.dst, self.src = self.split(arg) + def visit(self, visitor): + visitor._rcr(self.dst, self.src) + +class _neg(baseop): + def __init__(self, arg): + self.arg = arg + def visit(self, visitor): + visitor._neg(self.arg) + +class _dec(baseop): + def __init__(self, arg): + self.dst = arg + def visit(self, visitor): + visitor._dec(self.dst) + +class _inc(baseop): + def __init__(self, arg): + self.dst = arg + def visit(self, visitor): + visitor._inc(self.dst) + +class _add(baseop): + def __init__(self, arg): + self.dst, self.src = self.split(arg) + def visit(self, visitor): + visitor._add(self.dst, self.src) + +class _sub(baseop): + def __init__(self, arg): + self.dst, self.src = self.split(arg) + def visit(self, visitor): + visitor._sub(self.dst, self.src) + +class _mul(baseop): + def __init__(self, arg): + self.arg = self.parse_arg(arg) + def visit(self, visitor): + visitor._mul(self.arg) + +class _div(baseop): + def __init__(self, arg): + self.arg = self.parse_arg(arg) + def visit(self, visitor): + visitor._div(self.arg) + +class _and(baseop): + def __init__(self, arg): + self.dst, self.src = self.split(arg) + def visit(self, visitor): + visitor._and(self.dst, self.src) + +class _xor(baseop): + def __init__(self, arg): + self.dst, self.src = self.split(arg) + def visit(self, visitor): + visitor._xor(self.dst, self.src) + +class _or(baseop): + def __init__(self, arg): + self.dst, self.src = self.split(arg) + def visit(self, visitor): + visitor._or(self.dst, self.src) + +class _cmp(baseop): + def __init__(self, arg): + self.a, self.b = self.split(arg) + def visit(self, visitor): + visitor._cmp(self.a, self.b) + +class _test(baseop): + def __init__(self, arg): + self.a, self.b = self.split(arg) + def visit(self, visitor): + visitor._test(self.a, self.b) + +class _xchg(baseop): + def __init__(self, arg): + self.a, self.b = self.split(arg) + def visit(self, visitor): + visitor._xchg(self.a, self.b) + +class _jnz(basejmp): + def __init__(self, label): + self.label = label + def visit(self, visitor): + visitor._jnz(self.label) + +class _jz(basejmp): + def __init__(self, label): + self.label = label + def visit(self, visitor): + visitor._jz(self.label) + +class _jc(basejmp): + def __init__(self, label): + self.label = label + def visit(self, visitor): + visitor._jc(self.label) + +class _jnc(basejmp): + def __init__(self, label): + self.label = label + def visit(self, visitor): + visitor._jnc(self.label) + +class _js(basejmp): + def __init__(self, label): + self.label = label + def visit(self, visitor): + visitor._js(self.label) + +class _jns(basejmp): + def __init__(self, label): + self.label = label + def visit(self, visitor): + visitor._jns(self.label) + +class _jl(basejmp): + def __init__(self, label): + self.label = label + def visit(self, visitor): + visitor._jl(self.label) + +class _jg(basejmp): + def __init__(self, label): + self.label = label + def visit(self, visitor): + visitor._jg(self.label) + +class _jle(basejmp): + def __init__(self, label): + self.label = label + def visit(self, visitor): + visitor._jle(self.label) + +class _jge(basejmp): + def __init__(self, label): + self.label = label + def visit(self, visitor): + visitor._jge(self.label) + +class _jmp(basejmp): + def __init__(self, label): + self.label = label + def visit(self, visitor): + visitor._jmp(self.label) + +class _loop(basejmp): + def __init__(self, label): + self.label = label + def visit(self, visitor): + visitor._loop(self.label) + +class _push(baseop): + def __init__(self, arg): + self.regs = [] + for r in arg.split(): + self.regs.append(self.parse_arg(r)) + def visit(self, visitor): + visitor._push(self.regs) + +class _pop(baseop): + def __init__(self, arg): + self.regs = [] + for r in arg.split(): + self.regs.append(self.parse_arg(r)) + def visit(self, visitor): + visitor._pop(self.regs) + +class _ret(baseop): + def __init__(self, arg): + pass + def visit(self, visitor): + visitor._ret() + +class _lodsb(baseop): + def __init__(self, arg): + pass + def visit(self, visitor): + visitor._lodsb() + +class _lodsw(baseop): + def __init__(self, arg): + pass + def visit(self, visitor): + visitor._lodsw() + +class _stosw(baseop): + def __init__(self, arg): + self.repeat = 1 + self.clear_cx = False + def visit(self, visitor): + visitor._stosw(self.repeat, self.clear_cx) + +class _stosb(baseop): + def __init__(self, arg): + self.repeat = 1 + self.clear_cx = False + def visit(self, visitor): + visitor._stosb(self.repeat, self.clear_cx) + +class _movsw(baseop): + def __init__(self, arg): + self.repeat = 1 + self.clear_cx = False + def visit(self, visitor): + visitor._movsw(self.repeat, self.clear_cx) + +class _movsb(baseop): + def __init__(self, arg): + self.repeat = 1 + self.clear_cx = False + def visit(self, visitor): + visitor._movsb(self.repeat, self.clear_cx) + +class _in(baseop): + def __init__(self, arg): + self.arg = arg + def visit(self, visitor): + raise Unsupported("input from port: %s" %self.arg) + +class _out(baseop): + def __init__(self, arg): + self.arg = arg + def visit(self, visitor): + raise Unsupported("out to port: %s" %self.arg) + +class _cli(baseop): + def __init__(self, arg): + pass + def visit(self, visitor): + raise Unsupported("cli") + +class _sti(baseop): + def __init__(self, arg): + pass + def visit(self, visitor): + raise Unsupported("sli") + +class _int(baseop): + def __init__(self, arg): + self.arg = arg + def visit(self, visitor): + raise Unsupported("interrupt: %s" %self.arg) + +class _iret(baseop): + def __init__(self, arg): + pass + def visit(self, visitor): + raise Unsupported("interrupt return") + +class _cbw(baseop): + def __init__(self, arg): + pass + def visit(self, visitor): + visitor._cbw() + +class _nop(baseop): + def __init__(self, arg): + pass + def visit(self, visitor): + pass + +class _stc(baseop): + def __init__(self, arg): + pass + def visit(self, visitor): + visitor._stc() + +class _clc(baseop): + def __init__(self, arg): + pass + def visit(self, visitor): + visitor._clc() + +class label(baseop): + def __init__(self, name): + self.name = name + def visit(self, visitor): + visitor._label(self.name) + diff --git a/devtools/tasmrecover/tasm/parser.py b/devtools/tasmrecover/tasm/parser.py new file mode 100644 index 0000000000..4cea496722 --- /dev/null +++ b/devtools/tasmrecover/tasm/parser.py @@ -0,0 +1,261 @@ +import os, re +from proc import proc +import lex +import op + +class parser: + def __init__(self): + self.strip_path = 0 + self.__globals = {} + self.__offsets = {} + self.__stack = [] + self.proc = None + self.proc_list = [] + self.binary_data = [] + + self.symbols = [] + self.link_later = [] + + def visible(self): + for i in self.__stack: + if not i or i == 0: + return False + return True + + def push_if(self, text): + value = self.eval(text) + #print "if %s -> %s" %(text, value) + self.__stack.append(value) + + def push_else(self): + #print "else" + self.__stack[-1] = not self.__stack[-1] + + def pop_if(self): + #print "endif" + return self.__stack.pop() + + def set_global(self, name, value): + if len(name) == 0: + raise Exception("empty name is not allowed") + name = name.lower() + #print "adding global %s -> %s" %(name, value) + if self.__globals.has_key(name): + raise Exception("global %s was already defined", name) + self.__globals[name] = value + + def get_global(self, name): + name = name.lower() + g = self.__globals[name] + g.used = True + return g + + def get_globals(self): + return self.__globals + + def has_global(self, name): + name = name.lower() + return self.__globals.has_key(name) + + def set_offset(self, name, value): + if len(name) == 0: + raise Exception("empty name is not allowed") + name = name.lower() + #print "adding global %s -> %s" %(name, value) + if self.__offsets.has_key(name): + raise Exception("global %s was already defined", name) + self.__offsets[name] = value + + def get_offset(self, name): + name = name.lower() + return self.__offsets[name] + + def include(self, basedir, fname): + path = fname.split('\\')[self.strip_path:] + path = os.path.join(basedir, os.path.pathsep.join(path)) + #print "including %s" %(path) + + self.parse(path) + + def eval(self, stmt): + try: + return self.parse_int(stmt) + except: + pass + value = self.__globals[stmt.lower()].value + return int(value) + + def expr_callback(self, match): + name = match.group(1).lower() + g = self.get_global(name) + if isinstance(g, op.const): + return g.value + else: + return "0x%04x" %g.offset + + def eval_expr(self, expr): + n = 1 + while n > 0: + expr, n = re.subn(r'\b([a-zA-Z_]+[a-zA-Z0-9_]*)', self.expr_callback, expr) + return eval(expr) + + def expand_globals(self, text): + return text + + def fix_dollar(self, v): + print("$ = %d" %len(self.binary_data)) + return re.sub(r'\$', "%d" %len(self.binary_data), v) + + def parse_int(self, v): + if re.match(r'[01]+b$', v): + v = int(v[:-1], 2) + if re.match(r'[\+-]?[0-9a-f]+h$', v): + v = int(v[:-1], 16) + return int(v) + + def compact_data(self, width, data): + #print "COMPACTING %d %s" %(width, data) + r = [] + base = 0x100 if width == 1 else 0x10000 + for v in data: + if v[0] == '"': + if v[-1] != '"': + raise Exception("invalid string %s" %v) + if width == 2: + raise Exception("string with data width more than 1") #we could allow it :) + for i in xrange(1, len(v) - 1): + r.append(ord(v[i])) + continue + + m = re.match(r'(\w+)\s+dup\s+\((\s*\S+\s*)\)', v) + if m is not None: + #we should parse that + n = self.parse_int(m.group(1)) + if m.group(2) != '?': + value = self.parse_int(m.group(2)) + else: + value = 0 + for i in xrange(0, n): + v = value + for b in xrange(0, width): + r.append(v & 0xff); + v >>= 8 + continue + + try: + v = self.parse_int(v) + if v < 0: + v += base + except: + #global name + print "global/expr: %s" %v + try: + g = self.get_global(v) + v = g.offset + except: + print "unknown address %s" %(v) + self.link_later.append((len(self.binary_data) + len(r), v)) + v = 0 + + for b in xrange(0, width): + r.append(v & 0xff); + v >>= 8 + #print r + return r + + def parse(self, fname): +# print "opening file %s..." %(fname, basedir) + fd = open(fname, 'rb') + for line in fd: + line = line.strip() + if len(line) == 0 or line[0] == ';' or line[0] == chr(0x1a): + continue + + #print line + m = re.match('(\w+)\s*?:', line) + if m is not None: + line = line[len(m.group(0)):].strip() + if self.visible(): + name = m.group(1) + if self.proc is not None: + self.proc.add_label(name) + print "offset %s -> %d" %(name, len(self.binary_data)) + self.set_offset(name, (len(self.binary_data), self.proc, len(self.proc.stmts) if self.proc is not None else 0)) + #print line + + cmd = line.split() + if len(cmd) == 0: + continue + + cmd0 = str(cmd[0]) + if cmd0 == 'if': + self.push_if(cmd[1]) + continue + elif cmd0 == 'else': + self.push_else() + continue + elif cmd0 == 'endif': + self.pop_if() + continue + + if not self.visible(): + continue + + if cmd0 == 'db' or cmd0 == 'dw' or cmd0 == 'dd': + arg = line[len(cmd0):].strip() + print "%d:1: %s" %(len(self.binary_data), arg) #fixme: COPYPASTE + binary_width = {'b': 1, 'w': 2, 'd': 4}[cmd0[1]] + self.binary_data += self.compact_data(binary_width, lex.parse_args(arg)) + continue + elif cmd0 == 'include': + self.include(os.path.dirname(fname), cmd[1]) + continue + elif cmd0 == 'endp': + self.proc = None + continue + elif cmd0 == 'assume': + print "skipping: %s" %line + continue + elif cmd0 == 'rep': + self.proc.add(cmd0) + self.proc.add(" ".join(cmd[1:])) + continue + + if len(cmd) >= 3: + cmd1 = cmd[1] + if cmd1 == 'equ': + v = cmd[2] + self.set_global(cmd0, op.const(self.fix_dollar(v))) + elif cmd1 == 'db' or cmd1 == 'dw' or cmd1 == 'dd': + binary_width = {'b': 1, 'w': 2, 'd': 4}[cmd1[1]] + offset = len(self.binary_data) + arg = line[len(cmd0):].strip() + arg = arg[len(cmd1):].strip() + print "%d: %s" %(offset, arg) + self.binary_data += self.compact_data(binary_width, lex.parse_args(arg)) + self.set_global(cmd0.lower(), op.var(binary_width, offset)) + continue + elif cmd1 == 'proc': + name = cmd0.lower() + self.proc = proc(name) + print "procedure %s, #%d" %(name, len(self.proc_list)) + self.proc_list.append(name) + self.set_global(name, self.proc) + continue + if (self.proc): + self.proc.add(line) + else: + #print line + pass + + fd.close() + return self + + def link(self): + for addr, expr in self.link_later: + v = self.eval_expr(expr) + print "link: patching %04x -> %04x" %(addr, v) + while v != 0: + self.binary_data[addr] = v & 0xff + addr += 1 + v >>= 8 diff --git a/devtools/tasmrecover/tasm/proc.py b/devtools/tasmrecover/tasm/proc.py new file mode 100644 index 0000000000..c127c406f7 --- /dev/null +++ b/devtools/tasmrecover/tasm/proc.py @@ -0,0 +1,174 @@ +import re +import op + +class proc: + last_addr = 0xc000 + + def __init__(self, name): + self.name = name + self.calls = [] + self.stmts = [] + self.labels = set() + self.retlabels = set() + self.__label_re = re.compile(r'^(\S+):(.*)$') + self.offset = proc.last_addr + proc.last_addr += 4 + + def add_label(self, label): + self.stmts.append(op.label(label)) + self.labels.add(label) + + def remove_label(self, label): + try: + self.labels.remove(label) + except: + pass + for l in self.stmts: + if isinstance(l, op.label) and l.name == label: + self.stmts.remove(l) + return + + def optimize_sequence(self, cls): + i = 0 + stmts = self.stmts + while i < len(stmts): + if not isinstance(stmts[i], cls): + i += 1 + continue + if i > 0 and isinstance(stmts[i - 1], op._rep): #skip rep prefixed instructions for now + i += 1 + continue + j = i + 1 + + while j < len(stmts): + if not isinstance(stmts[j], cls): + break + j = j + 1 + + n = j - i + if n > 1: + print "Eliminate consequtive storage instructions at %u-%u" %(i, j) + del stmts[i + 1:j] + stmts[i].repeat = n + else: + i = j + + i = 0 + while i < len(stmts): + if not isinstance(stmts[i], op._rep): + i += 1 + continue + if i + 1 >= len(stmts): + break + if isinstance(stmts[i + 1], cls): + stmts[i + 1].repeat = 'cx' + stmts[i + 1].clear_cx = True + del stmts[i] + i += 1 + return + + def optimize(self, keep_labels=[]): + print "optimizing..." + #trivial simplifications + while len(self.stmts) and isinstance(self.stmts[-1], op.label): + print "stripping last label" + self.stmts.pop() + #mark labels that directly precede a ret + for i in range(len(self.stmts)): + if not isinstance(self.stmts[i], op.label): + continue + j = i + while j < len(self.stmts) and isinstance(self.stmts[j], op.label): + j += 1 + if j == len(self.stmts) or isinstance(self.stmts[j], op._ret): + print "Return label: %s" % (self.stmts[i].name,) + self.retlabels.add(self.stmts[i].name) + #merging push ax pop bx constructs + i = 0 + while i + 1 < len(self.stmts): + a, b = self.stmts[i], self.stmts[i + 1] + if isinstance(a, op._push) and isinstance(b, op._pop): + ar, br = a.regs, b.regs + movs = [] + while len(ar) and len(br): + src = ar.pop() + dst = br.pop(0) + movs.append(op._mov2(dst, src)) + if len(br) == 0: + self.stmts.pop(i + 1) + print "merging %d push-pops into movs" %(len(movs)) + for m in movs: + print "\t%s <- %s" %(m.dst, m.src) + self.stmts[i + 1:i + 1] = movs + if len(ar) == 0: + self.stmts.pop(i) + else: + i += 1 + + #eliminating unused labels + for s in list(self.stmts): + if not isinstance(s, op.label): + continue + print "checking label %s..." %s.name + used = s.name in keep_labels + if s.name not in self.retlabels: + for j in self.stmts: + if isinstance(j, op.basejmp) and j.label == s.name: + print "used" + used = True + break + if not used: + print self.labels + self.remove_label(s.name) + + #removing duplicate rets + i = 0 + while i < len(self.stmts)-1: + if isinstance(self.stmts[i], op._ret) and isinstance(self.stmts[i+1], op._ret): + del self.stmts[i] + else: + i += 1 + + #removing last ret + while len(self.stmts) > 0 and isinstance(self.stmts[-1], op._ret) and (len(self.stmts) < 2 or not isinstance(self.stmts[-2], op.label)): + print "stripping last ret" + self.stmts.pop() + + self.optimize_sequence(op._stosb); + self.optimize_sequence(op._stosw); + self.optimize_sequence(op._movsb); + self.optimize_sequence(op._movsw); + + def add(self, stmt): + #print stmt + comment = stmt.rfind(';') + if comment >= 0: + stmt = stmt[:comment] + stmt = stmt.strip() + + r = self.__label_re.search(stmt) + if r is not None: + #label + self.add_label(r.group(1).lower()) + #print "remains: %s" %r.group(2) + stmt = r.group(2).strip() + + if len(stmt) == 0: + return + + s = stmt.split(None) + cmd = s[0] + cl = getattr(op, '_' + cmd) + arg = " ".join(s[1:]) if len(s) > 1 else str() + o = cl(arg) + self.stmts.append(o) + + def __str__(self): + r = [] + for i in self.stmts: + r.append(i.__str__()) + return "\n".join(r) + + def visit(self, visitor, skip = 0): + for i in xrange(skip, len(self.stmts)): + self.stmts[i].visit(visitor) diff --git a/dists/engine-data/kyra.dat b/dists/engine-data/kyra.dat Binary files differindex 23e866c62e..1d79ceddfd 100644 --- a/dists/engine-data/kyra.dat +++ b/dists/engine-data/kyra.dat diff --git a/dists/iphone/readme.txt b/dists/iphone/readme.txt new file mode 100644 index 0000000000..b115ed335c --- /dev/null +++ b/dists/iphone/readme.txt @@ -0,0 +1,7 @@ +The Xcode project files can now be created automatically from the GCC +files using the create_project tool inside the /tools/create_project folder. + +To create the default project files, build create_project.exe, copy it inside +this folder and run the create_xcode.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/dists/iphone/scummvm.xcodeproj/project.pbxproj b/dists/iphone/scummvm.xcodeproj/project.pbxproj index 08b67b61b3..8f6ba6429d 100755 --- a/dists/iphone/scummvm.xcodeproj/project.pbxproj +++ b/dists/iphone/scummvm.xcodeproj/project.pbxproj @@ -224,7 +224,6 @@ DF093E9C0F63CB26002D821E /* consolefont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4775D0D81F4E900B6D1FB /* consolefont.cpp */; }; DF093E9D0F63CB26002D821E /* newfont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4775E0D81F4E900B6D1FB /* newfont.cpp */; }; DF093E9E0F63CB26002D821E /* newfont_big.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4775F0D81F4E900B6D1FB /* newfont_big.cpp */; }; - DF093E9F0F63CB26002D821E /* scummfont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE477600D81F4E900B6D1FB /* scummfont.cpp */; }; DF093EA00F63CB26002D821E /* iff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE477610D81F4E900B6D1FB /* iff.cpp */; }; DF093EA10F63CB26002D821E /* imagedec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE477630D81F4E900B6D1FB /* imagedec.cpp */; }; DF093EA20F63CB26002D821E /* primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4776A0D81F4E900B6D1FB /* primitives.cpp */; }; @@ -249,8 +248,6 @@ DF093ED90F63CB26002D821E /* scalebit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518A00DF34B2500854012 /* scalebit.cpp */; }; DF093EDA0F63CB26002D821E /* 2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518AA0DF34BA600854012 /* 2xsai.cpp */; }; DF093EDB0F63CB26002D821E /* aspect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518AB0DF34BA600854012 /* aspect.cpp */; }; - DF093EDC0F63CB26002D821E /* hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518AD0DF34BA600854012 /* hq2x.cpp */; }; - DF093EDD0F63CB26002D821E /* hq3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518B10DF34BA600854012 /* hq3x.cpp */; }; DF093EDE0F63CB26002D821E /* scale2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518B50DF34BA600854012 /* scale2x.cpp */; }; DF093EDF0F63CB26002D821E /* scale3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518B80DF34BA600854012 /* scale3x.cpp */; }; DF093EE20F63CB26002D821E /* agi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF841FF70E7BA6A600F5680E /* agi.cpp */; }; @@ -1024,7 +1021,6 @@ DF203F981380C2920056300A /* mjpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F831380C2920056300A /* mjpeg.cpp */; }; DF203F991380C2920056300A /* msrle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F851380C2920056300A /* msrle.cpp */; }; DF203F9A1380C2920056300A /* msvideo1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F871380C2920056300A /* msvideo1.cpp */; }; - DF203F9B1380C2920056300A /* qdm2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F891380C2920056300A /* qdm2.cpp */; }; DF203F9C1380C2920056300A /* qtrle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F8C1380C2920056300A /* qtrle.cpp */; }; DF203F9D1380C2920056300A /* rpza.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F8E1380C2920056300A /* rpza.cpp */; }; DF203F9E1380C2920056300A /* smc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F901380C2920056300A /* smc.cpp */; }; @@ -1035,7 +1031,6 @@ DF203FA31380C2920056300A /* mjpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F831380C2920056300A /* mjpeg.cpp */; }; DF203FA41380C2920056300A /* msrle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F851380C2920056300A /* msrle.cpp */; }; DF203FA51380C2920056300A /* msvideo1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F871380C2920056300A /* msvideo1.cpp */; }; - DF203FA61380C2920056300A /* qdm2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F891380C2920056300A /* qdm2.cpp */; }; DF203FA71380C2920056300A /* qtrle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F8C1380C2920056300A /* qtrle.cpp */; }; DF203FA81380C2920056300A /* rpza.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F8E1380C2920056300A /* rpza.cpp */; }; DF203FA91380C2920056300A /* smc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F901380C2920056300A /* smc.cpp */; }; @@ -1046,7 +1041,6 @@ DF203FAE1380C2920056300A /* mjpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F831380C2920056300A /* mjpeg.cpp */; }; DF203FAF1380C2920056300A /* msrle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F851380C2920056300A /* msrle.cpp */; }; DF203FB01380C2920056300A /* msvideo1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F871380C2920056300A /* msvideo1.cpp */; }; - DF203FB11380C2920056300A /* qdm2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F891380C2920056300A /* qdm2.cpp */; }; DF203FB21380C2920056300A /* qtrle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F8C1380C2920056300A /* qtrle.cpp */; }; DF203FB31380C2920056300A /* rpza.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F8E1380C2920056300A /* rpza.cpp */; }; DF203FB41380C2920056300A /* smc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF203F901380C2920056300A /* smc.cpp */; }; @@ -1222,7 +1216,6 @@ DF2040FA1380CAA40056300A /* pcspk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040ED1380CAA40056300A /* pcspk.cpp */; }; DF2040FB1380CAA40056300A /* sid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040EF1380CAA40056300A /* sid.cpp */; }; DF2040FC1380CAA40056300A /* wave6581.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040F11380CAA40056300A /* wave6581.cpp */; }; - DF2040FD1380CAA40056300A /* ym2612.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040F21380CAA40056300A /* ym2612.cpp */; }; DF2040FE1380CAA40056300A /* adlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040E51380CAA40056300A /* adlib.cpp */; }; DF2040FF1380CAA40056300A /* appleiigs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040E61380CAA40056300A /* appleiigs.cpp */; }; DF2041001380CAA40056300A /* cms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040E71380CAA40056300A /* cms.cpp */; }; @@ -1232,7 +1225,6 @@ DF2041041380CAA40056300A /* pcspk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040ED1380CAA40056300A /* pcspk.cpp */; }; DF2041051380CAA40056300A /* sid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040EF1380CAA40056300A /* sid.cpp */; }; DF2041061380CAA40056300A /* wave6581.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040F11380CAA40056300A /* wave6581.cpp */; }; - DF2041071380CAA40056300A /* ym2612.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040F21380CAA40056300A /* ym2612.cpp */; }; DF2041081380CAA40056300A /* adlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040E51380CAA40056300A /* adlib.cpp */; }; DF2041091380CAA40056300A /* appleiigs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040E61380CAA40056300A /* appleiigs.cpp */; }; DF20410A1380CAA40056300A /* cms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040E71380CAA40056300A /* cms.cpp */; }; @@ -1242,7 +1234,6 @@ DF20410E1380CAA40056300A /* pcspk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040ED1380CAA40056300A /* pcspk.cpp */; }; DF20410F1380CAA40056300A /* sid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040EF1380CAA40056300A /* sid.cpp */; }; DF2041101380CAA40056300A /* wave6581.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040F11380CAA40056300A /* wave6581.cpp */; }; - DF2041111380CAA40056300A /* ym2612.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DF2040F21380CAA40056300A /* ym2612.cpp */; }; DF224E040FB23BC500C8E453 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF224E020FB23BC500C8E453 /* OpenGLES.framework */; }; DF224E050FB23BC500C8E453 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF224E020FB23BC500C8E453 /* OpenGLES.framework */; }; DF2EC3E510E6490800765801 /* browser_osx.mm in Sources */ = {isa = PBXBuildFile; fileRef = DF2EC3E410E6490800765801 /* browser_osx.mm */; }; @@ -2451,8 +2442,6 @@ DFD518A20DF34B2500854012 /* scalebit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518A00DF34B2500854012 /* scalebit.cpp */; }; DFD518BC0DF34BA600854012 /* 2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518AA0DF34BA600854012 /* 2xsai.cpp */; }; DFD518BD0DF34BA600854012 /* aspect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518AB0DF34BA600854012 /* aspect.cpp */; }; - DFD518BF0DF34BA600854012 /* hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518AD0DF34BA600854012 /* hq2x.cpp */; }; - DFD518C20DF34BA600854012 /* hq3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518B10DF34BA600854012 /* hq3x.cpp */; }; DFD518C50DF34BA600854012 /* scale2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518B50DF34BA600854012 /* scale2x.cpp */; }; DFD518C70DF34BA600854012 /* scale3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518B80DF34BA600854012 /* scale3x.cpp */; }; DFD6470C0F495B51008E18EF /* unzip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE473C10D81F4E800B6D1FB /* unzip.cpp */; }; @@ -2485,7 +2474,6 @@ DFE47BFF0D81F4E900B6D1FB /* consolefont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4775D0D81F4E900B6D1FB /* consolefont.cpp */; }; DFE47C000D81F4E900B6D1FB /* newfont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4775E0D81F4E900B6D1FB /* newfont.cpp */; }; DFE47C010D81F4E900B6D1FB /* newfont_big.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4775F0D81F4E900B6D1FB /* newfont_big.cpp */; }; - DFE47C020D81F4E900B6D1FB /* scummfont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE477600D81F4E900B6D1FB /* scummfont.cpp */; }; DFE47C030D81F4E900B6D1FB /* iff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE477610D81F4E900B6D1FB /* iff.cpp */; }; DFE47C040D81F4E900B6D1FB /* imagedec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE477630D81F4E900B6D1FB /* imagedec.cpp */; }; DFE47C080D81F4E900B6D1FB /* primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4776A0D81F4E900B6D1FB /* primitives.cpp */; }; @@ -2560,7 +2548,6 @@ DFF959320FB22D5700A3EC78 /* consolefont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4775D0D81F4E900B6D1FB /* consolefont.cpp */; }; DFF959330FB22D5700A3EC78 /* newfont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4775E0D81F4E900B6D1FB /* newfont.cpp */; }; DFF959340FB22D5700A3EC78 /* newfont_big.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4775F0D81F4E900B6D1FB /* newfont_big.cpp */; }; - DFF959350FB22D5700A3EC78 /* scummfont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE477600D81F4E900B6D1FB /* scummfont.cpp */; }; DFF959360FB22D5700A3EC78 /* iff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE477610D81F4E900B6D1FB /* iff.cpp */; }; DFF959370FB22D5700A3EC78 /* imagedec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE477630D81F4E900B6D1FB /* imagedec.cpp */; }; DFF959380FB22D5700A3EC78 /* primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFE4776A0D81F4E900B6D1FB /* primitives.cpp */; }; @@ -2586,8 +2573,6 @@ DFF9596F0FB22D5700A3EC78 /* scalebit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518A00DF34B2500854012 /* scalebit.cpp */; }; DFF959700FB22D5700A3EC78 /* 2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518AA0DF34BA600854012 /* 2xsai.cpp */; }; DFF959710FB22D5700A3EC78 /* aspect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518AB0DF34BA600854012 /* aspect.cpp */; }; - DFF959720FB22D5700A3EC78 /* hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518AD0DF34BA600854012 /* hq2x.cpp */; }; - DFF959730FB22D5700A3EC78 /* hq3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518B10DF34BA600854012 /* hq3x.cpp */; }; DFF959740FB22D5700A3EC78 /* scale2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518B50DF34BA600854012 /* scale2x.cpp */; }; DFF959750FB22D5700A3EC78 /* scale3x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DFD518B80DF34BA600854012 /* scale3x.cpp */; }; DFF959760FB22D5700A3EC78 /* iphone_keyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = DF841FD90E7BA61800F5680E /* iphone_keyboard.m */; }; @@ -3317,7 +3302,84 @@ DFF95CBF0FB22D5700A3EC78 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF842A190E7BB34E00F5680E /* UIKit.framework */; }; DFF95CC00FB22D5700A3EC78 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF842A270E7BB37500F5680E /* AudioToolbox.framework */; }; DFF95CC10FB22D5700A3EC78 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF842A2E0E7BB39E00F5680E /* QuartzCore.framework */; }; - DFF95CCF0FB22D8500A3EC78 /* libmpeg2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DFD6476D0F49F7EF008E18EF /* libmpeg2.a */; }; + F92B4DCE139DD428000D1BF1 /* quicktime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F92B4DCC139DD428000D1BF1 /* quicktime.cpp */; }; + F92B4DCF139DD428000D1BF1 /* quicktime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F92B4DCC139DD428000D1BF1 /* quicktime.cpp */; }; + F92B4DD0139DD428000D1BF1 /* quicktime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F92B4DCC139DD428000D1BF1 /* quicktime.cpp */; }; + F92B4DD3139DD449000D1BF1 /* yuv_to_rgb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F92B4DD1139DD449000D1BF1 /* yuv_to_rgb.cpp */; }; + F92B4DD4139DD449000D1BF1 /* yuv_to_rgb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F92B4DD1139DD449000D1BF1 /* yuv_to_rgb.cpp */; }; + F92B4DD5139DD449000D1BF1 /* yuv_to_rgb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F92B4DD1139DD449000D1BF1 /* yuv_to_rgb.cpp */; }; + F92B4DDA139DDC92000D1BF1 /* macosx-main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F92B4DD7139DDC92000D1BF1 /* macosx-main.cpp */; }; + F92B4DDB139DDC92000D1BF1 /* macosx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F92B4DD8139DDC92000D1BF1 /* macosx.cpp */; }; + F9946D90139E1A260072D195 /* cdtoons.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D7A139E1A260072D195 /* cdtoons.cpp */; }; + F9946D91139E1A260072D195 /* cinepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D7C139E1A260072D195 /* cinepak.cpp */; }; + F9946D92139E1A260072D195 /* indeo3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D7F139E1A260072D195 /* indeo3.cpp */; }; + F9946D93139E1A260072D195 /* mjpeg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D81139E1A260072D195 /* mjpeg.cpp */; }; + F9946D94139E1A260072D195 /* msrle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D83139E1A260072D195 /* msrle.cpp */; }; + F9946D95139E1A260072D195 /* msvideo1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D85139E1A260072D195 /* msvideo1.cpp */; }; + F9946D96139E1A260072D195 /* qtrle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D87139E1A260072D195 /* qtrle.cpp */; }; + F9946D97139E1A260072D195 /* rpza.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D89139E1A260072D195 /* rpza.cpp */; }; + F9946D98139E1A260072D195 /* smc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D8B139E1A260072D195 /* smc.cpp */; }; + F9946D99139E1A260072D195 /* truemotion1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D8D139E1A260072D195 /* truemotion1.cpp */; }; + F9946D9D139E1A560072D195 /* towns_midi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D9A139E1A560072D195 /* towns_midi.cpp */; }; + F9946D9E139E1A560072D195 /* towns_midi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D9A139E1A560072D195 /* towns_midi.cpp */; }; + F9946D9F139E1A560072D195 /* towns_midi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D9A139E1A560072D195 /* towns_midi.cpp */; }; + F9946DA0139E1A560072D195 /* towns_pc98_plugins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D9C139E1A560072D195 /* towns_pc98_plugins.cpp */; }; + F9946DA1139E1A560072D195 /* towns_pc98_plugins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D9C139E1A560072D195 /* towns_pc98_plugins.cpp */; }; + F9946DA2139E1A560072D195 /* towns_pc98_plugins.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946D9C139E1A560072D195 /* towns_pc98_plugins.cpp */; }; + F9946DB5139E1A880072D195 /* freeverb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DA3139E1A880072D195 /* freeverb.cpp */; }; + F9946DB6139E1A880072D195 /* freeverb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DA3139E1A880072D195 /* freeverb.cpp */; }; + F9946DB7139E1A880072D195 /* freeverb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DA3139E1A880072D195 /* freeverb.cpp */; }; + F9946DB8139E1A880072D195 /* i386.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DA5139E1A880072D195 /* i386.cpp */; }; + F9946DB9139E1A880072D195 /* i386.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DA5139E1A880072D195 /* i386.cpp */; }; + F9946DBA139E1A880072D195 /* i386.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DA5139E1A880072D195 /* i386.cpp */; }; + F9946DBB139E1A880072D195 /* mt32_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DA7139E1A880072D195 /* mt32_file.cpp */; }; + F9946DBC139E1A880072D195 /* mt32_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DA7139E1A880072D195 /* mt32_file.cpp */; }; + F9946DBD139E1A880072D195 /* mt32_file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DA7139E1A880072D195 /* mt32_file.cpp */; }; + F9946DBE139E1A880072D195 /* part.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DAA139E1A880072D195 /* part.cpp */; }; + F9946DBF139E1A880072D195 /* part.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DAA139E1A880072D195 /* part.cpp */; }; + F9946DC0139E1A880072D195 /* part.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DAA139E1A880072D195 /* part.cpp */; }; + F9946DC1139E1A880072D195 /* partial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DAC139E1A880072D195 /* partial.cpp */; }; + F9946DC2139E1A880072D195 /* partial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DAC139E1A880072D195 /* partial.cpp */; }; + F9946DC3139E1A880072D195 /* partial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DAC139E1A880072D195 /* partial.cpp */; }; + F9946DC4139E1A880072D195 /* partialManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DAE139E1A880072D195 /* partialManager.cpp */; }; + F9946DC5139E1A880072D195 /* partialManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DAE139E1A880072D195 /* partialManager.cpp */; }; + F9946DC6139E1A880072D195 /* partialManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DAE139E1A880072D195 /* partialManager.cpp */; }; + F9946DC7139E1A880072D195 /* synth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DB1139E1A880072D195 /* synth.cpp */; }; + F9946DC8139E1A880072D195 /* synth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DB1139E1A880072D195 /* synth.cpp */; }; + F9946DC9139E1A880072D195 /* synth.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DB1139E1A880072D195 /* synth.cpp */; }; + F9946DCA139E1A880072D195 /* tables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DB3139E1A880072D195 /* tables.cpp */; }; + F9946DCB139E1A880072D195 /* tables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DB3139E1A880072D195 /* tables.cpp */; }; + F9946DCC139E1A880072D195 /* tables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DB3139E1A880072D195 /* tables.cpp */; }; + F9946DD6139E1AD30072D195 /* aac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DCE139E1AD30072D195 /* aac.cpp */; }; + F9946DD7139E1AD30072D195 /* aac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DCE139E1AD30072D195 /* aac.cpp */; }; + F9946DD8139E1AD30072D195 /* aac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DCE139E1AD30072D195 /* aac.cpp */; }; + F9946DD9139E1AD30072D195 /* qdm2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DD0139E1AD30072D195 /* qdm2.cpp */; }; + F9946DDA139E1AD30072D195 /* qdm2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DD0139E1AD30072D195 /* qdm2.cpp */; }; + F9946DDB139E1AD30072D195 /* qdm2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DD0139E1AD30072D195 /* qdm2.cpp */; }; + F9946DDC139E1AD30072D195 /* quicktime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DD4139E1AD30072D195 /* quicktime.cpp */; }; + F9946DDD139E1AD30072D195 /* quicktime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DD4139E1AD30072D195 /* quicktime.cpp */; }; + F9946DDE139E1AD30072D195 /* quicktime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DD4139E1AD30072D195 /* quicktime.cpp */; }; + F9946DE3139E1B180072D195 /* posix-main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DE0139E1B180072D195 /* posix-main.cpp */; }; + F9946DE4139E1B180072D195 /* posix-main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DE0139E1B180072D195 /* posix-main.cpp */; }; + F9946DE5139E1B180072D195 /* posix-main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DE0139E1B180072D195 /* posix-main.cpp */; }; + F9946DE6139E1B180072D195 /* posix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DE1139E1B180072D195 /* posix.cpp */; }; + F9946DE7139E1B180072D195 /* posix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DE1139E1B180072D195 /* posix.cpp */; }; + F9946DE8139E1B180072D195 /* posix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DE1139E1B180072D195 /* posix.cpp */; }; + F9946DEC139E1B6F0072D195 /* downscaler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DEA139E1B6F0072D195 /* downscaler.cpp */; }; + F9946DED139E1B6F0072D195 /* downscaler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DEA139E1B6F0072D195 /* downscaler.cpp */; }; + F9946DEE139E1B6F0072D195 /* downscaler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DEA139E1B6F0072D195 /* downscaler.cpp */; }; + F9946DF1139E1BA00072D195 /* console.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DEF139E1BA00072D195 /* console.cpp */; }; + F9946DF2139E1BA00072D195 /* console.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DEF139E1BA00072D195 /* console.cpp */; }; + F9946DF3139E1BA00072D195 /* console.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DEF139E1BA00072D195 /* console.cpp */; }; + F9946DF7139E1BBF0072D195 /* sdl-mixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DF5139E1BBF0072D195 /* sdl-mixer.cpp */; }; + F9946DF8139E1BBF0072D195 /* sdl-mixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DF5139E1BBF0072D195 /* sdl-mixer.cpp */; }; + F9946DF9139E1BBF0072D195 /* sdl-mixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DF5139E1BBF0072D195 /* sdl-mixer.cpp */; }; + F9946DFE139E1BEB0072D195 /* doublebuffersdl-mixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DFC139E1BEB0072D195 /* doublebuffersdl-mixer.cpp */; }; + F9946DFF139E1BEB0072D195 /* doublebuffersdl-mixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DFC139E1BEB0072D195 /* doublebuffersdl-mixer.cpp */; }; + F9946E00139E1BEB0072D195 /* doublebuffersdl-mixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946DFC139E1BEB0072D195 /* doublebuffersdl-mixer.cpp */; }; + F9946E04139E1C390072D195 /* sdl-graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946E02139E1C390072D195 /* sdl-graphics.cpp */; }; + F9946E05139E1C390072D195 /* sdl-graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946E02139E1C390072D195 /* sdl-graphics.cpp */; }; + F9946E06139E1C3A0072D195 /* sdl-graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9946E02139E1C390072D195 /* sdl-graphics.cpp */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -3528,9 +3590,6 @@ DF203F861380C2920056300A /* msrle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = msrle.h; path = ../../video/codecs/msrle.h; sourceTree = SOURCE_ROOT; }; DF203F871380C2920056300A /* msvideo1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = msvideo1.cpp; path = ../../video/codecs/msvideo1.cpp; sourceTree = SOURCE_ROOT; }; DF203F881380C2920056300A /* msvideo1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = msvideo1.h; path = ../../video/codecs/msvideo1.h; sourceTree = SOURCE_ROOT; }; - DF203F891380C2920056300A /* qdm2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = qdm2.cpp; path = ../../video/codecs/qdm2.cpp; sourceTree = SOURCE_ROOT; }; - DF203F8A1380C2920056300A /* qdm2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qdm2.h; path = ../../video/codecs/qdm2.h; sourceTree = SOURCE_ROOT; }; - DF203F8B1380C2920056300A /* qdm2data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qdm2data.h; path = ../../video/codecs/qdm2data.h; sourceTree = SOURCE_ROOT; }; DF203F8C1380C2920056300A /* qtrle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = qtrle.cpp; path = ../../video/codecs/qtrle.cpp; sourceTree = SOURCE_ROOT; }; DF203F8D1380C2920056300A /* qtrle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qtrle.h; path = ../../video/codecs/qtrle.h; sourceTree = SOURCE_ROOT; }; DF203F8E1380C2920056300A /* rpza.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rpza.cpp; path = ../../video/codecs/rpza.cpp; sourceTree = SOURCE_ROOT; }; @@ -3648,8 +3707,6 @@ DF2040EF1380CAA40056300A /* sid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sid.cpp; path = ../../audio/softsynth/sid.cpp; sourceTree = SOURCE_ROOT; }; DF2040F01380CAA40056300A /* sid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sid.h; path = ../../audio/softsynth/sid.h; sourceTree = SOURCE_ROOT; }; DF2040F11380CAA40056300A /* wave6581.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = wave6581.cpp; path = ../../audio/softsynth/wave6581.cpp; sourceTree = SOURCE_ROOT; }; - DF2040F21380CAA40056300A /* ym2612.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ym2612.cpp; path = ../../audio/softsynth/ym2612.cpp; sourceTree = SOURCE_ROOT; }; - DF2040F31380CAA40056300A /* ym2612.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ym2612.h; path = ../../audio/softsynth/ym2612.h; sourceTree = SOURCE_ROOT; }; DF224E020FB23BC500C8E453 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; DF2EC3E410E6490800765801 /* browser_osx.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = browser_osx.mm; sourceTree = "<group>"; }; DF2EC3F610E64C0C00765801 /* dialogs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dialogs.cpp; sourceTree = "<group>"; }; @@ -5147,15 +5204,12 @@ DFD518A10DF34B2500854012 /* scalebit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalebit.h; sourceTree = "<group>"; }; DFD518AA0DF34BA600854012 /* 2xsai.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 2xsai.cpp; sourceTree = "<group>"; }; DFD518AB0DF34BA600854012 /* aspect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aspect.cpp; sourceTree = "<group>"; }; - DFD518AD0DF34BA600854012 /* hq2x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq2x.cpp; sourceTree = "<group>"; }; - DFD518B10DF34BA600854012 /* hq3x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq3x.cpp; sourceTree = "<group>"; }; DFD518B50DF34BA600854012 /* scale2x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scale2x.cpp; sourceTree = "<group>"; }; DFD518B60DF34BA600854012 /* scale2x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scale2x.h; sourceTree = "<group>"; }; DFD518B80DF34BA600854012 /* scale3x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scale3x.cpp; sourceTree = "<group>"; }; DFD518B90DF34BA600854012 /* scale3x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scale3x.h; sourceTree = "<group>"; }; DFD6476B0F49F7EF008E18EF /* libFLAC.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libFLAC.a; path = lib/libFLAC.a; sourceTree = "<group>"; }; DFD6476C0F49F7EF008E18EF /* libmad.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmad.a; path = lib/libmad.a; sourceTree = "<group>"; }; - DFD6476D0F49F7EF008E18EF /* libmpeg2.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmpeg2.a; path = lib/libmpeg2.a; sourceTree = "<group>"; }; DFD6476F0F49F7EF008E18EF /* libvorbisidec.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libvorbisidec.a; path = lib/libvorbisidec.a; sourceTree = "<group>"; }; DFE470C10D81F4BA00B6D1FB /* commandLine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = commandLine.cpp; sourceTree = "<group>"; }; DFE470C20D81F4BA00B6D1FB /* commandLine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = commandLine.h; sourceTree = "<group>"; }; @@ -5239,7 +5293,6 @@ DFE4775D0D81F4E900B6D1FB /* consolefont.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = consolefont.cpp; sourceTree = "<group>"; }; DFE4775E0D81F4E900B6D1FB /* newfont.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = newfont.cpp; sourceTree = "<group>"; }; DFE4775F0D81F4E900B6D1FB /* newfont_big.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = newfont_big.cpp; sourceTree = "<group>"; }; - DFE477600D81F4E900B6D1FB /* scummfont.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scummfont.cpp; sourceTree = "<group>"; }; DFE477610D81F4E900B6D1FB /* iff.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = iff.cpp; sourceTree = "<group>"; }; DFE477620D81F4E900B6D1FB /* iff.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iff.h; sourceTree = "<group>"; }; DFE477630D81F4E900B6D1FB /* imagedec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = imagedec.cpp; sourceTree = "<group>"; }; @@ -5295,6 +5348,80 @@ DFEC5D351166C67300C90552 /* savestate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = savestate.h; sourceTree = "<group>"; }; DFF4DFFC0F4B449F00C50BC7 /* Info.plist.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist.in; sourceTree = "<group>"; }; DFF95CCA0FB22D5700A3EC78 /* ScummVM.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ScummVM.app; sourceTree = BUILT_PRODUCTS_DIR; }; + F92B4DCB139DD428000D1BF1 /* memstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memstream.h; sourceTree = "<group>"; }; + F92B4DCC139DD428000D1BF1 /* quicktime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = quicktime.cpp; sourceTree = "<group>"; }; + F92B4DCD139DD428000D1BF1 /* quicktime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quicktime.h; sourceTree = "<group>"; }; + F92B4DD1139DD449000D1BF1 /* yuv_to_rgb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = yuv_to_rgb.cpp; sourceTree = "<group>"; }; + F92B4DD2139DD449000D1BF1 /* yuv_to_rgb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = yuv_to_rgb.h; sourceTree = "<group>"; }; + F92B4DD6139DDC7A000D1BF1 /* sdl-sys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "sdl-sys.h"; sourceTree = "<group>"; }; + F92B4DD7139DDC92000D1BF1 /* macosx-main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "macosx-main.cpp"; path = "sdl/macosx/macosx-main.cpp"; sourceTree = "<group>"; }; + F92B4DD8139DDC92000D1BF1 /* macosx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = macosx.cpp; path = sdl/macosx/macosx.cpp; sourceTree = "<group>"; }; + F92B4DD9139DDC92000D1BF1 /* macosx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = macosx.h; path = sdl/macosx/macosx.h; sourceTree = "<group>"; }; + F9946D7A139E1A260072D195 /* cdtoons.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cdtoons.cpp; sourceTree = "<group>"; }; + F9946D7B139E1A260072D195 /* cdtoons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cdtoons.h; sourceTree = "<group>"; }; + F9946D7C139E1A260072D195 /* cinepak.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cinepak.cpp; sourceTree = "<group>"; }; + F9946D7D139E1A260072D195 /* cinepak.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cinepak.h; sourceTree = "<group>"; }; + F9946D7E139E1A260072D195 /* codec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = codec.h; sourceTree = "<group>"; }; + F9946D7F139E1A260072D195 /* indeo3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = indeo3.cpp; sourceTree = "<group>"; }; + F9946D80139E1A260072D195 /* indeo3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = indeo3.h; sourceTree = "<group>"; }; + F9946D81139E1A260072D195 /* mjpeg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mjpeg.cpp; sourceTree = "<group>"; }; + F9946D82139E1A260072D195 /* mjpeg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mjpeg.h; sourceTree = "<group>"; }; + F9946D83139E1A260072D195 /* msrle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = msrle.cpp; sourceTree = "<group>"; }; + F9946D84139E1A260072D195 /* msrle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msrle.h; sourceTree = "<group>"; }; + F9946D85139E1A260072D195 /* msvideo1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = msvideo1.cpp; sourceTree = "<group>"; }; + F9946D86139E1A260072D195 /* msvideo1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msvideo1.h; sourceTree = "<group>"; }; + F9946D87139E1A260072D195 /* qtrle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = qtrle.cpp; sourceTree = "<group>"; }; + F9946D88139E1A260072D195 /* qtrle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qtrle.h; sourceTree = "<group>"; }; + F9946D89139E1A260072D195 /* rpza.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rpza.cpp; sourceTree = "<group>"; }; + F9946D8A139E1A260072D195 /* rpza.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rpza.h; sourceTree = "<group>"; }; + F9946D8B139E1A260072D195 /* smc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = smc.cpp; sourceTree = "<group>"; }; + F9946D8C139E1A260072D195 /* smc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = smc.h; sourceTree = "<group>"; }; + F9946D8D139E1A260072D195 /* truemotion1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = truemotion1.cpp; sourceTree = "<group>"; }; + F9946D8E139E1A260072D195 /* truemotion1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = truemotion1.h; sourceTree = "<group>"; }; + F9946D8F139E1A260072D195 /* truemotion1data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = truemotion1data.h; sourceTree = "<group>"; }; + F9946D9A139E1A560072D195 /* towns_midi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = towns_midi.cpp; path = ../../audio/softsynth/fmtowns_pc98/towns_midi.cpp; sourceTree = "<group>"; }; + F9946D9B139E1A560072D195 /* towns_midi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = towns_midi.h; path = ../../audio/softsynth/fmtowns_pc98/towns_midi.h; sourceTree = "<group>"; }; + F9946D9C139E1A560072D195 /* towns_pc98_plugins.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = towns_pc98_plugins.cpp; path = ../../audio/softsynth/fmtowns_pc98/towns_pc98_plugins.cpp; sourceTree = "<group>"; }; + F9946DA3139E1A880072D195 /* freeverb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = freeverb.cpp; path = ../../audio/softsynth/mt32/freeverb.cpp; sourceTree = "<group>"; }; + F9946DA4139E1A880072D195 /* freeverb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = freeverb.h; path = ../../audio/softsynth/mt32/freeverb.h; sourceTree = "<group>"; }; + F9946DA5139E1A880072D195 /* i386.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = i386.cpp; path = ../../audio/softsynth/mt32/i386.cpp; sourceTree = "<group>"; }; + F9946DA6139E1A880072D195 /* i386.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = i386.h; path = ../../audio/softsynth/mt32/i386.h; sourceTree = "<group>"; }; + F9946DA7139E1A880072D195 /* mt32_file.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mt32_file.cpp; path = ../../audio/softsynth/mt32/mt32_file.cpp; sourceTree = "<group>"; }; + F9946DA8139E1A880072D195 /* mt32_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mt32_file.h; path = ../../audio/softsynth/mt32/mt32_file.h; sourceTree = "<group>"; }; + F9946DA9139E1A880072D195 /* mt32emu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mt32emu.h; path = ../../audio/softsynth/mt32/mt32emu.h; sourceTree = "<group>"; }; + F9946DAA139E1A880072D195 /* part.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = part.cpp; path = ../../audio/softsynth/mt32/part.cpp; sourceTree = "<group>"; }; + F9946DAB139E1A880072D195 /* part.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = part.h; path = ../../audio/softsynth/mt32/part.h; sourceTree = "<group>"; }; + F9946DAC139E1A880072D195 /* partial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = partial.cpp; path = ../../audio/softsynth/mt32/partial.cpp; sourceTree = "<group>"; }; + F9946DAD139E1A880072D195 /* partial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = partial.h; path = ../../audio/softsynth/mt32/partial.h; sourceTree = "<group>"; }; + F9946DAE139E1A880072D195 /* partialManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = partialManager.cpp; path = ../../audio/softsynth/mt32/partialManager.cpp; sourceTree = "<group>"; }; + F9946DAF139E1A880072D195 /* partialManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = partialManager.h; path = ../../audio/softsynth/mt32/partialManager.h; sourceTree = "<group>"; }; + F9946DB0139E1A880072D195 /* structures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = structures.h; path = ../../audio/softsynth/mt32/structures.h; sourceTree = "<group>"; }; + F9946DB1139E1A880072D195 /* synth.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = synth.cpp; path = ../../audio/softsynth/mt32/synth.cpp; sourceTree = "<group>"; }; + F9946DB2139E1A880072D195 /* synth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = synth.h; path = ../../audio/softsynth/mt32/synth.h; sourceTree = "<group>"; }; + F9946DB3139E1A880072D195 /* tables.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tables.cpp; path = ../../audio/softsynth/mt32/tables.cpp; sourceTree = "<group>"; }; + F9946DB4139E1A880072D195 /* tables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tables.h; path = ../../audio/softsynth/mt32/tables.h; sourceTree = "<group>"; }; + F9946DCE139E1AD30072D195 /* aac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = aac.cpp; path = ../../audio/decoders/aac.cpp; sourceTree = "<group>"; }; + F9946DCF139E1AD30072D195 /* aac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aac.h; path = ../../audio/decoders/aac.h; sourceTree = "<group>"; }; + F9946DD0139E1AD30072D195 /* qdm2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = qdm2.cpp; path = ../../audio/decoders/qdm2.cpp; sourceTree = "<group>"; }; + F9946DD1139E1AD30072D195 /* qdm2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qdm2.h; path = ../../audio/decoders/qdm2.h; sourceTree = "<group>"; }; + F9946DD2139E1AD30072D195 /* qdm2data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = qdm2data.h; path = ../../audio/decoders/qdm2data.h; sourceTree = "<group>"; }; + F9946DD3139E1AD30072D195 /* quicktime_intern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quicktime_intern.h; path = ../../audio/decoders/quicktime_intern.h; sourceTree = "<group>"; }; + F9946DD4139E1AD30072D195 /* quicktime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quicktime.cpp; path = ../../audio/decoders/quicktime.cpp; sourceTree = "<group>"; }; + F9946DD5139E1AD30072D195 /* quicktime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quicktime.h; path = ../../audio/decoders/quicktime.h; sourceTree = "<group>"; }; + F9946DE0139E1B180072D195 /* posix-main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "posix-main.cpp"; sourceTree = "<group>"; }; + F9946DE1139E1B180072D195 /* posix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = posix.cpp; sourceTree = "<group>"; }; + F9946DE2139E1B180072D195 /* posix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = posix.h; sourceTree = "<group>"; }; + F9946DE9139E1B6F0072D195 /* aspect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aspect.h; sourceTree = "<group>"; }; + F9946DEA139E1B6F0072D195 /* downscaler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = downscaler.cpp; sourceTree = "<group>"; }; + F9946DEB139E1B6F0072D195 /* downscaler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = downscaler.h; sourceTree = "<group>"; }; + F9946DEF139E1BA00072D195 /* console.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = console.cpp; sourceTree = "<group>"; }; + F9946DF0139E1BA00072D195 /* console.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = console.h; sourceTree = "<group>"; }; + F9946DF5139E1BBF0072D195 /* sdl-mixer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "sdl-mixer.cpp"; sourceTree = "<group>"; }; + F9946DF6139E1BBF0072D195 /* sdl-mixer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "sdl-mixer.h"; sourceTree = "<group>"; }; + F9946DFC139E1BEB0072D195 /* doublebuffersdl-mixer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "doublebuffersdl-mixer.cpp"; sourceTree = "<group>"; }; + F9946DFD139E1BEB0072D195 /* doublebuffersdl-mixer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "doublebuffersdl-mixer.h"; sourceTree = "<group>"; }; + F9946E02139E1C390072D195 /* sdl-graphics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "sdl-graphics.cpp"; sourceTree = "<group>"; }; + F9946E03139E1C390072D195 /* sdl-graphics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "sdl-graphics.h"; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -5311,7 +5438,6 @@ DFF959050FB22D3000A3EC78 /* libmad.a in Frameworks */, DFF959060FB22D3100A3EC78 /* libFLAC.a in Frameworks */, DFF959080FB22D3300A3EC78 /* libvorbisidec.a in Frameworks */, - DFF95CCF0FB22D8500A3EC78 /* libmpeg2.a in Frameworks */, DF224E040FB23BC500C8E453 /* OpenGLES.framework in Frameworks */, DFADEC071382140300C46364 /* libz.dylib in Frameworks */, ); @@ -5509,6 +5635,8 @@ 8CD1ECE3126202AA00FA198C /* toon */ = { isa = PBXGroup; children = ( + F9946DEF139E1BA00072D195 /* console.cpp */, + F9946DF0139E1BA00072D195 /* console.h */, 8CD1ECE4126202AA00FA198C /* anim.cpp */, 8CD1ECE5126202AA00FA198C /* anim.h */, 8CD1ECE6126202AA00FA198C /* audio.cpp */, @@ -5592,6 +5720,8 @@ DF09422F0F63CB9A002D821E /* sdl */ = { isa = PBXGroup; children = ( + F9946DDF139E1B180072D195 /* posix */, + F92B4DD6139DDC7A000D1BF1 /* sdl-sys.h */, DF6118CB0FE3AAFD0042AD3F /* hardwarekeys.cpp */, DF0942390F63CB9A002D821E /* main.cpp */, DF09423C0F63CB9A002D821E /* sdl.cpp */, @@ -5651,9 +5781,6 @@ DF203F861380C2920056300A /* msrle.h */, DF203F871380C2920056300A /* msvideo1.cpp */, DF203F881380C2920056300A /* msvideo1.h */, - DF203F891380C2920056300A /* qdm2.cpp */, - DF203F8A1380C2920056300A /* qdm2.h */, - DF203F8B1380C2920056300A /* qdm2data.h */, DF203F8C1380C2920056300A /* qtrle.cpp */, DF203F8D1380C2920056300A /* qtrle.h */, DF203F8E1380C2920056300A /* rpza.cpp */, @@ -5689,6 +5816,7 @@ DF2040461380C9ED0056300A /* audio */ = { isa = PBXGroup; children = ( + F9946D79139E1A260072D195 /* codecs */, DF46B8991381F6C400D08723 /* null.cpp */, DF46B89A1381F6C400D08723 /* null.h */, DF2040E41380CA8C0056300A /* softsynth */, @@ -5724,6 +5852,14 @@ DF2040821380CA280056300A /* decoders */ = { isa = PBXGroup; children = ( + F9946DCE139E1AD30072D195 /* aac.cpp */, + F9946DCF139E1AD30072D195 /* aac.h */, + F9946DD0139E1AD30072D195 /* qdm2.cpp */, + F9946DD1139E1AD30072D195 /* qdm2.h */, + F9946DD2139E1AD30072D195 /* qdm2data.h */, + F9946DD3139E1AD30072D195 /* quicktime_intern.h */, + F9946DD4139E1AD30072D195 /* quicktime.cpp */, + F9946DD5139E1AD30072D195 /* quicktime.h */, DF2040831380CA400056300A /* adpcm_intern.h */, DF2040841380CA400056300A /* adpcm.cpp */, DF2040851380CA400056300A /* adpcm.h */, @@ -5777,6 +5913,7 @@ DF2040E41380CA8C0056300A /* softsynth */ = { isa = PBXGroup; children = ( + F9946DCD139E1A9A0072D195 /* mt32 */, DF46B8591381F43100D08723 /* opl */, DF46B6F61381E1D100D08723 /* fmtowns_pc98 */, DF2040E51380CAA40056300A /* adlib.cpp */, @@ -5792,8 +5929,6 @@ DF2040EF1380CAA40056300A /* sid.cpp */, DF2040F01380CAA40056300A /* sid.h */, DF2040F11380CAA40056300A /* wave6581.cpp */, - DF2040F21380CAA40056300A /* ym2612.cpp */, - DF2040F31380CAA40056300A /* ym2612.h */, ); name = softsynth; sourceTree = "<group>"; @@ -5972,6 +6107,9 @@ DF46B6F61381E1D100D08723 /* fmtowns_pc98 */ = { isa = PBXGroup; children = ( + F9946D9A139E1A560072D195 /* towns_midi.cpp */, + F9946D9B139E1A560072D195 /* towns_midi.h */, + F9946D9C139E1A560072D195 /* towns_pc98_plugins.cpp */, DF46B6F71381E1FF00D08723 /* towns_audio.cpp */, DF46B6F81381E1FF00D08723 /* towns_audio.h */, DF46B6F91381E1FF00D08723 /* towns_euphony.cpp */, @@ -7608,10 +7746,11 @@ DFD5184C0DF3420D00854012 /* scaler */ = { isa = PBXGroup; children = ( + F9946DE9139E1B6F0072D195 /* aspect.h */, + F9946DEA139E1B6F0072D195 /* downscaler.cpp */, + F9946DEB139E1B6F0072D195 /* downscaler.h */, DFD518AA0DF34BA600854012 /* 2xsai.cpp */, DFD518AB0DF34BA600854012 /* aspect.cpp */, - DFD518AD0DF34BA600854012 /* hq2x.cpp */, - DFD518B10DF34BA600854012 /* hq3x.cpp */, DFD5189E0DF34AD700854012 /* intern.h */, DFD518B50DF34BA600854012 /* scale2x.cpp */, DFD518B60DF34BA600854012 /* scale2x.h */, @@ -7629,7 +7768,6 @@ children = ( DFD6476B0F49F7EF008E18EF /* libFLAC.a */, DFD6476C0F49F7EF008E18EF /* libmad.a */, - DFD6476D0F49F7EF008E18EF /* libmpeg2.a */, DFD6476F0F49F7EF008E18EF /* libvorbisidec.a */, ); name = libs; @@ -7654,6 +7792,8 @@ DFE470D50D81F4E700B6D1FB /* backends */ = { isa = PBXGroup; children = ( + F9946E07139E1C3E0072D195 /* graphics */, + F9946DFA139E1BCB0072D195 /* mixer */, DF46B86D1381F47B00D08723 /* audiocd */, DF46B7B01381E64E00D08723 /* mutex */, DF46B7471381E40F00D08723 /* modular-backend.cpp */, @@ -7728,6 +7868,7 @@ DFE471170D81F4E700B6D1FB /* platform */ = { isa = PBXGroup; children = ( + F92B4DDC139DDC9E000D1BF1 /* macosx */, DF09422F0F63CB9A002D821E /* sdl */, DFE471D70D81F4E700B6D1FB /* iphone */, ); @@ -7813,6 +7954,9 @@ DFE473950D81F4E800B6D1FB /* common */ = { isa = PBXGroup; children = ( + F92B4DCB139DD428000D1BF1 /* memstream.h */, + F92B4DCC139DD428000D1BF1 /* quicktime.cpp */, + F92B4DCD139DD428000D1BF1 /* quicktime.h */, DF46B76E1381E54200D08723 /* bufferedstream.h */, DF46B76F1381E54200D08723 /* dcl.cpp */, DF46B7701381E54200D08723 /* dcl.h */, @@ -7912,6 +8056,8 @@ DFE477520D81F4E900B6D1FB /* graphics */ = { isa = PBXGroup; children = ( + F92B4DD1139DD449000D1BF1 /* yuv_to_rgb.cpp */, + F92B4DD2139DD449000D1BF1 /* yuv_to_rgb.h */, DFADEBB113820DF500C46364 /* maccursor.cpp */, DFADEBB213820DF500C46364 /* maccursor.h */, DF46B78E1381E58000D08723 /* palette.h */, @@ -7968,7 +8114,6 @@ DFE4775D0D81F4E900B6D1FB /* consolefont.cpp */, DFE4775E0D81F4E900B6D1FB /* newfont.cpp */, DFE4775F0D81F4E900B6D1FB /* newfont_big.cpp */, - DFE477600D81F4E900B6D1FB /* scummfont.cpp */, ); path = fonts; sourceTree = "<group>"; @@ -8040,6 +8185,128 @@ path = themes; sourceTree = "<group>"; }; + F92B4DDC139DDC9E000D1BF1 /* macosx */ = { + isa = PBXGroup; + children = ( + F92B4DD7139DDC92000D1BF1 /* macosx-main.cpp */, + F92B4DD8139DDC92000D1BF1 /* macosx.cpp */, + F92B4DD9139DDC92000D1BF1 /* macosx.h */, + ); + name = macosx; + sourceTree = "<group>"; + }; + F9946D79139E1A260072D195 /* codecs */ = { + isa = PBXGroup; + children = ( + F9946D7A139E1A260072D195 /* cdtoons.cpp */, + F9946D7B139E1A260072D195 /* cdtoons.h */, + F9946D7C139E1A260072D195 /* cinepak.cpp */, + F9946D7D139E1A260072D195 /* cinepak.h */, + F9946D7E139E1A260072D195 /* codec.h */, + F9946D7F139E1A260072D195 /* indeo3.cpp */, + F9946D80139E1A260072D195 /* indeo3.h */, + F9946D81139E1A260072D195 /* mjpeg.cpp */, + F9946D82139E1A260072D195 /* mjpeg.h */, + F9946D83139E1A260072D195 /* msrle.cpp */, + F9946D84139E1A260072D195 /* msrle.h */, + F9946D85139E1A260072D195 /* msvideo1.cpp */, + F9946D86139E1A260072D195 /* msvideo1.h */, + F9946D87139E1A260072D195 /* qtrle.cpp */, + F9946D88139E1A260072D195 /* qtrle.h */, + F9946D89139E1A260072D195 /* rpza.cpp */, + F9946D8A139E1A260072D195 /* rpza.h */, + F9946D8B139E1A260072D195 /* smc.cpp */, + F9946D8C139E1A260072D195 /* smc.h */, + F9946D8D139E1A260072D195 /* truemotion1.cpp */, + F9946D8E139E1A260072D195 /* truemotion1.h */, + F9946D8F139E1A260072D195 /* truemotion1data.h */, + ); + name = codecs; + path = ../../video/codecs; + sourceTree = "<group>"; + }; + F9946DCD139E1A9A0072D195 /* mt32 */ = { + isa = PBXGroup; + children = ( + F9946DA3139E1A880072D195 /* freeverb.cpp */, + F9946DA4139E1A880072D195 /* freeverb.h */, + F9946DA5139E1A880072D195 /* i386.cpp */, + F9946DA6139E1A880072D195 /* i386.h */, + F9946DA7139E1A880072D195 /* mt32_file.cpp */, + F9946DA8139E1A880072D195 /* mt32_file.h */, + F9946DA9139E1A880072D195 /* mt32emu.h */, + F9946DAA139E1A880072D195 /* part.cpp */, + F9946DAB139E1A880072D195 /* part.h */, + F9946DAC139E1A880072D195 /* partial.cpp */, + F9946DAD139E1A880072D195 /* partial.h */, + F9946DAE139E1A880072D195 /* partialManager.cpp */, + F9946DAF139E1A880072D195 /* partialManager.h */, + F9946DB0139E1A880072D195 /* structures.h */, + F9946DB1139E1A880072D195 /* synth.cpp */, + F9946DB2139E1A880072D195 /* synth.h */, + F9946DB3139E1A880072D195 /* tables.cpp */, + F9946DB4139E1A880072D195 /* tables.h */, + ); + name = mt32; + sourceTree = "<group>"; + }; + F9946DDF139E1B180072D195 /* posix */ = { + isa = PBXGroup; + children = ( + F9946DE0139E1B180072D195 /* posix-main.cpp */, + F9946DE1139E1B180072D195 /* posix.cpp */, + F9946DE2139E1B180072D195 /* posix.h */, + ); + path = posix; + sourceTree = "<group>"; + }; + F9946DF4139E1BBF0072D195 /* sdl */ = { + isa = PBXGroup; + children = ( + F9946DF5139E1BBF0072D195 /* sdl-mixer.cpp */, + F9946DF6139E1BBF0072D195 /* sdl-mixer.h */, + ); + name = sdl; + path = mixer/sdl; + sourceTree = "<group>"; + }; + F9946DFA139E1BCB0072D195 /* mixer */ = { + isa = PBXGroup; + children = ( + F9946DFB139E1BEB0072D195 /* doublebuffersdl */, + F9946DF4139E1BBF0072D195 /* sdl */, + ); + name = mixer; + sourceTree = "<group>"; + }; + F9946DFB139E1BEB0072D195 /* doublebuffersdl */ = { + isa = PBXGroup; + children = ( + F9946DFC139E1BEB0072D195 /* doublebuffersdl-mixer.cpp */, + F9946DFD139E1BEB0072D195 /* doublebuffersdl-mixer.h */, + ); + name = doublebuffersdl; + path = mixer/doublebuffersdl; + sourceTree = "<group>"; + }; + F9946E01139E1C390072D195 /* sdl */ = { + isa = PBXGroup; + children = ( + F9946E02139E1C390072D195 /* sdl-graphics.cpp */, + F9946E03139E1C390072D195 /* sdl-graphics.h */, + ); + name = sdl; + path = graphics/sdl; + sourceTree = "<group>"; + }; + F9946E07139E1C3E0072D195 /* graphics */ = { + isa = PBXGroup; + children = ( + F9946E01139E1C390072D195 /* sdl */, + ); + name = graphics; + sourceTree = "<group>"; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -8225,7 +8492,6 @@ DFE47BFF0D81F4E900B6D1FB /* consolefont.cpp in Sources */, DFE47C000D81F4E900B6D1FB /* newfont.cpp in Sources */, DFE47C010D81F4E900B6D1FB /* newfont_big.cpp in Sources */, - DFE47C020D81F4E900B6D1FB /* scummfont.cpp in Sources */, DFE47C030D81F4E900B6D1FB /* iff.cpp in Sources */, DFE47C040D81F4E900B6D1FB /* imagedec.cpp in Sources */, DFE47C080D81F4E900B6D1FB /* primitives.cpp in Sources */, @@ -8251,8 +8517,6 @@ DFD518A20DF34B2500854012 /* scalebit.cpp in Sources */, DFD518BC0DF34BA600854012 /* 2xsai.cpp in Sources */, DFD518BD0DF34BA600854012 /* aspect.cpp in Sources */, - DFD518BF0DF34BA600854012 /* hq2x.cpp in Sources */, - DFD518C20DF34BA600854012 /* hq3x.cpp in Sources */, DFD518C50DF34BA600854012 /* scale2x.cpp in Sources */, DFD518C70DF34BA600854012 /* scale3x.cpp in Sources */, DF841FDD0E7BA61800F5680E /* iphone_keyboard.m in Sources */, @@ -9161,7 +9425,6 @@ DF203FA31380C2920056300A /* mjpeg.cpp in Sources */, DF203FA41380C2920056300A /* msrle.cpp in Sources */, DF203FA51380C2920056300A /* msvideo1.cpp in Sources */, - DF203FA61380C2920056300A /* qdm2.cpp in Sources */, DF203FA71380C2920056300A /* qtrle.cpp in Sources */, DF203FA81380C2920056300A /* rpza.cpp in Sources */, DF203FA91380C2920056300A /* smc.cpp in Sources */, @@ -9229,7 +9492,6 @@ DF2041041380CAA40056300A /* pcspk.cpp in Sources */, DF2041051380CAA40056300A /* sid.cpp in Sources */, DF2041061380CAA40056300A /* wave6581.cpp in Sources */, - DF2041071380CAA40056300A /* ym2612.cpp in Sources */, DF46B6F41381E18900D08723 /* coroutine.cpp in Sources */, DF46B7031381E1FF00D08723 /* towns_audio.cpp in Sources */, DF46B7041381E1FF00D08723 /* towns_euphony.cpp in Sources */, @@ -9275,6 +9537,38 @@ DF46B89C1381F6C400D08723 /* null.cpp in Sources */, DFADEBB413820DF500C46364 /* maccursor.cpp in Sources */, DFADEBB813820E0C00C46364 /* posix-fs.cpp in Sources */, + F92B4DCE139DD428000D1BF1 /* quicktime.cpp in Sources */, + F92B4DD3139DD449000D1BF1 /* yuv_to_rgb.cpp in Sources */, + F9946D90139E1A260072D195 /* cdtoons.cpp in Sources */, + F9946D91139E1A260072D195 /* cinepak.cpp in Sources */, + F9946D92139E1A260072D195 /* indeo3.cpp in Sources */, + F9946D93139E1A260072D195 /* mjpeg.cpp in Sources */, + F9946D94139E1A260072D195 /* msrle.cpp in Sources */, + F9946D95139E1A260072D195 /* msvideo1.cpp in Sources */, + F9946D96139E1A260072D195 /* qtrle.cpp in Sources */, + F9946D97139E1A260072D195 /* rpza.cpp in Sources */, + F9946D98139E1A260072D195 /* smc.cpp in Sources */, + F9946D99139E1A260072D195 /* truemotion1.cpp in Sources */, + F9946D9D139E1A560072D195 /* towns_midi.cpp in Sources */, + F9946DA0139E1A560072D195 /* towns_pc98_plugins.cpp in Sources */, + F9946DB5139E1A880072D195 /* freeverb.cpp in Sources */, + F9946DB8139E1A880072D195 /* i386.cpp in Sources */, + F9946DBB139E1A880072D195 /* mt32_file.cpp in Sources */, + F9946DBE139E1A880072D195 /* part.cpp in Sources */, + F9946DC1139E1A880072D195 /* partial.cpp in Sources */, + F9946DC4139E1A880072D195 /* partialManager.cpp in Sources */, + F9946DC7139E1A880072D195 /* synth.cpp in Sources */, + F9946DCA139E1A880072D195 /* tables.cpp in Sources */, + F9946DD6139E1AD30072D195 /* aac.cpp in Sources */, + F9946DD9139E1AD30072D195 /* qdm2.cpp in Sources */, + F9946DDC139E1AD30072D195 /* quicktime.cpp in Sources */, + F9946DE3139E1B180072D195 /* posix-main.cpp in Sources */, + F9946DE6139E1B180072D195 /* posix.cpp in Sources */, + F9946DEC139E1B6F0072D195 /* downscaler.cpp in Sources */, + F9946DF1139E1BA00072D195 /* console.cpp in Sources */, + F9946DF7139E1BBF0072D195 /* sdl-mixer.cpp in Sources */, + F9946DFE139E1BEB0072D195 /* doublebuffersdl-mixer.cpp in Sources */, + F9946E04139E1C390072D195 /* sdl-graphics.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -9310,7 +9604,6 @@ DF093E9C0F63CB26002D821E /* consolefont.cpp in Sources */, DF093E9D0F63CB26002D821E /* newfont.cpp in Sources */, DF093E9E0F63CB26002D821E /* newfont_big.cpp in Sources */, - DF093E9F0F63CB26002D821E /* scummfont.cpp in Sources */, DF093EA00F63CB26002D821E /* iff.cpp in Sources */, DF093EA10F63CB26002D821E /* imagedec.cpp in Sources */, DF093EA20F63CB26002D821E /* primitives.cpp in Sources */, @@ -9335,8 +9628,6 @@ DF093ED90F63CB26002D821E /* scalebit.cpp in Sources */, DF093EDA0F63CB26002D821E /* 2xsai.cpp in Sources */, DF093EDB0F63CB26002D821E /* aspect.cpp in Sources */, - DF093EDC0F63CB26002D821E /* hq2x.cpp in Sources */, - DF093EDD0F63CB26002D821E /* hq3x.cpp in Sources */, DF093EDE0F63CB26002D821E /* scale2x.cpp in Sources */, DF093EDF0F63CB26002D821E /* scale3x.cpp in Sources */, DF093EE20F63CB26002D821E /* agi.cpp in Sources */, @@ -10244,7 +10535,6 @@ DF203F981380C2920056300A /* mjpeg.cpp in Sources */, DF203F991380C2920056300A /* msrle.cpp in Sources */, DF203F9A1380C2920056300A /* msvideo1.cpp in Sources */, - DF203F9B1380C2920056300A /* qdm2.cpp in Sources */, DF203F9C1380C2920056300A /* qtrle.cpp in Sources */, DF203F9D1380C2920056300A /* rpza.cpp in Sources */, DF203F9E1380C2920056300A /* smc.cpp in Sources */, @@ -10312,7 +10602,6 @@ DF2040FA1380CAA40056300A /* pcspk.cpp in Sources */, DF2040FB1380CAA40056300A /* sid.cpp in Sources */, DF2040FC1380CAA40056300A /* wave6581.cpp in Sources */, - DF2040FD1380CAA40056300A /* ym2612.cpp in Sources */, DF46B6F31381E18900D08723 /* coroutine.cpp in Sources */, DF46B6FF1381E1FF00D08723 /* towns_audio.cpp in Sources */, DF46B7001381E1FF00D08723 /* towns_euphony.cpp in Sources */, @@ -10360,6 +10649,30 @@ DF46B89B1381F6C400D08723 /* null.cpp in Sources */, DFADEBB313820DF500C46364 /* maccursor.cpp in Sources */, DFADEBB713820E0C00C46364 /* posix-fs.cpp in Sources */, + F92B4DCF139DD428000D1BF1 /* quicktime.cpp in Sources */, + F92B4DD4139DD449000D1BF1 /* yuv_to_rgb.cpp in Sources */, + F92B4DDA139DDC92000D1BF1 /* macosx-main.cpp in Sources */, + F92B4DDB139DDC92000D1BF1 /* macosx.cpp in Sources */, + F9946D9E139E1A560072D195 /* towns_midi.cpp in Sources */, + F9946DA1139E1A560072D195 /* towns_pc98_plugins.cpp in Sources */, + F9946DB6139E1A880072D195 /* freeverb.cpp in Sources */, + F9946DB9139E1A880072D195 /* i386.cpp in Sources */, + F9946DBC139E1A880072D195 /* mt32_file.cpp in Sources */, + F9946DBF139E1A880072D195 /* part.cpp in Sources */, + F9946DC2139E1A880072D195 /* partial.cpp in Sources */, + F9946DC5139E1A880072D195 /* partialManager.cpp in Sources */, + F9946DC8139E1A880072D195 /* synth.cpp in Sources */, + F9946DCB139E1A880072D195 /* tables.cpp in Sources */, + F9946DD7139E1AD30072D195 /* aac.cpp in Sources */, + F9946DDA139E1AD30072D195 /* qdm2.cpp in Sources */, + F9946DDD139E1AD30072D195 /* quicktime.cpp in Sources */, + F9946DE4139E1B180072D195 /* posix-main.cpp in Sources */, + F9946DE7139E1B180072D195 /* posix.cpp in Sources */, + F9946DED139E1B6F0072D195 /* downscaler.cpp in Sources */, + F9946DF2139E1BA00072D195 /* console.cpp in Sources */, + F9946DF8139E1BBF0072D195 /* sdl-mixer.cpp in Sources */, + F9946DFF139E1BEB0072D195 /* doublebuffersdl-mixer.cpp in Sources */, + F9946E05139E1C390072D195 /* sdl-graphics.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -10396,7 +10709,6 @@ DFF959320FB22D5700A3EC78 /* consolefont.cpp in Sources */, DFF959330FB22D5700A3EC78 /* newfont.cpp in Sources */, DFF959340FB22D5700A3EC78 /* newfont_big.cpp in Sources */, - DFF959350FB22D5700A3EC78 /* scummfont.cpp in Sources */, DFF959360FB22D5700A3EC78 /* iff.cpp in Sources */, DFF959370FB22D5700A3EC78 /* imagedec.cpp in Sources */, DFF959380FB22D5700A3EC78 /* primitives.cpp in Sources */, @@ -10422,8 +10734,6 @@ DFF9596F0FB22D5700A3EC78 /* scalebit.cpp in Sources */, DFF959700FB22D5700A3EC78 /* 2xsai.cpp in Sources */, DFF959710FB22D5700A3EC78 /* aspect.cpp in Sources */, - DFF959720FB22D5700A3EC78 /* hq2x.cpp in Sources */, - DFF959730FB22D5700A3EC78 /* hq3x.cpp in Sources */, DFF959740FB22D5700A3EC78 /* scale2x.cpp in Sources */, DFF959750FB22D5700A3EC78 /* scale3x.cpp in Sources */, DFF959760FB22D5700A3EC78 /* iphone_keyboard.m in Sources */, @@ -11332,7 +11642,6 @@ DF203FAE1380C2920056300A /* mjpeg.cpp in Sources */, DF203FAF1380C2920056300A /* msrle.cpp in Sources */, DF203FB01380C2920056300A /* msvideo1.cpp in Sources */, - DF203FB11380C2920056300A /* qdm2.cpp in Sources */, DF203FB21380C2920056300A /* qtrle.cpp in Sources */, DF203FB31380C2920056300A /* rpza.cpp in Sources */, DF203FB41380C2920056300A /* smc.cpp in Sources */, @@ -11400,7 +11709,6 @@ DF20410E1380CAA40056300A /* pcspk.cpp in Sources */, DF20410F1380CAA40056300A /* sid.cpp in Sources */, DF2041101380CAA40056300A /* wave6581.cpp in Sources */, - DF2041111380CAA40056300A /* ym2612.cpp in Sources */, DF46B6F51381E18900D08723 /* coroutine.cpp in Sources */, DF46B7071381E1FF00D08723 /* towns_audio.cpp in Sources */, DF46B7081381E1FF00D08723 /* towns_euphony.cpp in Sources */, @@ -11446,6 +11754,28 @@ DF46B89D1381F6C400D08723 /* null.cpp in Sources */, DFADEBB513820DF500C46364 /* maccursor.cpp in Sources */, DFADEBB913820E0C00C46364 /* posix-fs.cpp in Sources */, + F92B4DD0139DD428000D1BF1 /* quicktime.cpp in Sources */, + F92B4DD5139DD449000D1BF1 /* yuv_to_rgb.cpp in Sources */, + F9946D9F139E1A560072D195 /* towns_midi.cpp in Sources */, + F9946DA2139E1A560072D195 /* towns_pc98_plugins.cpp in Sources */, + F9946DB7139E1A880072D195 /* freeverb.cpp in Sources */, + F9946DBA139E1A880072D195 /* i386.cpp in Sources */, + F9946DBD139E1A880072D195 /* mt32_file.cpp in Sources */, + F9946DC0139E1A880072D195 /* part.cpp in Sources */, + F9946DC3139E1A880072D195 /* partial.cpp in Sources */, + F9946DC6139E1A880072D195 /* partialManager.cpp in Sources */, + F9946DC9139E1A880072D195 /* synth.cpp in Sources */, + F9946DCC139E1A880072D195 /* tables.cpp in Sources */, + F9946DD8139E1AD30072D195 /* aac.cpp in Sources */, + F9946DDB139E1AD30072D195 /* qdm2.cpp in Sources */, + F9946DDE139E1AD30072D195 /* quicktime.cpp in Sources */, + F9946DE5139E1B180072D195 /* posix-main.cpp in Sources */, + F9946DE8139E1B180072D195 /* posix.cpp in Sources */, + F9946DEE139E1B6F0072D195 /* downscaler.cpp in Sources */, + F9946DF3139E1BA00072D195 /* console.cpp in Sources */, + F9946DF9139E1BBF0072D195 /* sdl-mixer.cpp in Sources */, + F9946E00139E1BEB0072D195 /* doublebuffersdl-mixer.cpp in Sources */, + F9946E06139E1C3A0072D195 /* sdl-graphics.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -11474,7 +11804,7 @@ GCC_PREPROCESSOR_DEFINITIONS = ( IPHONE_OFFICIAL, IPHONE, - UNIX, + POSIX, ENABLE_SCUMM, ENABLE_SCUMM_7_8, ENABLE_HE, @@ -11507,6 +11837,7 @@ USE_VORBIS, USE_ZLIB, USE_TREMOR, + USE_TRANSLATION, ); GCC_THUMB_SUPPORT = NO; GCC_UNROLL_LOOPS = YES; @@ -11553,7 +11884,7 @@ GCC_PREPROCESSOR_DEFINITIONS = ( IPHONE_OFFICIAL, IPHONE, - UNIX, + POSIX, ENABLE_SCUMM, ENABLE_SCUMM_7_8, ENABLE_HE, @@ -11586,6 +11917,7 @@ USE_VORBIS, USE_ZLIB, USE_TREMOR, + USE_TRANSLATION, ); GCC_THUMB_SUPPORT = NO; GCC_UNROLL_LOOPS = YES; @@ -11643,6 +11975,7 @@ SDKROOT = ""; TARGETED_DEVICE_FAMILY = "1,2"; VALID_ARCHS = "i386 ppc ppc64 x86_64 armv6 armv7"; + WARNING_CFLAGS = "-Wno-multichar"; }; name = Debug; }; @@ -11676,6 +12009,7 @@ SDKROOT = ""; TARGETED_DEVICE_FAMILY = "1,2"; VALID_ARCHS = "i386 ppc ppc64 x86_64 armv6 armv7"; + WARNING_CFLAGS = "-Wno-multichar"; }; name = Release; }; @@ -11695,7 +12029,7 @@ GCC_PREPROCESSOR_DEFINITIONS = ( MACOSX, SDL_BACKEND, - UNIX, + POSIX, ENABLE_SCUMM, ENABLE_SCUMM_7_8, ENABLE_HE, @@ -11724,9 +12058,9 @@ ENABLE_TUCKER, USE_FLAC, USE_MAD, - USE_MPEG2, USE_VORBIS, USE_ZLIB, + USE_TRANSLATION, ); GCC_VERSION = ""; HEADER_SEARCH_PATHS = ( @@ -11758,8 +12092,9 @@ ); PREBINDING = NO; PRODUCT_NAME = ScummVM; - SDKROOT = macosx10.5; + SDKROOT = ""; VALID_ARCHS = "i386 ppc ppc64 x86_64"; + WARNING_CFLAGS = "-Wno-multichar"; }; name = Debug; }; @@ -11777,7 +12112,7 @@ GCC_PREPROCESSOR_DEFINITIONS = ( MACOSX, SDL_BACKEND, - UNIX, + POSIX, ENABLE_SCUMM, ENABLE_SCUMM_7_8, ENABLE_HE, @@ -11806,9 +12141,9 @@ ENABLE_TUCKER, USE_FLAC, USE_MAD, - USE_MPEG2, USE_VORBIS, USE_ZLIB, + USE_TRANSLATION, ); GCC_VERSION = ""; HEADER_SEARCH_PATHS = ( @@ -11840,8 +12175,9 @@ ); PREBINDING = NO; PRODUCT_NAME = ScummVM; - SDKROOT = macosx10.5; + SDKROOT = ""; VALID_ARCHS = "i386 ppc ppc64 x86_64"; + WARNING_CFLAGS = "-Wno-multichar"; WRAPPER_EXTENSION = app; }; name = Release; diff --git a/dists/redhat/README b/dists/redhat/README index 9c1cccf6df..d1cef06632 100644 --- a/dists/redhat/README +++ b/dists/redhat/README @@ -8,9 +8,9 @@ adapt the below instructions where necessary. 1) Collect sources: -Place scummvm-%{version}.tar.bz2, libmad-0.15.1b.tar.bz2 and -mpeg2dec-0.4.0b.tar.bz2 in /usr/src/redhat/SOURCES . -If you have different versions of mpeg2dec or libmad, put the correct version +Place scummvm-%{version}.tar.bz2 and libmad-0.15.1b.tar.bz2 +in /usr/src/redhat/SOURCES . +If you have a different version of libmad, put the correct version numbers in the .spec file. Place scummvm.spec in /usr/src/redhat/SPECS . @@ -28,8 +28,7 @@ the source RPM in /usr/src/redhat/SRPMS -Note: libmad and mpeg2dec are statically linked into the scummvm binary -because Fedora does not carry libmad and mpeg2dec packages, so I did not +Note: libmad is statically linked into the scummvm binary +because Fedora does not carry a libmad package, so I did not want to make the scummvm package depend on them. -You can get libmad from http://www.underbit.com/products/mad/ -and mpeg2dec from http://libmpeg2.sourceforge.net/ . +You can get libmad from http://www.underbit.com/products/mad/ . diff --git a/dists/samsungtv/README-SamsungTV b/dists/samsungtv/README-SamsungTV new file mode 100644 index 0000000000..26ded6c7e6 --- /dev/null +++ b/dists/samsungtv/README-SamsungTV @@ -0,0 +1,17 @@ +Notes: + +- Should works on 2009 B series TVs (Full HD): LExxBE65x, LExxBE75x, PSxxB65x, UExxB7xxx, UExxB8xxx, PSxxB85x, LAxxB65x, LAxxB75x, UNxxB7xxx, UAxxB8xxx +- To allow use mouse and keyboard you need load extension first: "SamyGO Mouse And Keyboard" + Download from SamyGO project and run from Content Library: + http://sourceforge.net/projects/samygo/files/SamyGO%20Kernel%20Modules/SamyGO%20Mouse%20and%20Keyboard%20Modules%20v0.01.zip/download +- Buttons on remote controler: EXIT, SOURCE, P+, P-, TV, POWER, CONTENT - cause immediately exit from ScummVM +- Config file is in /mtd_rwarea/.scummvmrc +- Saves are stored in '/mtd_wiselink/scummvm savegames' directory +- Audio is delayed a upto one second, it's TV software issue :/ +- Do not use 3x scalers, they are not fit in TV display frame buffer and you get gfx glitches + +Remote Controler buttons: + +GREEN - emulate key F5 +YELLOW - emulate key F7 - virtual keyboard +BLUE and RETURN - emulate key ESC diff --git a/engines/advancedDetector.cpp b/engines/advancedDetector.cpp index 6874806bc7..d864fe8b52 100644 --- a/engines/advancedDetector.cpp +++ b/engines/advancedDetector.cpp @@ -20,9 +20,6 @@ * */ -// FIXME: Avoid using printf -#define FORBIDDEN_SYMBOL_EXCEPTION_printf - #include "common/debug.h" #include "common/util.h" #include "common/hash-str.h" @@ -30,115 +27,12 @@ #include "common/macresman.h" #include "common/md5.h" #include "common/config-manager.h" +#include "common/system.h" #include "common/textconsole.h" +#include "common/translation.h" #include "engines/advancedDetector.h" - -/** - * A list of pointers to ADGameDescription structs (or subclasses thereof). - */ -typedef Common::Array<const ADGameDescription*> ADGameDescList; - - -/** - * Detect games in specified directory. - * Parameters language and platform are used to pass on values - * specified by the user. I.e. this is used to restrict search scope. - * - * @param fslist FSList to scan or NULL for scanning all specified - * default directories. - * @param params a ADParams struct containing various parameters - * @param language restrict results to specified language only - * @param platform restrict results to specified platform only - * @return list of ADGameDescription (or subclass) pointers corresponding to matched games - */ -static ADGameDescList detectGame(const Common::FSList &fslist, const ADParams ¶ms, Common::Language language, Common::Platform platform, const Common::String &extra); - - -/** - * Returns list of targets supported by the engine. - * Distinguishes engines with single ID - */ -static GameList gameIDList(const ADParams ¶ms) { - if (params.singleid != NULL) { - GameList gl; - - const PlainGameDescriptor *g = params.list; - while (g->gameid) { - if (0 == scumm_stricmp(params.singleid, g->gameid)) { - gl.push_back(GameDescriptor(g->gameid, g->description)); - - return gl; - } - g++; - } - error("Engine %s doesn't have its singleid specified in ids list", params.singleid); - } - - return GameList(params.list); -} - -static void upgradeTargetIfNecessary(const ADParams ¶ms) { - if (params.obsoleteList == 0) - return; - - Common::String gameid = ConfMan.get("gameid"); - - for (const ADObsoleteGameID *o = params.obsoleteList; o->from; ++o) { - if (gameid.equalsIgnoreCase(o->from)) { - gameid = o->to; - ConfMan.set("gameid", gameid); - - if (o->platform != Common::kPlatformUnknown) - ConfMan.set("platform", Common::getPlatformCode(o->platform)); - - warning("Target upgraded from %s to %s", o->from, o->to); - - // WORKAROUND: Fix for bug #1719463: "DETECTOR: Launching - // undefined target adds launcher entry" - if (ConfMan.hasKey("id_came_from_command_line")) { - warning("Target came from command line. Skipping save"); - } else { - ConfMan.flushToDisk(); - } - break; - } - } -} - -namespace AdvancedDetector { - -GameDescriptor findGameID( - const char *gameid, - const PlainGameDescriptor *list, - const ADObsoleteGameID *obsoleteList - ) { - // First search the list of supported game IDs for a match. - const PlainGameDescriptor *g = findPlainGameDescriptor(gameid, list); - if (g) - return GameDescriptor(*g); - - // If we didn't find the gameid in the main list, check if it - // is an obsolete game id. - if (obsoleteList != 0) { - const ADObsoleteGameID *o = obsoleteList; - while (o->from) { - if (0 == scumm_stricmp(gameid, o->from)) { - g = findPlainGameDescriptor(o->to, list); - if (g && g->description) - return GameDescriptor(gameid, "Obsolete game ID (" + Common::String(g->description) + ")"); - else - return GameDescriptor(gameid, "Obsolete game ID"); - } - o++; - } - } - - // No match found - return GameDescriptor(); -} - -} // End of namespace AdvancedDetector +#include "engines/obsolete.h" static GameDescriptor toGameDescriptor(const ADGameDescription &g, const PlainGameDescriptor *sg) { const char *title = 0; @@ -157,7 +51,13 @@ static GameDescriptor toGameDescriptor(const ADGameDescription &g, const PlainGa extra = g.extra; } - GameDescriptor gd(g.gameid, title, g.language, g.platform); + GameSupportLevel gsl = kStableGame; + if (g.flags & ADGF_UNSTABLE) + gsl = kUnstableGame; + else if (g.flags & ADGF_TESTING) + gsl = kTestingGame; + + GameDescriptor gd(g.gameid, title, g.language, g.platform, 0, gsl); gd.updateDesc(extra); return gd; } @@ -190,23 +90,21 @@ static Common::String generatePreferredTarget(const Common::String &id, const AD return res; } -static void updateGameDescriptor(GameDescriptor &desc, const ADGameDescription *realDesc, const ADParams ¶ms) { - if (params.singleid != NULL) { +void AdvancedMetaEngine::updateGameDescriptor(GameDescriptor &desc, const ADGameDescription *realDesc) const { + if (_singleid != NULL) { desc["preferredtarget"] = desc["gameid"]; - desc["gameid"] = params.singleid; + desc["gameid"] = _singleid; } - if (!(params.flags & kADFlagDontAugmentPreferredTarget)) { - if (!desc.contains("preferredtarget")) - desc["preferredtarget"] = desc["gameid"]; + if (!desc.contains("preferredtarget")) + desc["preferredtarget"] = desc["gameid"]; - desc["preferredtarget"] = generatePreferredTarget(desc["preferredtarget"], realDesc); - } + desc["preferredtarget"] = generatePreferredTarget(desc["preferredtarget"], realDesc); - if (params.flags & kADFlagUseExtraAsHint) + if (_flags & kADFlagUseExtraAsHint) desc["extra"] = realDesc->extra; - desc.setGUIOptions(realDesc->guioptions | params.guioptions); + desc.setGUIOptions(realDesc->guioptions | _guioptions); desc.appendGUIOptions(getGameGUIOptionsDescriptionLanguage(realDesc->language)); if (realDesc->flags & ADGF_ADDENGLISH) @@ -214,7 +112,7 @@ static void updateGameDescriptor(GameDescriptor &desc, const ADGameDescription * } bool cleanupPirated(ADGameDescList &matched) { - // OKay, now let's sense presense of pirated games + // OKay, now let's sense presence of pirated games if (!matched.empty()) { for (uint j = 0; j < matched.size();) { if (matched[j]->flags & ADGF_PIRATED) @@ -225,9 +123,7 @@ bool cleanupPirated(ADGameDescList &matched) { // We ruled out all variants and now have nothing if (matched.empty()) { - - warning("Illegitimate copy of the game detected. We give no support in such cases %d", matched.size()); - + warning("Illegitimate game copy detected. We give no support in such cases %d", matched.size()); return true; } } @@ -237,25 +133,33 @@ bool cleanupPirated(ADGameDescList &matched) { GameList AdvancedMetaEngine::detectGames(const Common::FSList &fslist) const { - ADGameDescList matches = detectGame(fslist, params, Common::UNK_LANG, Common::kPlatformUnknown, ""); + ADGameDescList matches; GameList detectedGames; + FileMap allFiles; - if (cleanupPirated(matches)) + if (fslist.empty()) return detectedGames; + // Compose a hashmap of all files in fslist. + composeFileHashMap(allFiles, fslist, (_maxScanDepth == 0 ? 1 : _maxScanDepth)); + + // Run the detector on this + matches = detectGame(fslist.begin()->getParent(), allFiles, Common::UNK_LANG, Common::kPlatformUnknown, ""); + if (matches.empty()) { // Use fallback detector if there were no matches by other means - const ADGameDescription *fallbackDesc = fallbackDetect(fslist); + const ADGameDescription *fallbackDesc = fallbackDetect(allFiles, fslist); if (fallbackDesc != 0) { - GameDescriptor desc(toGameDescriptor(*fallbackDesc, params.list)); - updateGameDescriptor(desc, fallbackDesc, params); + GameDescriptor desc(toGameDescriptor(*fallbackDesc, _gameids)); + updateGameDescriptor(desc, fallbackDesc); detectedGames.push_back(desc); } } else { // Otherwise use the found matches + cleanupPirated(matches); for (uint i = 0; i < matches.size(); i++) { - GameDescriptor desc(toGameDescriptor(*matches[i], params.list)); - updateGameDescriptor(desc, matches[i], params); + GameDescriptor desc(toGameDescriptor(*matches[i], _gameids)); + updateGameDescriptor(desc, matches[i]); detectedGames.push_back(desc); } } @@ -265,7 +169,6 @@ GameList AdvancedMetaEngine::detectGames(const Common::FSList &fslist) const { Common::Error AdvancedMetaEngine::createInstance(OSystem *syst, Engine **engine) const { assert(engine); - upgradeTargetIfNecessary(params); const ADGameDescription *agdDesc = 0; Common::Language language = Common::UNK_LANG; @@ -276,9 +179,10 @@ Common::Error AdvancedMetaEngine::createInstance(OSystem *syst, Engine **engine) language = Common::parseLanguage(ConfMan.get("language")); if (ConfMan.hasKey("platform")) platform = Common::parsePlatform(ConfMan.get("platform")); - if (params.flags & kADFlagUseExtraAsHint) + if (_flags & kADFlagUseExtraAsHint) { if (ConfMan.hasKey("extra")) extra = ConfMan.get("extra"); + } Common::String gameid = ConfMan.get("gameid"); @@ -308,12 +212,21 @@ Common::Error AdvancedMetaEngine::createInstance(OSystem *syst, Engine **engine) return Common::kNoGameDataFoundError; } - ADGameDescList matches = detectGame(files, params, language, platform, extra); + if (files.empty()) + return Common::kNoGameDataFoundError; + + // Compose a hashmap of all files in fslist. + FileMap allFiles; + composeFileHashMap(allFiles, files, (_maxScanDepth == 0 ? 1 : _maxScanDepth)); + + // Run the detector on this + ADGameDescList matches = detectGame(files.begin()->getParent(), allFiles, language, platform, extra); if (cleanupPirated(matches)) return Common::kNoGameDataFoundError; - if (params.singleid == NULL) { + if (_singleid == NULL) { + // Find the first match with correct gameid. for (uint i = 0; i < matches.size(); i++) { if (matches[i]->gameid == gameid) { agdDesc = matches[i]; @@ -326,11 +239,11 @@ Common::Error AdvancedMetaEngine::createInstance(OSystem *syst, Engine **engine) if (agdDesc == 0) { // Use fallback detector if there were no matches by other means - agdDesc = fallbackDetect(files); + agdDesc = fallbackDetect(allFiles, files); if (agdDesc != 0) { // Seems we found a fallback match. But first perform a basic // sanity check: the gameid must match. - if (params.singleid == NULL && agdDesc->gameid != gameid) + if (_singleid == NULL && agdDesc->gameid != gameid) agdDesc = 0; } } @@ -344,10 +257,23 @@ Common::Error AdvancedMetaEngine::createInstance(OSystem *syst, Engine **engine) if (agdDesc->flags & ADGF_ADDENGLISH) lang += " " + getGameGUIOptionsDescriptionLanguage(Common::EN_ANY); - Common::updateGameGUIOptions(agdDesc->guioptions | params.guioptions, lang); + Common::updateGameGUIOptions(agdDesc->guioptions | _guioptions, lang); + + GameDescriptor gameDescriptor = toGameDescriptor(*agdDesc, _gameids); + + bool showTestingWarning = false; + +#ifdef RELEASE_BUILD + showTestingWarning = true; +#endif + if (((gameDescriptor.getSupportLevel() == kUnstableGame + || (gameDescriptor.getSupportLevel() == kTestingGame + && showTestingWarning))) + && !Engine::warnUserAboutUnsupportedGame()) + return Common::kUserCanceled; - debug(2, "Running %s", toGameDescriptor(*agdDesc, params.list).description().c_str()); + debug(2, "Running %s", gameDescriptor.description().c_str()); if (!createInstance(syst, engine, agdDesc)) return Common::kNoGameDataFoundError; else @@ -360,7 +286,6 @@ struct SizeMD5 { }; typedef Common::HashMap<Common::String, SizeMD5, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> SizeMD5Map; -typedef Common::HashMap<Common::String, Common::FSNode, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> FileMap; static void reportUnknown(const Common::FSNode &path, const SizeMD5Map &filesSizeMD5) { // TODO: This message should be cleaned up / made more specific. @@ -368,36 +293,36 @@ static void reportUnknown(const Common::FSNode &path, const SizeMD5Map &filesSiz // // Might also be helpful to display the full path (for when this is used // from the mass detector). - printf("The game in '%s' seems to be unknown.\n", path.getPath().c_str()); - printf("Please, report the following data to the ScummVM team along with name\n"); - printf("of the game you tried to add and its version/language/etc.:\n"); + Common::String report = Common::String::format(_("The game in '%s' seems to be unknown."), path.getPath().c_str()) + "\n"; + report += _("Please, report the following data to the ScummVM team along with name"); + report += "\n"; + report += _("of the game you tried to add and its version/language/etc.:"); + report += "\n"; for (SizeMD5Map::const_iterator file = filesSizeMD5.begin(); file != filesSizeMD5.end(); ++file) - printf(" {\"%s\", 0, \"%s\", %d},\n", file->_key.c_str(), file->_value.md5.c_str(), file->_value.size); + report += Common::String::format(" {\"%s\", 0, \"%s\", %d},\n", file->_key.c_str(), file->_value.md5.c_str(), file->_value.size); - printf("\n"); -} + report += "\n"; -static ADGameDescList detectGameFilebased(const FileMap &allFiles, const ADParams ¶ms); + g_system->logMessage(LogMessageType::kInfo, report.c_str()); +} -static void composeFileHashMap(const Common::FSList &fslist, FileMap &allFiles, int depth, const char * const *directoryGlobs) { +void AdvancedMetaEngine::composeFileHashMap(FileMap &allFiles, const Common::FSList &fslist, int depth) const { if (depth <= 0) return; if (fslist.empty()) return; - // First we compose a hashmap of all files in fslist. - // Includes nifty stuff like removing trailing dots and ignoring case. for (Common::FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { if (file->isDirectory()) { Common::FSList files; - if (!directoryGlobs) + if (!_directoryGlobs) continue; bool matched = false; - for (const char * const *glob = directoryGlobs; *glob; glob++) + for (const char * const *glob = _directoryGlobs; *glob; glob++) if (file->getName().matchString(*glob, true)) { matched = true; break; @@ -409,7 +334,7 @@ static void composeFileHashMap(const Common::FSList &fslist, FileMap &allFiles, if (!file->getChildren(files, Common::FSNode::kListAll)) continue; - composeFileHashMap(files, allFiles, depth - 1, directoryGlobs); + composeFileHashMap(allFiles, files, depth - 1); } Common::String tstr = file->getName(); @@ -422,26 +347,18 @@ static void composeFileHashMap(const Common::FSList &fslist, FileMap &allFiles, } } -static ADGameDescList detectGame(const Common::FSList &fslist, const ADParams ¶ms, Common::Language language, Common::Platform platform, const Common::String &extra) { - FileMap allFiles; +ADGameDescList AdvancedMetaEngine::detectGame(const Common::FSNode &parent, const FileMap &allFiles, Common::Language language, Common::Platform platform, const Common::String &extra) const { SizeMD5Map filesSizeMD5; const ADGameFileDescription *fileDesc; const ADGameDescription *g; const byte *descPtr; - if (fslist.empty()) - return ADGameDescList(); - Common::FSNode parent = fslist.begin()->getParent(); debug(3, "Starting detection in dir '%s'", parent.getPath().c_str()); - // First we compose a hashmap of all files in fslist. - // Includes nifty stuff like removing trailing dots and ignoring case. - composeFileHashMap(fslist, allFiles, (params.depth == 0 ? 1 : params.depth), params.directoryGlobs); - - // Check which files are included in some ADGameDescription *and* present - // in fslist. Compute MD5s and file sizes for these files. - for (descPtr = params.descs; ((const ADGameDescription *)descPtr)->gameid != 0; descPtr += params.descItemSize) { + // Check which files are included in some ADGameDescription *and* are present. + // Compute MD5s and file sizes for these files. + for (descPtr = _gameDescriptors; ((const ADGameDescription *)descPtr)->gameid != 0; descPtr += _descItemSize) { g = (const ADGameDescription *)descPtr; for (fileDesc = g->filesDescriptions; fileDesc->fileName; fileDesc++) { @@ -455,16 +372,14 @@ static ADGameDescList detectGame(const Common::FSList &fslist, const ADParams &p // file and as one with resource fork. if (g->flags & ADGF_MACRESFORK) { - Common::MacResManager *macResMan = new Common::MacResManager(); + Common::MacResManager macResMan; - if (macResMan->open(parent, fname)) { - tmp.md5 = macResMan->computeResForkMD5AsString(params.md5Bytes); - tmp.size = macResMan->getResForkDataSize(); + if (macResMan.open(parent, fname)) { + tmp.md5 = macResMan.computeResForkMD5AsString(_md5Bytes); + tmp.size = macResMan.getResForkDataSize(); debug(3, "> '%s': '%s'", fname.c_str(), tmp.md5.c_str()); filesSizeMD5[fname] = tmp; } - - delete macResMan; } else { if (allFiles.contains(fname)) { debug(3, "+ %s", fname.c_str()); @@ -473,7 +388,7 @@ static ADGameDescList detectGame(const Common::FSList &fslist, const ADParams &p if (testFile.open(allFiles[fname])) { tmp.size = (int32)testFile.size(); - tmp.md5 = Common::computeStreamMD5AsString(testFile, params.md5Bytes); + tmp.md5 = Common::computeStreamMD5AsString(testFile, _md5Bytes); } else { tmp.size = -1; } @@ -491,7 +406,7 @@ static ADGameDescList detectGame(const Common::FSList &fslist, const ADParams &p // MD5 based matching uint i; - for (i = 0, descPtr = params.descs; ((const ADGameDescription *)descPtr)->gameid != 0; descPtr += params.descItemSize, ++i) { + for (i = 0, descPtr = _gameDescriptors; ((const ADGameDescription *)descPtr)->gameid != 0; descPtr += _descItemSize, ++i) { g = (const ADGameDescription *)descPtr; bool fileMissing = false; @@ -503,7 +418,7 @@ static ADGameDescList detectGame(const Common::FSList &fslist, const ADParams &p continue; } - if ((params.flags & kADFlagUseExtraAsHint) && !extra.empty() && g->extra != extra) + if ((_flags & kADFlagUseExtraAsHint) && !extra.empty() && g->extra != extra) continue; bool allFilesPresent = true; @@ -576,28 +491,20 @@ static ADGameDescList detectGame(const Common::FSList &fslist, const ADParams &p } // Filename based fallback - if (params.fileBasedFallback != 0) - matched = detectGameFilebased(allFiles, params); } return matched; } -/** - * Check for each ADFileBasedFallback record whether all files listed - * in it are present. If multiple pass this test, we pick the one with - * the maximal number of matching files. In case of a tie, the entry - * coming first in the list is chosen. - */ -static ADGameDescList detectGameFilebased(const FileMap &allFiles, const ADParams ¶ms) { +const ADGameDescription *AdvancedMetaEngine::detectGameFilebased(const FileMap &allFiles, const ADFileBasedFallback *fileBasedFallback) const { const ADFileBasedFallback *ptr; const char* const* filenames; int maxNumMatchedFiles = 0; const ADGameDescription *matchedDesc = 0; - for (ptr = params.fileBasedFallback; ptr->desc; ++ptr) { - const ADGameDescription *agdesc = (const ADGameDescription *)ptr->desc; + for (ptr = fileBasedFallback; ptr->desc; ++ptr) { + const ADGameDescription *agdesc = ptr->desc; int numMatchedFiles = 0; bool fileMissing = false; @@ -623,24 +530,45 @@ static ADGameDescList detectGameFilebased(const FileMap &allFiles, const ADParam } } - ADGameDescList matched; + return matchedDesc; +} + +GameList AdvancedMetaEngine::getSupportedGames() const { + if (_singleid != NULL) { + GameList gl; + + const PlainGameDescriptor *g = _gameids; + while (g->gameid) { + if (0 == scumm_stricmp(_singleid, g->gameid)) { + gl.push_back(GameDescriptor(g->gameid, g->description)); - if (matchedDesc) { // We got a match - matched.push_back(matchedDesc); - if (params.flags & kADFlagPrintWarningOnFileBasedFallback) { - printf("Your game version has been detected using filename matching as a\n"); - printf("variant of %s.\n", matchedDesc->gameid); - printf("If this is an original and unmodified version, please report any\n"); - printf("information previously printed by ScummVM to the team.\n"); + return gl; + } + g++; } + error("Engine %s doesn't have its singleid specified in ids list", _singleid); } - return matched; + return GameList(_gameids); } -GameList AdvancedMetaEngine::getSupportedGames() const { - return gameIDList(params); -} GameDescriptor AdvancedMetaEngine::findGame(const char *gameid) const { - return AdvancedDetector::findGameID(gameid, params.list, params.obsoleteList); + // First search the list of supported gameids for a match. + const PlainGameDescriptor *g = findPlainGameDescriptor(gameid, _gameids); + if (g) + return GameDescriptor(*g); + + // No match found + return GameDescriptor(); +} + +AdvancedMetaEngine::AdvancedMetaEngine(const void *descs, uint descItemSize, const PlainGameDescriptor *gameids) + : _gameDescriptors((const byte *)descs), _descItemSize(descItemSize), _gameids(gameids) { + + _md5Bytes = 5000; + _singleid = NULL; + _flags = 0; + _guioptions = Common::GUIO_NONE; + _maxScanDepth = 1; + _directoryGlobs = NULL; } diff --git a/engines/advancedDetector.h b/engines/advancedDetector.h index 6ee0822f47..cbdfdf39d8 100644 --- a/engines/advancedDetector.h +++ b/engines/advancedDetector.h @@ -19,38 +19,59 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ + #ifndef ENGINES_ADVANCED_DETECTOR_H #define ENGINES_ADVANCED_DETECTOR_H #include "engines/metaengine.h" +#include "engines/engine.h" namespace Common { class Error; class FSList; } - +/** + * A record describing a file to be matched for detecting a specific game + * variant. A list of such records is used inside every ADGameDescription to + * enable detection. + */ struct ADGameFileDescription { - const char *fileName; - uint16 fileType; // Optional. Not used during detection, only by engines. - const char *md5; // Optional. May be NULL. - int32 fileSize; // Optional. Set to -1 to ignore. + const char *fileName; ///< Name of described file. + uint16 fileType; ///< Optional. Not used during detection, only by engines. + const char *md5; ///< MD5 of (the beginning of) the described file. Optional. Set to NULL to ignore. + int32 fileSize; ///< Size of the described file. Set to -1 to ignore. }; +/** + * A shortcut to produce an empty ADGameFileDescription record. Used to mark + * the end of a list of these. + */ #define AD_LISTEND {NULL, 0, NULL, 0} +/** + * A shortcut to produce a list of ADGameFileDescription records with only one + * record that contains just a filename with an MD5, and no file size. + */ #define AD_ENTRY1(f, x) {{ f, 0, x, -1}, AD_LISTEND} + +/** + * A shortcut to produce a list of ADGameFileDescription records with only one + * record that contains just a filename with an MD5, plus a file size. + */ #define AD_ENTRY1s(f, x, s) {{ f, 0, x, s}, AD_LISTEND} enum ADGameFlags { ADGF_NO_FLAGS = 0, - ADGF_PIRATED = (1 << 23), // flag to designate well known pirated versions with cracks - ADGF_ADDENGLISH = (1 << 24), // always add English as language option - ADGF_MACRESFORK = (1 << 25), // the md5 for this entry will be calculated from the resource fork - ADGF_USEEXTRAASTITLE = (1 << 26), // Extra field value will be used as main game title, not gameid - ADGF_DROPLANGUAGE = (1 << 28), // don't add language to gameid - ADGF_CD = (1 << 29), // add "-cd" to gameid - ADGF_DEMO = (1 << 30) // add "-demo" to gameid + ADGF_UNSTABLE = (1 << 21), // flag to designate not yet officially-supported games that are not fit for public testing + ADGF_TESTING = (1 << 22), // flag to designate not yet officially-supported games that are fit for public testing + ADGF_PIRATED = (1 << 23), ///< flag to designate well known pirated versions with cracks + ADGF_ADDENGLISH = (1 << 24), ///< always add English as language option + ADGF_MACRESFORK = (1 << 25), ///< the md5 for this entry will be calculated from the resource fork + ADGF_USEEXTRAASTITLE = (1 << 26), ///< Extra field value will be used as main game title, not gameid + ADGF_DROPLANGUAGE = (1 << 28), ///< don't add language to gameid + ADGF_CD = (1 << 29), ///< add "-cd" to gameid + ADGF_DEMO = (1 << 30) ///< add "-demo" to gameid }; struct ADGameDescription { @@ -71,25 +92,23 @@ struct ADGameDescription { }; /** + * A list of pointers to ADGameDescription structs (or subclasses thereof). + */ +typedef Common::Array<const ADGameDescription *> ADGameDescList; + +/** * End marker for a table of ADGameDescription structs. Use this to * terminate a list to be passed to the AdvancedDetector API. */ #define AD_TABLE_END_MARKER \ { NULL, NULL, { { NULL, 0, NULL, 0 } }, Common::UNK_LANG, Common::kPlatformUnknown, ADGF_NO_FLAGS, Common::GUIO_NONE } - -struct ADObsoleteGameID { - const char *from; - const char *to; - Common::Platform platform; -}; - struct ADFileBasedFallback { /** * Pointer to an ADGameDescription or subclass thereof which will get * returned if there's a detection match. */ - const void *desc; + const ADGameDescription *desc; /** * A zero-terminated list of filenames used for matching. All files in @@ -101,154 +120,151 @@ struct ADFileBasedFallback { enum ADFlags { /** - * Generate/augment preferred target with information on the language (if - * not equal to english) and platform (if not equal to PC). - */ - kADFlagDontAugmentPreferredTarget = (1 << 0), - /** - * Warn user about new variant if his version was detected with fallback - */ - kADFlagPrintWarningOnFileBasedFallback = (1 << 1), - /** * Store value of extra field in config file, and use it as a hint * on subsequent runs. Could be used when there is no way to autodetect * game (when more than one game sits in same directory), and user picks * up a variant manually. + * In addition, this is useful if two variants of a game sharing the same + * gameid are contained in a single directory. */ - kADFlagUseExtraAsHint = (1 << 2) + kADFlagUseExtraAsHint = (1 << 0) }; + /** - * A structure containing all parameters for the AdvancedDetector. - * Typically, an engine will have a single instance of this which is - * used by its AdvancedMetaEngine subclass as a parameter to the - * primary AdvancedMetaEngine constructor. + * A MetaEngine implementation based around the advanced detector code. */ -struct ADParams { +class AdvancedMetaEngine : public MetaEngine { +protected: /** * Pointer to an array of objects which are either ADGameDescription * or superset structures (i.e. start with an ADGameDescription member. * The list is terminated by an entry with a gameid equal to 0 * (see AD_TABLE_END_MARKER). */ - const byte *descs; + const byte *_gameDescriptors; /** * The size of a single entry of the above descs array. Always * must be >= sizeof(ADGameDescription). */ - uint descItemSize; - - /** - * The number of bytes to compute MD5 sum for. The AdvancedDetector - * is primarily based on computing and matching MD5 checksums of files. - * Since doing that for large files can be slow, it can be restricted - * to a subset of all files. - * Typically this will be set to something between 5 and 50 kilobyte, - * but arbitrary non-zero values are possible. - */ - uint md5Bytes; + const uint _descItemSize; /** * A list of all gameids (and their corresponding descriptions) supported * by this engine. */ - const PlainGameDescriptor *list; + const PlainGameDescriptor *_gameids; /** - * Structure for autoupgrading obsolete targets (optional). - * - * @todo Properly explain this. + * The number of bytes to compute MD5 sum for. The AdvancedDetector + * is primarily based on computing and matching MD5 checksums of files. + * Since doing that for large files can be slow, it can be restricted + * to a subset of all files. + * Typically this will be set to something between 5 and 50 kilobyte, + * but arbitrary non-zero values are possible. The default is 5000. */ - const ADObsoleteGameID *obsoleteList; + uint _md5Bytes; /** * Name of single gameid (optional). * * @todo Properly explain this -- what does it do? */ - const char *singleid; - - /** - * List of files for file-based fallback detection (optional). - * This is used if the regular MD5 based detection failed to - * detect anything. - * As usual this list is terminated by an all-zero entry. - * - * @todo Properly explain this - */ - const ADFileBasedFallback *fileBasedFallback; + const char *_singleid; /** * A bitmask of flags which can be used to configure the behavior * of the AdvancedDetector. Refer to ADFlags for a list of flags * that can be ORed together and passed here. */ - uint32 flags; + uint32 _flags; /** * A bitmask of game GUI options which will be added to each * entry in addition to per-game options. Refer to GameGUIOption * enum for the list. */ - uint32 guioptions; + uint32 _guioptions; /** - * Maximum depth of directories to look up + * Maximum depth of directories to look up. * If set to 0, the depth is 1 level */ - uint32 depth; + uint32 _maxScanDepth; /** * Case-insensitive list of directory globs which could be used for - * going deeper int directory structure. + * going deeper into the directory structure. * @see String::matchString() method for format description. * * @note Last item must be 0 */ - const char * const *directoryGlobs; -}; - + const char * const *_directoryGlobs; -namespace AdvancedDetector { - -/** - * Scan through the game descriptors specified in params and search for - * 'gameid' in there. If a match is found, returns a GameDescriptor - * with gameid and description set. - */ -GameDescriptor findGameID( - const char *gameid, - const PlainGameDescriptor *list, - const ADObsoleteGameID *obsoleteList = 0 - ); - -} // End of namespace AdvancedDetector - -/** - * A MetaEngine implementation based around the advanced detector code. - */ -class AdvancedMetaEngine : public MetaEngine { - const ADParams ¶ms; public: - AdvancedMetaEngine(const ADParams &dp) : params(dp) {} + AdvancedMetaEngine(const void *descs, uint descItemSize, const PlainGameDescriptor *gameids); + /** + * Returns list of targets supported by the engine. + * Distinguishes engines with single ID + */ virtual GameList getSupportedGames() const; + virtual GameDescriptor findGame(const char *gameid) const; + virtual GameList detectGames(const Common::FSList &fslist) const; + virtual Common::Error createInstance(OSystem *syst, Engine **engine) const; - // To be provided by subclasses +protected: + // To be implemented by subclasses virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const = 0; + typedef Common::HashMap<Common::String, Common::FSNode, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> FileMap; + /** * An (optional) generic fallback detect function which is invoked - * if both the regular MD5 based detection as well as the file - * based fallback failed to detect anything. + * if the regular MD5 based detection failed to detect anything. */ - virtual const ADGameDescription *fallbackDetect(const Common::FSList &fslist) const { + virtual const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const { return 0; } + +protected: + /** + * Detect games in specified directory. + * Parameters language and platform are used to pass on values + * specified by the user. This is used to restrict search scope. + * + * @param allFiles list of all present files, as computed by composeFileHashMap + * @param language restrict results to specified language + * @param platform restrict results to specified platform + * @param extra restrict results to specified extra string (only if kADFlagUseExtraAsHint is set) + * @return list of ADGameDescription pointers corresponding to matched games + */ + ADGameDescList detectGame(const Common::FSNode &parent, const FileMap &allFiles, Common::Language language, Common::Platform platform, const Common::String &extra) const; + + /** + * Iterates over all ADFileBasedFallback records inside fileBasedFallback. + * This then returns the record (or rather, the ADGameDescription + * contained in it) for which all files described by it are present, and + * among those the one with the maximal number of matching files. + * In case of a tie, the entry coming first in the list is chosen. + * + * @param allFiles a map describing all present files + * @param fileBasedFallback a list of ADFileBasedFallback records, zero-terminated + */ + const ADGameDescription *detectGameFilebased(const FileMap &allFiles, const ADFileBasedFallback *fileBasedFallback) const; + + // TODO + void updateGameDescriptor(GameDescriptor &desc, const ADGameDescription *realDesc) const; + + /** + * Compose a hashmap of all files in fslist. + * Includes nifty stuff like removing trailing dots and ignoring case. + */ + void composeFileHashMap(FileMap &allFiles, const Common::FSList &fslist, int depth) const; }; #endif diff --git a/engines/agi/agi.cpp b/engines/agi/agi.cpp index 78316588b0..811a58f45d 100644 --- a/engines/agi/agi.cpp +++ b/engines/agi/agi.cpp @@ -131,46 +131,65 @@ void AgiEngine::processEvents() { switch (key = event.kbd.keycode) { case Common::KEYCODE_LEFT: case Common::KEYCODE_KP4: - if (_allowSynthetic || !event.synthetic) + if (_predictiveDialogRunning && key == Common::KEYCODE_KP4) + key = event.kbd.ascii; + else if (_allowSynthetic || !event.synthetic) key = KEY_LEFT; break; case Common::KEYCODE_RIGHT: case Common::KEYCODE_KP6: - if (_allowSynthetic || !event.synthetic) + if (_predictiveDialogRunning && key == Common::KEYCODE_KP6) + key = event.kbd.ascii; + else if (_allowSynthetic || !event.synthetic) key = KEY_RIGHT; break; case Common::KEYCODE_UP: case Common::KEYCODE_KP8: - if (_allowSynthetic || !event.synthetic) + if (_predictiveDialogRunning && key == Common::KEYCODE_KP8) + key = event.kbd.ascii; + else if (_allowSynthetic || !event.synthetic) key = KEY_UP; break; case Common::KEYCODE_DOWN: case Common::KEYCODE_KP2: - if (_allowSynthetic || !event.synthetic) + if (_predictiveDialogRunning && key == Common::KEYCODE_KP2) + key = event.kbd.ascii; + else if (_allowSynthetic || !event.synthetic) key = KEY_DOWN; break; case Common::KEYCODE_PAGEUP: case Common::KEYCODE_KP9: - if (_allowSynthetic || !event.synthetic) + if (_predictiveDialogRunning && key == Common::KEYCODE_KP9) + key = event.kbd.ascii; + else if (_allowSynthetic || !event.synthetic) key = KEY_UP_RIGHT; break; case Common::KEYCODE_PAGEDOWN: case Common::KEYCODE_KP3: - if (_allowSynthetic || !event.synthetic) + if (_predictiveDialogRunning && key == Common::KEYCODE_KP3) + key = event.kbd.ascii; + else if (_allowSynthetic || !event.synthetic) key = KEY_DOWN_RIGHT; break; case Common::KEYCODE_HOME: case Common::KEYCODE_KP7: - if (_allowSynthetic || !event.synthetic) + if (_predictiveDialogRunning && key == Common::KEYCODE_KP7) + key = event.kbd.ascii; + else if (_allowSynthetic || !event.synthetic) key = KEY_UP_LEFT; break; case Common::KEYCODE_END: case Common::KEYCODE_KP1: - if (_allowSynthetic || !event.synthetic) + if (_predictiveDialogRunning && key == Common::KEYCODE_KP1) + key = event.kbd.ascii; + else if (_allowSynthetic || !event.synthetic) key = KEY_DOWN_LEFT; break; case Common::KEYCODE_KP5: - key = KEY_STATIONARY; + if (_predictiveDialogRunning) + key = event.kbd.ascii; + else + key = KEY_STATIONARY; break; case Common::KEYCODE_PLUS: key = '+'; diff --git a/engines/agi/agi.h b/engines/agi/agi.h index a42148b1ef..0155caf11d 100644 --- a/engines/agi/agi.h +++ b/engines/agi/agi.h @@ -807,7 +807,7 @@ public: virtual ~AgiEngine(); Common::Error loadGameState(int slot); - Common::Error saveGameState(int slot, const char *desc); + Common::Error saveGameState(int slot, const Common::String &desc); private: uint32 _lastTick; diff --git a/engines/agi/checks.cpp b/engines/agi/checks.cpp index 8d03ae67b9..20276657ff 100644 --- a/engines/agi/checks.cpp +++ b/engines/agi/checks.cpp @@ -265,7 +265,7 @@ void AgiEngine::updatePosition() { * This function adjusts the position of a sprite moving it until * certain criteria is matched. According to priority and control line * data, a sprite may not always appear at the location we specified. - * This behaviour is also known as the "Budin-Sonneveld effect". + * This behavior is also known as the "Budin-Sonneveld effect". * * @param n view table entry number */ diff --git a/engines/agi/detection.cpp b/engines/agi/detection.cpp index 22d8adf92d..21ff5deb2c 100644 --- a/engines/agi/detection.cpp +++ b/engines/agi/detection.cpp @@ -129,31 +129,6 @@ static const PlainGameDescriptor agiGames[] = { #include "agi/detection_tables.h" -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Agi::gameDescriptions, - // Size of that superset structure - sizeof(Agi::AGIGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - agiGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "agi", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NOSPEECH, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - using namespace Agi; class AgiMetaEngine : public AdvancedMetaEngine { @@ -161,7 +136,10 @@ class AgiMetaEngine : public AdvancedMetaEngine { mutable Common::String _extra; public: - AgiMetaEngine() : AdvancedMetaEngine(detectionParams) {} + AgiMetaEngine() : AdvancedMetaEngine(Agi::gameDescriptions, sizeof(Agi::AGIGameDescription), agiGames) { + _singleid = "agi"; + _guioptions = Common::GUIO_NOSPEECH; + } virtual const char *getName() const { return "AGI preAGI + v2 + v3"; @@ -177,7 +155,7 @@ public: virtual void removeSaveState(const char *target, int slot) const; SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const; - const ADGameDescription *fallbackDetect(const Common::FSList &fslist) const; + const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const; }; bool AgiMetaEngine::hasFeature(MetaEngineFeature f) const { @@ -315,7 +293,7 @@ SaveStateDescriptor AgiMetaEngine::querySaveMetaInfos(const char *target, int sl return SaveStateDescriptor(); } -const ADGameDescription *AgiMetaEngine::fallbackDetect(const Common::FSList &fslist) const { +const ADGameDescription *AgiMetaEngine::fallbackDetect(const FileMap &allFilesXXX, const Common::FSList &fslist) const { typedef Common::HashMap<Common::String, int32> IntMap; IntMap allFiles; bool matchedUsingFilenames = false; diff --git a/engines/agi/graphics.cpp b/engines/agi/graphics.cpp index 5ceccd9e27..eb162e4ab0 100644 --- a/engines/agi/graphics.cpp +++ b/engines/agi/graphics.cpp @@ -841,7 +841,7 @@ void GfxMgr::setAGIPal(int p0) { // Use only the lowest 6 bits of each color component (Red, Green and Blue) // because VGA used only 6 bits per color component (i.e. VGA had 18-bit colors). - // This should now be identical to the original AGIPAL-hack's behaviour. + // This should now be identical to the original AGIPAL-hack's behavior. bool validVgaPalette = true; for (int i = 0; i < 16 * 3; i++) { if (_agipalPalette[i] >= (1 << 6)) { diff --git a/engines/agi/op_cmd.cpp b/engines/agi/op_cmd.cpp index fb4c079a4a..bde62fe2d9 100644 --- a/engines/agi/op_cmd.cpp +++ b/engines/agi/op_cmd.cpp @@ -672,7 +672,7 @@ void AgiEngine::cmd_adj_ego_move_to_x_y(uint8 *p) { // Turn off ego's current movement caused with the mouse if // adj.ego.move.to.x.y is called with other arguments than previously. - // Fixes weird looping behaviour when walking to a ladder in the mines + // Fixes weird looping behavior when walking to a ladder in the mines // (Rooms 147-162) in Gold Rush using the mouse. Sometimes the ego didn't // stop when walking to a ladder using the mouse but kept moving on the // ladder in a horizontally looping manner i.e. from right to left, from diff --git a/engines/agi/op_test.cpp b/engines/agi/op_test.cpp index 13b2d25023..0660a614b6 100644 --- a/engines/agi/op_test.cpp +++ b/engines/agi/op_test.cpp @@ -167,7 +167,7 @@ uint8 AgiEngine::testSaid(uint8 nwords, uint8 *cc) { // user typed should be correct, but it looks like code 9999 means that // if the string is empty at this point, the entry is also correct... // - // With the removal of this code, the behaviour of the scene was + // With the removal of this code, the behavior of the scene was // corrected for (c = 0; nwords && n; c++, nwords--, n--) { @@ -316,7 +316,7 @@ int AgiEngine::testIfCode(int lognum) { case 0x13: // Unknown test command 19 // My current theory is that this command checks whether the ego is currently moving // and that that movement has been caused using the mouse and not using the keyboard. - // I base this theory on the game's behaviour on an Amiga emulator, not on disassembly. + // I base this theory on the game's behavior on an Amiga emulator, not on disassembly. // This command is used at least in the Amiga version of Gold Rush! v2.05 1989-03-09 // (AGI 2.316) in logics 1, 3, 5, 6, 137 and 192 (Logic.192 revealed this command's nature). // TODO: Check this command's implementation using disassembly just to be sure. diff --git a/engines/agi/predictive.cpp b/engines/agi/predictive.cpp index 80e89f410b..edfe83b1cb 100644 --- a/engines/agi/predictive.cpp +++ b/engines/agi/predictive.cpp @@ -190,7 +190,7 @@ bool AgiEngine::predictiveDialog() { bool needRefresh = true; - for (;;) { + while (!shouldQuit()) { if (needRefresh) { for (int i = 0; buttons[i]; i++) { int color1 = colors[i * 2]; @@ -573,8 +573,10 @@ bool AgiEngine::matchWord() { hi = line - 1; else if (cmpVal < 0) lo = line + 1; - else + else { hi = line; + break; + } } _currentWord.clear(); diff --git a/engines/agi/saveload.cpp b/engines/agi/saveload.cpp index deda186439..dae3dd42c1 100644 --- a/engines/agi/saveload.cpp +++ b/engines/agi/saveload.cpp @@ -551,11 +551,8 @@ int AgiEngine::loadGame(const char *fileName, bool checkId) { #define NUM_VISIBLE_SLOTS 12 const char *AgiEngine::getSavegameFilename(int num) { - static Common::String saveLoadSlot; - char extension[5]; - snprintf(extension, sizeof(extension), ".%.3d", num); - - saveLoadSlot = _targetName + extension; + Common::String saveLoadSlot = _targetName; + saveLoadSlot += Common::String::format(".%.3d", num); return saveLoadSlot.c_str(); } @@ -987,14 +984,12 @@ void AgiEngine::releaseImageStack() { void AgiEngine::checkQuickLoad() { if (ConfMan.hasKey("save_slot")) { - char saveNameBuffer[256]; - - snprintf(saveNameBuffer, 256, "%s.%03d", _targetName.c_str(), ConfMan.getInt("save_slot")); + Common::String saveNameBuffer = Common::String::format("%s.%03d", _targetName.c_str(), ConfMan.getInt("save_slot")); _sprites->eraseBoth(); _sound->stopSound(); - if (loadGame(saveNameBuffer, false) == errOK) { // Do not check game id + if (loadGame(saveNameBuffer.c_str(), false) == errOK) { // Do not check game id _game.exitAllLogics = 1; _menu->enableAll(); } @@ -1017,10 +1012,10 @@ Common::Error AgiEngine::loadGameState(int slot) { } } -Common::Error AgiEngine::saveGameState(int slot, const char *desc) { +Common::Error AgiEngine::saveGameState(int slot, const Common::String &desc) { char saveLoadSlot[12]; sprintf(saveLoadSlot, "%s.%.3d", _targetName.c_str(), slot); - if (saveGame(saveLoadSlot, desc) == errOK) + if (saveGame(saveLoadSlot, desc.c_str()) == errOK) return Common::kNoError; else return Common::kUnknownError; diff --git a/engines/agi/sound.cpp b/engines/agi/sound.cpp index 746d4e9070..aa338db0f2 100644 --- a/engines/agi/sound.cpp +++ b/engines/agi/sound.cpp @@ -99,51 +99,53 @@ void SoundMgr::unloadSound(int resnum) { } } +/** + * Start playing a sound resource. The logic here is that when the sound is + * finished we set the given flag to be true. This way the condition can be + * detected by the game. On the other hand, if the game wishes to start + * playing a new sound before the current one is finished, we also let it + * do that. + * @param resnum the sound resource number + * @param flag the flag that is wished to be set true when finished + */ void SoundMgr::startSound(int resnum, int flag) { - AgiSoundEmuType type; - - if (_vm->_game.sounds[resnum] != NULL && _vm->_game.sounds[resnum]->isPlaying()) - return; - - stopSound(); + debugC(3, kDebugLevelSound, "startSound(resnum = %d, flag = %d)", resnum, flag); if (_vm->_game.sounds[resnum] == NULL) // Is this needed at all? return; - type = (AgiSoundEmuType)_vm->_game.sounds[resnum]->type(); + stopSound(); + AgiSoundEmuType type = (AgiSoundEmuType)_vm->_game.sounds[resnum]->type(); if (type != AGI_SOUND_SAMPLE && type != AGI_SOUND_MIDI && type != AGI_SOUND_4CHN) return; + debugC(3, kDebugLevelSound, " type = %d", type); _vm->_game.sounds[resnum]->play(); _playingSound = resnum; - - debugC(3, kDebugLevelSound, "startSound(resnum = %d, flag = %d) type = %d", resnum, flag, type); - _soundGen->play(resnum); + // Reset the flag _endflag = flag; - - // Nat Budin reports that the flag should be reset when sound starts _vm->setflag(_endflag, false); } void SoundMgr::stopSound() { debugC(3, kDebugLevelSound, "stopSound() --> %d", _playingSound); - _endflag = -1; - if (_playingSound != -1) { if (_vm->_game.sounds[_playingSound]) // sanity checking _vm->_game.sounds[_playingSound]->stop(); - _soundGen->stop(); - _playingSound = -1; } + // This is probably not needed most of the time, but there also should + // not be any harm doing it, so do it anyway. if (_endflag != -1) _vm->setflag(_endflag, true); + + _endflag = -1; } int SoundMgr::initSound() { diff --git a/engines/agi/sound_2gs.cpp b/engines/agi/sound_2gs.cpp index 88feadd084..3c8a3dfc8d 100644 --- a/engines/agi/sound_2gs.cpp +++ b/engines/agi/sound_2gs.cpp @@ -22,6 +22,7 @@ #include "common/config-manager.h" #include "common/fs.h" +#include "common/archive.h" #include "common/md5.h" #include "common/memstream.h" #include "common/str-array.h" @@ -33,47 +34,91 @@ namespace Agi { SoundGen2GS::SoundGen2GS(AgiEngine *vm, Audio::Mixer *pMixer) : SoundGen(vm, pMixer) { - _disabledMidi = !loadInstruments(); + // Allocate memory for the wavetable + _wavetable = new int8[SIERRASTANDARD_SIZE]; + // Apple IIGS AGI MIDI player advances 60 ticks per second. Strategy + // here is to first generate audio for a 1/60th of a second and then + // advance the MIDI player by one tick. Thus, make the output buffer + // to be a 1/60th of a second in length. + _outSize = _sampleRate / 60; + _out = new int16[2 * _outSize]; // stereo + + // Initialize player variables + _nextGen = 0; + _ticks = 0; + + // Not playing anything yet _playingSound = -1; _playing = false; - _sndBuffer = (int16 *)calloc(2, BUFFER_SIZE); - - _midiChannels.resize(16); // Set the amount of available MIDI channels + // Load instruments + _disableMidi = !loadInstruments(); _mixer->playStream(Audio::Mixer::kMusicSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); } SoundGen2GS::~SoundGen2GS() { _mixer->stopHandle(_soundHandle); - - free(_sndBuffer); + delete[] _wavetable; + delete[] _out; } int SoundGen2GS::readBuffer(int16 *buffer, const int numSamples) { - fillAudio(buffer, numSamples / 2); - + static uint data_available = 0; + static uint data_offset = 0; + uint n = numSamples << 1; + uint8 *p = (uint8*)buffer; + + while (n > data_available) { + memcpy(p, (uint8*)_out + data_offset, data_available); + p += data_available; + n -= data_available; + + advancePlayer(); + + data_available = generateOutput() << 1; + data_offset = 0; + } + + memcpy(p, (uint8*)_out + data_offset, n); + data_offset += n; + data_available -= n; + return numSamples; } +/** + * Initiate the playing of a sound resource. + * @param resnum Resource number + */ void SoundGen2GS::play(int resnum) { AgiSoundEmuType type; _playingSound = resnum; type = (AgiSoundEmuType)_vm->_game.sounds[resnum]->type(); - assert (type == AGI_SOUND_SAMPLE || type == AGI_SOUND_MIDI); + if (_vm->_soundemu != SOUND_EMU_APPLE2GS) { + warning("Trying to play sample or MIDI resource but not using Apple IIGS sound emulation mode"); + return; + } + + haltGenerators(); + switch (type) { case AGI_SOUND_SAMPLE: { IIgsSample *sampleRes = (IIgsSample *) _vm->_game.sounds[_playingSound]; - playSampleSound(sampleRes->getHeader(), sampleRes->getSample()); + const IIgsSampleHeader &header = sampleRes->getHeader(); + _channels[kSfxMidiChannel].setInstrument(&header.instrument); + _channels[kSfxMidiChannel].setVolume(header.volume); + midiNoteOn(kSfxMidiChannel, header.pitch, 127); break; } case AGI_SOUND_MIDI: ((IIgsMidi *) _vm->_game.sounds[_playingSound])->rewind(); + _ticks = 0; break; default: break; @@ -81,213 +126,178 @@ void SoundGen2GS::play(int resnum) { } void SoundGen2GS::stop() { + haltGenerators(); _playingSound = -1; - - // Stops all sounds on all MIDI channels - for (iterator iter = _midiChannels.begin(); iter != _midiChannels.end(); ++iter) - iter->stopSounds(); + _playing = 0; } -void SoundGen2GS::playSound() { - if (_playingSound == -1) - return; - - if (_vm->_game.sounds[_playingSound]->type() == AGI_SOUND_MIDI) { - playMidiSound(); - //warning("playSound: Trying to play an Apple IIGS MIDI sound. Not yet implemented"); - } else if (_vm->_game.sounds[_playingSound]->type() == AGI_SOUND_SAMPLE) { - //debugC(3, kDebugLevelSound, "playSound: Trying to play an Apple IIGS sample"); - playSampleSound(); - } - - if (!_playing) { - _vm->_sound->soundIsFinished(); - - _playingSound = -1; - } -} - -uint32 SoundGen2GS::mixSound() { - int i, b; - - memset(_sndBuffer, 0, BUFFER_SIZE << 1); +/** + * Fill output buffer by advancing the generators for a 1/60th of a second. + * @return Number of generated samples + */ +uint SoundGen2GS::generateOutput() { + memset(_out, 0, _outSize * 2 * 2); if (!_playing || _playingSound == -1) - return BUFFER_SIZE; - - // Handle Apple IIGS sound mixing here - // TODO: Implement playing both waves in an oscillator - // TODO: Implement swap-mode in an oscillator - for (uint midiChan = 0; midiChan < _midiChannels.size(); midiChan++) { - for (uint gsChan = 0; gsChan < _midiChannels[midiChan]._gsChannels.size(); gsChan++) { - IIgsChannelInfo &channel = _midiChannels[midiChan]._gsChannels[gsChan]; - if (channel.playing()) { // Only mix in actively playing channels - // Frequency multiplier was 1076.0 based on tests made with MESS 0.117. - // Tests made with KEGS32 averaged the multiplier to around 1045. - // So this is a guess but maybe it's 1046.5... i.e. C6's frequency? - double hertz = C6_FREQ * pow(SEMITONE, fracToDouble(channel.note)); - channel.posAdd = doubleToFrac(hertz / getRate()); - channel.vol = doubleToFrac(fracToDouble(channel.envVol) * fracToDouble(channel.chanVol) / 127.0); - double tempVol = fracToDouble(channel.vol)/127.0; - for (i = 0; i < IIGS_BUFFER_SIZE; i++) { - b = channel.relocatedSample[fracToInt(channel.pos)]; - // TODO: Find out what volume/amplification setting is loud enough - // but still doesn't clip when playing many channels on it. - _sndBuffer[i] += (int16) (b * tempVol * 256/4); - channel.pos += channel.posAdd; - - if (channel.pos >= intToFrac(channel.size)) { - if (channel.loop) { - // Don't divide by zero on zero length samples - channel.pos %= intToFrac(channel.size + (channel.size == 0)); - // Probably we should loop the envelope too - channel.envSeg = 0; - channel.envVol = channel.startEnvVol; - } else { - channel.pos = channel.chanVol = 0; - channel.end = true; - break; - } + return _outSize * 2; + + int16 *p = _out; + int n = _outSize; + while (n--) { + int outl = 0; + int outr = 0; + for (int k = 0; k < MAX_GENERATORS; k++) { + IIgsGenerator *g = &_generators[k]; + if (!g->ins) + continue; + const IIgsInstrumentHeader *i = g->ins; + + // Advance envelope + int vol = fracToInt(g->a); + if (g->a <= i->env[g->seg].bp) { + g->a += i->env[g->seg].inc * ENVELOPE_COEF; + if (g->a > i->env[g->seg].bp) { + g->a = i->env[g->seg].bp; + g->seg++; + } + } else { + g->a -= i->env[g->seg].inc * ENVELOPE_COEF; + if (g->a < i->env[g->seg].bp) { + g->a = i->env[g->seg].bp; + g->seg++; + } + } + + // TODO: Advance vibrato here. The Apple IIGS uses a LFO with + // triangle wave to modulate the frequency of both oscillators. + // In Apple IIGS the vibrato and the envelope are updated at the + // same time, so the vibrato speed depends on ENVELOPE_COEF. + + // Advance oscillators + int s0 = 0; + int s1 = 0; + if (!g->osc[0].halt) { + s0 = g->osc[0].base[fracToInt(g->osc[0].p)]; + g->osc[0].p += g->osc[0].pd; + if ((uint)fracToInt(g->osc[0].p) >= g->osc[0].size) { + g->osc[0].p -= intToFrac(g->osc[0].size); + if (!g->osc[0].loop) + g->osc[0].halt = 1; + if (g->osc[0].swap) { + g->osc[0].halt = 1; + g->osc[1].halt = 0; } } - - if (channel.envSeg < ENVELOPE_SEGMENT_COUNT) { - const IIgsEnvelopeSegment &seg = channel.ins->env.seg[channel.envSeg]; - // I currently assume enveloping works with the same speed as the MIDI - // (i.e. with 1/60ths of a second ticks). - // TODO: Check if enveloping really works with the same speed as MIDI - frac_t envVolDelta = doubleToFrac(seg.inc/256.0); - if (intToFrac(seg.bp) >= channel.envVol) { - channel.envVol += envVolDelta; - if (channel.envVol >= intToFrac(seg.bp)) { - channel.envVol = intToFrac(seg.bp); - channel.envSeg += 1; - } - } else { - channel.envVol -= envVolDelta; - if (channel.envVol <= intToFrac(seg.bp)) { - channel.envVol = intToFrac(seg.bp); - channel.envSeg += 1; - } + } + if (!g->osc[1].halt) { + s1 = g->osc[1].base[fracToInt(g->osc[1].p)]; + g->osc[1].p += g->osc[1].pd; + if ((uint)fracToInt(g->osc[1].p) >= g->osc[1].size) { + g->osc[1].p -= intToFrac(g->osc[1].size); + if (!g->osc[1].loop) + g->osc[1].halt = 1; + if (g->osc[1].swap) { + g->osc[0].halt = 0; + g->osc[1].halt = 1; } } } + + // Take envelope and MIDI volume information into account. + // Also amplify. + s0 *= vol * g->vel / 127 * 80 / 256; + s1 *= vol * g->vel / 127 * 80 / 256; + + // Select output channel. + if (g->osc[0].chn) + outl += s0; + else + outr += s0; + + if (g->osc[1].chn) + outl += s1; + else + outr += s1; } - } - - removeStoppedSounds(); - return IIGS_BUFFER_SIZE; -} - -void SoundGen2GS::fillAudio(int16 *stream, uint len) { - uint32 p = 0; - - // current number of audio bytes in _sndBuffer - static uint32 data_available = 0; - // offset of start of audio bytes in _sndBuffer - static uint32 data_offset = 0; - - len <<= 2; - - debugC(5, kDebugLevelSound, "(%p, %d)", (void *)stream, len); - - while (len > data_available) { - memcpy((uint8 *)stream + p, (uint8*)_sndBuffer + data_offset, data_available); - p += data_available; - len -= data_available; - - playSound(); - data_available = mixSound() << 1; - data_offset = 0; + if (outl > 32768) + outl = 32768; + if (outl < -32767) + outl = -32767; + if (outr > 32768) + outr = 32768; + if (outr < -32767) + outr = -32767; + + *p++ = outl; + *p++ = outr; } - memcpy((uint8 *)stream + p, (uint8*)_sndBuffer + data_offset, len); - data_offset += len; - data_available -= len; + return _outSize * 2; } -void SoundGen2GS::playSampleSound() { - if (_vm->_soundemu != SOUND_EMU_APPLE2GS) { - warning("Trying to play a sample but not using Apple IIGS sound emulation mode"); +void SoundGen2GS::advancePlayer() { + if (_playingSound == -1) return; - } - - if (_playingSound != -1) - _playing = activeSounds() > 0; -} -void SoundGen2GS::stopSounds() { - // Stops all sounds on all MIDI channels - for (iterator iter = _midiChannels.begin(); iter != _midiChannels.end(); ++iter) - iter->stopSounds(); -} - -bool SoundGen2GS::playSampleSound(const IIgsSampleHeader &sampleHeader, const int8 *sample) { - stopSounds(); - IIgsMidiChannel &channel = _midiChannels[kSfxMidiChannel]; - - channel.setInstrument(&sampleHeader.instrument, sample); - channel.setVolume(sampleHeader.volume); - channel.noteOn(sampleHeader.pitch, 64); // Use default velocity (i.e. 64) + if (_vm->_game.sounds[_playingSound]->type() == AGI_SOUND_MIDI) { + advanceMidiPlayer(); + } else if (_vm->_game.sounds[_playingSound]->type() == AGI_SOUND_SAMPLE) { + _playing = activeGenerators() > 0; + } - return true; + if (!_playing) { + _vm->_sound->soundIsFinished(); + _playingSound = -1; + } } -void SoundGen2GS::playMidiSound() { - if (_disabledMidi) +void SoundGen2GS::advanceMidiPlayer() { + if (_disableMidi) return; const uint8 *p; uint8 parm1, parm2; - static uint8 cmd, ch; + static uint8 cmd, chn; if (_playingSound == -1 || _vm->_game.sounds[_playingSound] == NULL) { warning("Error playing Apple IIGS MIDI sound resource"); _playing = false; - return; } IIgsMidi *midiObj = (IIgsMidi *) _vm->_game.sounds[_playingSound]; + _ticks++; _playing = true; p = midiObj->getPtr(); - midiObj->_soundBufTicks++; - while (true) { - uint8 readByte = *p; - // Check for end of MIDI sequence marker (Can also be here before delta-time) - if (readByte == MIDI_BYTE_STOP_SEQUENCE) { + if (*p == MIDI_STOP_SEQUENCE) { debugC(3, kDebugLevelSound, "End of MIDI sequence (Before reading delta-time)"); _playing = false; - midiObj->rewind(); - return; - } else if (readByte == MIDI_BYTE_TIMER_SYNC) { + } + if (*p == MIDI_TIMER_SYNC) { debugC(3, kDebugLevelSound, "Timer sync"); p++; // Jump over the timer sync byte as it's not needed - continue; } - uint8 deltaTime = readByte; - if (midiObj->_midiTicks + deltaTime > midiObj->_soundBufTicks) { + // Check for delta time + uint8 delta = *p; + if (midiObj->_ticks + delta > _ticks) break; - } - midiObj->_midiTicks += deltaTime; - p++; // Jump over the delta-time byte as it was already taken care of + midiObj->_ticks += delta; + p++; // Check for end of MIDI sequence marker (This time it after reading delta-time) - if (*p == MIDI_BYTE_STOP_SEQUENCE) { + if (*p == MIDI_STOP_SEQUENCE) { debugC(3, kDebugLevelSound, "End of MIDI sequence (After reading delta-time)"); _playing = false; - midiObj->rewind(); - return; } @@ -295,36 +305,51 @@ void SoundGen2GS::playMidiSound() { // Otherwise use running status (i.e. previously set command and channel). if (*p & 0x80) { cmd = *p++; - ch = cmd & 0x0f; + chn = cmd & 0x0f; cmd >>= 4; } switch (cmd) { - case MIDI_CMD_NOTE_OFF: + case MIDI_NOTE_OFF: parm1 = *p++; parm2 = *p++; - midiNoteOff(ch, parm1, parm2); + debugC(3, kDebugLevelSound, "channel %X: note off (key = %d, velocity = %d)", chn, parm1, parm2); + midiNoteOff(chn, parm1, parm2); break; - case MIDI_CMD_NOTE_ON: + case MIDI_NOTE_ON: parm1 = *p++; parm2 = *p++; - midiNoteOn(ch, parm1, parm2); + debugC(3, kDebugLevelSound, "channel %X: note on (key = %d, velocity = %d)", chn, parm1, parm2); + midiNoteOn(chn, parm1, parm2); break; - case MIDI_CMD_CONTROLLER: + case MIDI_CONTROLLER: parm1 = *p++; parm2 = *p++; - midiController(ch, parm1, parm2); + debugC(3, kDebugLevelSound, "channel %X: controller %02X = %02X", chn, parm1, parm2); + // The tested Apple IIGS AGI MIDI resources only used + // controllers 0 (Bank select?), 7 (Volume) and 64 (Sustain On/Off). + // Controller 0's parameter was in range 94-127, + // controller 7's parameter was in range 0-127 and + // controller 64's parameter was always 0 (i.e. sustain off). + switch (parm1) { + case 7: + _channels[chn].setVolume(parm2); + break; + } break; - case MIDI_CMD_PROGRAM_CHANGE: + case MIDI_PROGRAM_CHANGE: parm1 = *p++; - midiProgramChange(ch, parm1); + debugC(3, kDebugLevelSound, "channel %X: program change %02X", chn, parm1); + _channels[chn].setInstrument(getInstrument(parm1)); break; - case MIDI_CMD_PITCH_WHEEL: + case MIDI_PITCH_WHEEL: parm1 = *p++; parm2 = *p++; + debugC(3, kDebugLevelSound, "channel %X: pitch wheel (unimplemented)", chn); + break; - uint16 wheelPos = ((parm2 & 0x7F) << 7) | (parm1 & 0x7F); // 14-bit value - midiPitchWheel(wheelPos); + default: + debugC(3, kDebugLevelSound, "channel %X: unimplemented command %02X", chn, cmd); break; } } @@ -332,78 +357,102 @@ void SoundGen2GS::playMidiSound() { midiObj->setPtr(p); } -void SoundGen2GS::midiNoteOff(uint8 channel, uint8 note, uint8 velocity) { - _midiChannels[channel].noteOff(note, velocity); - debugC(3, kDebugLevelSound, "note off, channel %02x, note %02x, velocity %02x", channel, note, velocity); -} - -void SoundGen2GS::midiNoteOn(uint8 channel, uint8 note, uint8 velocity) { - _midiChannels[channel].noteOn(note, velocity); - debugC(3, kDebugLevelSound, "note on, channel %02x, note %02x, velocity %02x", channel, note, velocity); -} - -// TODO: Check if controllers behave differently on different MIDI channels -// TODO: Doublecheck what other controllers than the volume controller do -void SoundGen2GS::midiController(uint8 channel, uint8 controller, uint8 value) { - IIgsMidiChannel &midiChannel = _midiChannels[channel]; - - // The tested Apple IIGS AGI MIDI resources only used - // controllers 0 (Bank select?), 7 (Volume) and 64 (Sustain On/Off). - // Controller 0's parameter was in range 94-127, - // controller 7's parameter was in range 0-127 and - // controller 64's parameter was always 0 (i.e. sustain off). - bool unimplemented = false; - switch (controller) { - case 7: // Volume - midiChannel.setVolume(value); - break; - default: - unimplemented = true; - break; +void SoundGen2GS::midiNoteOff(int channel, int note, int velocity) { + // Release keys within the given MIDI channel + for (int i = 0; i < MAX_GENERATORS; i++) { + if (_generators[i].chn == channel && _generators[i].key == note) + _generators[i].seg = _generators[i].ins->seg; } - debugC(3, kDebugLevelSound, "controller %02x, ch %02x, val %02x%s", controller, channel, value, unimplemented ? " (Unimplemented)" : ""); -} - -void SoundGen2GS::midiProgramChange(uint8 channel, uint8 program) { - _midiChannels[channel].setInstrument(getInstrument(program), _wave.begin()); - debugC(3, kDebugLevelSound, "program change %02x, channel %02x", program, channel); -} - -void SoundGen2GS::midiPitchWheel(uint8 wheelPos) { - // In all the tested Apple IIGS AGI MIDI resources - // pitch wheel commands always used 0x2000 (Center position). - // Therefore it should be quite safe to ignore this command. - debugC(3, kDebugLevelSound, "pitch wheel position %04x (Unimplemented)", wheelPos); } -const IIgsInstrumentHeader* SoundGen2GS::getInstrument(uint8 program) const { - return &_instruments[_midiProgToInst->map(program)]; -} +void SoundGen2GS::midiNoteOn(int channel, int note, int velocity) { + if (!_channels[channel].getInstrument()) { + debugC(3, kDebugLevelSound, "midiNoteOn(): no instrument specified for channel %d", channel); + return; + } -void SoundGen2GS::setProgramChangeMapping(const MidiProgramChangeMapping *mapping) { - _midiProgToInst = mapping; + // Allocate a generator for the note. + IIgsGenerator* g = allocateGenerator(); + g->ins = _channels[channel].getInstrument(); + const IIgsInstrumentHeader* i = g->ins; + + // Pass information from the MIDI channel to the generator. Take + // velocity into account, although simplistically. + velocity *= 5 / 3; + if (velocity > 127) + velocity = 127; + + g->key = note; + g->vel = velocity * _channels[channel].getVolume() / 127; + g->chn = channel; + + // Instruments can define different samples to be used based on + // what the key is. Find the correct samples for our key. + int wa = 0; + int wb = 0; + while (wa < i->waveCount[0] - 1 && note > i->wave[0][wa].key) + wa++; + while (wb < i->waveCount[1] - 1 && note > i->wave[1][wb].key) + wb++; + + // Prepare the generator. + g->osc[0].base = i->base + i->wave[0][wa].offset; + g->osc[0].size = i->wave[0][wa].size; + g->osc[0].pd = doubleToFrac(midiKeyToFreq(note, (double)i->wave[0][wa].tune / 256.0) / (double)_sampleRate); + g->osc[0].p = 0; + g->osc[0].halt = i->wave[0][wa].halt; + g->osc[0].loop = i->wave[0][wa].loop; + g->osc[0].swap = i->wave[0][wa].swap; + g->osc[0].chn = i->wave[0][wa].chn; + + g->osc[1].base = i->base + i->wave[1][wb].offset; + g->osc[1].size = i->wave[1][wb].size; + g->osc[1].pd = doubleToFrac(midiKeyToFreq(note, (double)i->wave[1][wb].tune / 256.0) / (double)_sampleRate); + g->osc[1].p = 0; + g->osc[1].halt = i->wave[1][wb].halt; + g->osc[1].loop = i->wave[1][wb].loop; + g->osc[1].swap = i->wave[1][wb].swap; + g->osc[1].chn = i->wave[1][wb].chn; + + g->seg = 0; + g->a = 0; + + // Print debug messages for instruments with swap mode or vibrato enabled + if (g->osc[0].swap || g->osc[1].swap) + debugC(2, kDebugLevelSound, "Detected swap mode in a playing instrument. This is rare and is not tested well..."); + if (i->vibDepth > 0) + debugC(2, kDebugLevelSound, "Detected vibrato in a playing instrument. Vibrato is not implemented, playing without..."); +} + +double SoundGen2GS::midiKeyToFreq(int key, double finetune) { + return 440.0 * pow(2.0, (15.0 + (double)key + finetune) / 12.0); +} + +void SoundGen2GS::haltGenerators() { + for (int i = 0; i < MAX_GENERATORS; i++) { + _generators[i].osc[0].halt = true; + _generators[i].osc[1].halt = true; + } } -void SoundGen2GS::removeStoppedSounds() { - for (Common::Array<IIgsMidiChannel>::iterator iter = _midiChannels.begin(); iter != _midiChannels.end(); ++iter) - iter->removeStoppedSounds(); +uint SoundGen2GS::activeGenerators() { + int n = 0; + for (int i = 0; i < MAX_GENERATORS; i++) + if (!_generators[i].osc[0].halt || !_generators[i].osc[1].halt) + n++; + return n; } -uint SoundGen2GS::activeSounds() const { - uint result = 0; - - for (Common::Array<IIgsMidiChannel>::const_iterator iter = _midiChannels.begin(); iter != _midiChannels.end(); ++iter) - result += iter->activeSounds(); - - return result; +void SoundGen2GS::setProgramChangeMapping(const IIgsMidiProgramMapping *mapping) { + _progToInst = mapping; } IIgsMidi::IIgsMidi(uint8 *data, uint32 len, int resnum, SoundMgr &manager) : AgiSound(manager) { _data = data; // Save the resource pointer _ptr = _data + 2; // Set current position to just after the header - _len = len; // Save the resource's length + _len = len; // Save the resource's length _type = READ_LE_UINT16(data); // Read sound resource's type - _midiTicks = _soundBufTicks = 0; + _ticks = 0; _isValid = (_type == AGI_SOUND_MIDI) && (_data != NULL) && (_len >= 2); if (!_isValid) // Check for errors @@ -419,7 +468,7 @@ IIgsMidi::IIgsMidi(uint8 *data, uint32 len, int resnum, SoundMgr &manager) : Agi static bool convertWave(Common::SeekableReadStream &source, int8 *dest, uint length) { // Convert the wave from 8-bit unsigned to 8-bit signed format for (uint i = 0; i < length; i++) - dest[i] = (int8) ((int) source.readByte() - 128); + dest[i] = (int8) ((int) source.readByte() - ZERO_OFFSET); return !(source.eos() || source.err()); } @@ -446,330 +495,136 @@ IIgsSample::IIgsSample(uint8 *data, uint32 len, int resnum, SoundMgr &manager) : _header.pitch &= 0x7F; // Apple IIGS AGI probably did it this way too } - // Finalize the header info using the 8-bit unsigned sample data - _header.finalize(stream); - // Convert sample data from 8-bit unsigned to 8-bit signed format stream.seek(sampleStartPos); _sample = new int8[_header.sampleSize]; - if (_sample != NULL) + if (_sample != NULL) { _isValid = convertWave(stream, _sample, _header.sampleSize); + // Finalize header info using sample data + _header.finalize(_sample); + } } if (!_isValid) // Check for errors warning("Error creating Apple IIGS sample from resource %d (Type %d, length %d)", resnum, _header.type, len); } -/** Reads an Apple IIGS envelope from then given stream. */ -bool IIgsEnvelope::read(Common::SeekableReadStream &stream) { - for (int segNum = 0; segNum < ENVELOPE_SEGMENT_COUNT; segNum++) { - seg[segNum].bp = stream.readByte(); - seg[segNum].inc = stream.readUint16LE(); - } - - return !(stream.eos() || stream.err()); -} -/** Reads an Apple IIGS wave information structure from the given stream. */ -bool IIgsWaveInfo::read(Common::SeekableReadStream &stream, bool ignoreAddr) { - top = stream.readByte(); - addr = stream.readByte() * 256; - size = (1 << (stream.readByte() & 7)) * 256; - - // Read packed mode byte and parse it into parts - byte packedModeByte = stream.readByte(); - channel = (packedModeByte >> 4) & 1; // Bit 4 - mode = (packedModeByte >> 1) & 3; // Bits 1-2 - halt = (packedModeByte & 1) != 0; // Bit 0 (Converted to boolean) - - relPitch = stream.readSint16LE(); +bool IIgsInstrumentHeader::read(Common::SeekableReadStream &stream, bool ignoreAddr) { + for (int i = 0; i < ENVELOPE_SEGMENT_COUNT; i++) { + env[i].bp = intToFrac(stream.readByte()); + env[i].inc = intToFrac(stream.readUint16LE()) >> 8; + } + seg = stream.readByte(); + /*priority =*/ stream.readByte(); // Not needed. 32 in all tested data. + bend = stream.readByte(); + vibDepth = stream.readByte(); + vibSpeed = stream.readByte(); + stream.readByte(); // Not needed? 0 in all tested data. + + waveCount[0] = stream.readByte(); + waveCount[1] = stream.readByte(); + for (int i = 0; i < 2; i++) + for (int k = 0; k < waveCount[i]; k++) { + wave[i][k].key = stream.readByte(); + wave[i][k].offset = stream.readByte() << 8; + wave[i][k].size = 0x100 << (stream.readByte() & 7); + uint8 b = stream.readByte(); + wave[i][k].tune = stream.readUint16LE(); + + // For sample resources we ignore the address. + if (ignoreAddr) + wave[i][k].offset = 0; + + // Check for samples that extend out of the wavetable. + if (wave[i][k].offset + wave[i][k].size >= SIERRASTANDARD_SIZE) { + warning("Invalid data detected in the instrument set of Apple IIGS AGI. Continuing anyway..."); + wave[i][k].size = SIERRASTANDARD_SIZE - wave[i][k].offset; + } - // Zero the wave address if we want to ignore the wave address info - if (ignoreAddr) - addr = 0; + // Parse the generator mode byte to separate fields. + wave[i][k].halt = b & 0x1; // Bit 0 = HALT + wave[i][k].loop = !(b & 0x2); // Bit 1 =!LOOP + wave[i][k].swap = (b & 0x6) == 0x6; // Bit 1&2 = SWAP + wave[k][k].chn = (b >> 4) > 0; // Output channel (left or right) + } return !(stream.eos() || stream.err()); } -bool IIgsWaveInfo::finalize(Common::SeekableReadStream &uint8Wave) { - uint32 startPos = uint8Wave.pos(); // Save stream's starting position - uint8Wave.seek(addr, SEEK_CUR); // Seek to wave's address - - // Calculate the true sample size (A zero ends the sample prematurely) - uint trueSize = size; // Set a default value for the result - for (uint i = 0; i < size; i++) { - if (uint8Wave.readByte() == 0) { - trueSize = i; - // A zero in the sample stream turns off looping - // (At least that's what MESS 0.117 and KEGS32 0.91 seem to do) - if (mode == OSC_MODE_LOOP) - mode = OSC_MODE_ONESHOT; - break; - } +bool IIgsInstrumentHeader::finalize(int8 *wavetable) { + // Calculate final pointers to sample data and detect true sample size + // in case the sample ends prematurely. + for (int i = 0; i < 2; i++) + for (int k = 0; k < waveCount[i]; k++) { + base = wavetable; + int8 *p = base + wave[i][k].offset; + uint trueSize; + for (trueSize = 0; trueSize < wave[i][k].size; trueSize++) + if (p[trueSize] == -ZERO_OFFSET) + break; + wave[i][k].size = trueSize; } - size = trueSize; // Set the true sample size - - uint8Wave.seek(startPos); // Seek back to the stream's starting position - - return true; -} - -bool IIgsOscillator::finalize(Common::SeekableReadStream &uint8Wave) { - for (uint i = 0; i < WAVES_PER_OSCILLATOR; i++) - if (!waves[i].finalize(uint8Wave)) - return false; - - return true; -} - -bool IIgsOscillatorList::read(Common::SeekableReadStream &stream, uint oscillatorCount, bool ignoreAddr) { - // First read the A waves and then the B waves for the oscillators - for (uint waveNum = 0; waveNum < WAVES_PER_OSCILLATOR; waveNum++) - for (uint oscNum = 0; oscNum < oscillatorCount; oscNum++) - if (!osc[oscNum].waves[waveNum].read(stream, ignoreAddr)) - return false; - - count = oscillatorCount; // Set the oscillator count - - return true; -} - -bool IIgsOscillatorList::finalize(Common::SeekableReadStream &uint8Wave) { - for (uint i = 0; i < count; i++) - if (!osc[i].finalize(uint8Wave)) - return false; return true; } -bool IIgsInstrumentHeader::read(Common::SeekableReadStream &stream, bool ignoreAddr) { - env.read(stream); - relseg = stream.readByte(); - /*byte priority =*/ stream.readByte(); // Not needed? 32 in all tested data. - bendrange = stream.readByte(); - vibdepth = stream.readByte(); - vibspeed = stream.readByte(); - /*byte spare =*/ stream.readByte(); // Not needed? 0 in all tested data. - byte wac = stream.readByte(); // Read A wave count - byte wbc = stream.readByte(); // Read B wave count - oscList.read(stream, wac, ignoreAddr); // Read the oscillators - return (wac == wbc) && !(stream.eos() || stream.err()); // A and B wave counts must match -} - -bool IIgsInstrumentHeader::finalize(Common::SeekableReadStream &uint8Wave) { - return oscList.finalize(uint8Wave); -} - bool IIgsSampleHeader::read(Common::SeekableReadStream &stream) { - type = stream.readUint16LE(); - pitch = stream.readByte(); - unknownByte_Ofs3 = stream.readByte(); - volume = stream.readByte(); - unknownByte_Ofs5 = stream.readByte(); - instrumentSize = stream.readUint16LE(); - sampleSize = stream.readUint16LE(); + type = stream.readUint16LE(); + pitch = stream.readByte(); + unknownByte_Ofs3 = stream.readByte(); + volume = stream.readByte(); + unknownByte_Ofs5 = stream.readByte(); + instrumentSize = stream.readUint16LE(); + sampleSize = stream.readUint16LE(); // Read the instrument header *ignoring* its wave address info - return instrument.read(stream, true); } -bool IIgsSampleHeader::finalize(Common::SeekableReadStream &uint8Wave) { - return instrument.finalize(uint8Wave); -} - -void IIgsMidiChannel::stopSounds() { - // Stops all sounds on this single MIDI channel - for (iterator iter = _gsChannels.begin(); iter != _gsChannels.end(); ++iter) - iter->stop(); - - _gsChannels.clear(); -} - -void IIgsMidiChannel::removeStoppedSounds() { - for (int i = _gsChannels.size() - 1; i >= 0; i--) - if (!_gsChannels[i].playing()) - _gsChannels.remove_at(i); -} - -uint IIgsMidiChannel::activeSounds() const { - uint result = 0; - - for (const_iterator iter = _gsChannels.begin(); iter != _gsChannels.end(); ++iter) - if (!iter->end) - result++; - - return result; -} - -void IIgsMidiChannel::setInstrument(const IIgsInstrumentHeader *instrument, const int8 *sample) { - _instrument = instrument; - _sample = sample; - - // Set program on each Apple IIGS channel playing on this MIDI channel - for (iterator iter = _gsChannels.begin(); iter != _gsChannels.end(); ++iter) - iter->setInstrument(instrument, sample); -} - -void IIgsMidiChannel::setVolume(uint8 volume) { - _volume = volume; - - // Set volume on each Apple IIGS channel playing on this MIDI channel - for (iterator iter = _gsChannels.begin(); iter != _gsChannels.end(); ++iter) - iter->setChannelVolume(volume); -} - -void IIgsMidiChannel::noteOff(uint8 note, uint8 velocity) { - // Go through all the notes playing on this MIDI channel - // and turn off the ones that are playing the given note - for (iterator iter = _gsChannels.begin(); iter != _gsChannels.end(); ++iter) - if (iter->origNote == note) - iter->noteOff(velocity); -} - -void IIgsMidiChannel::noteOn(uint8 note, uint8 velocity) { - IIgsChannelInfo channel; - - // Use the default channel volume and instrument - channel.setChannelVolume(_volume); - channel.setInstrument(_instrument, _sample); - - // Set the note on and save the channel - channel.noteOn(note, velocity); - _gsChannels.push_back(channel); -} - -void IIgsChannelInfo::rewind() { - this->envVol = this->startEnvVol; - this->envSeg = 0; - this->pos = intToFrac(0); -} - -void IIgsChannelInfo::setChannelVolume(uint8 volume) { - this->chanVol = intToFrac(volume); -} - -void IIgsChannelInfo::setInstrument(const IIgsInstrumentHeader *instrument, const int8 *sample) { - assert(instrument != NULL && sample != NULL); - this->ins = instrument; - this->unrelocatedSample = sample; -} - -// TODO/FIXME: Implement correctly and fully (Take velocity into account etc) -void IIgsChannelInfo::noteOn(uint8 noteParam, uint8 velocity) { - this->origNote = noteParam; - this->startEnvVol = intToFrac(0); - rewind(); - - const IIgsWaveInfo *waveInfo = NULL; - - for (uint i = 0; i < ins->oscList.count; i++) - if (ins->oscList(i).waves[0].top >= noteParam) - waveInfo = &ins->oscList(i).waves[0]; - - assert(waveInfo != NULL); - - this->relocatedSample = this->unrelocatedSample + waveInfo->addr; - this->posAdd = intToFrac(0); - this->note = intToFrac(noteParam) + doubleToFrac(waveInfo->relPitch/256.0); - this->vol = doubleToFrac(fracToDouble(this->envVol) * fracToDouble(this->chanVol) / 127.0); - this->loop = (waveInfo->mode == OSC_MODE_LOOP); - this->size = waveInfo->size - waveInfo->addr; - this->end = waveInfo->halt; -} - -// TODO/FIXME: Implement correctly and fully (Take release time and velocity into account etc) -void IIgsChannelInfo::noteOff(uint8 velocity) { - this->loop = false; - this->envSeg = ins->relseg; +bool IIgsSampleHeader::finalize(int8 *sample) { + return instrument.finalize(sample); } -void IIgsChannelInfo::stop() { - this->end = true; -} - -bool IIgsChannelInfo::playing() { - return !this->end; -} - -/** - * A function object (i.e. a functor) for testing if a Common::FSNode - * object's name is equal (Ignoring case) to a string or to at least - * one of the strings in a list of strings. Can be used e.g. with find_if(). - */ -struct fsnodeNameEqualsIgnoreCase : public Common::UnaryFunction<const Common::FSNode&, bool> { -// FIXME: This should be replaced; use SearchMan instead - fsnodeNameEqualsIgnoreCase(const Common::StringArray &str) : _str(str) {} - fsnodeNameEqualsIgnoreCase(const Common::String str) { _str.push_back(str); } - bool operator()(const Common::FSNode ¶m) const { - for (Common::StringArray::const_iterator iter = _str.begin(); iter != _str.end(); ++iter) - if (param.getName().equalsIgnoreCase(*iter)) - return true; - return false; - } -private: - Common::StringArray _str; -}; +//### +//### LOADER METHODS +//### bool SoundGen2GS::loadInstruments() { - // Check that the platform is Apple IIGS, as only it uses custom instruments - if (_vm->getPlatform() != Common::kPlatformApple2GS) { - debugC(3, kDebugLevelSound, "Platform isn't Apple IIGS so not loading any instruments"); - return true; - } - // Get info on the particular Apple IIGS AGI game's executable - const IIgsExeInfo *exeInfo = getIIgsExeInfo((enum AgiGameID) _vm->getGameID()); + const IIgsExeInfo *exeInfo = getIIgsExeInfo((enum AgiGameID)_vm->getGameID()); if (exeInfo == NULL) { warning("Unsupported Apple IIGS game, not loading instruments"); return false; } - // List files in the game path - Common::FSList fslist; - Common::FSNode dir(ConfMan.get("path")); - if (!dir.getChildren(fslist, Common::FSNode::kListFilesOnly)) { - warning("Invalid game path (\"%s\"), not loading Apple IIGS instruments", dir.getPath().c_str()); - return false; - } - - // Populate executable filenames list (Long filename and short filename) for searching - Common::StringArray exeNames; - exeNames.push_back(Common::String(exeInfo->exePrefix) + ".SYS16"); - exeNames.push_back(Common::String(exeInfo->exePrefix) + ".SYS"); + // Find the executable file and the wavetable file + Common::ArchiveMemberList exeNames, waveNames; + SearchMan.listMatchingMembers(exeNames, "*.SYS16"); + SearchMan.listMatchingMembers(exeNames, "*.SYS"); + SearchMan.listMatchingMembers(waveNames, "SIERRASTANDARD"); + SearchMan.listMatchingMembers(waveNames, "SIERRAST"); - // Populate wave filenames list (Long filename and short filename) for searching - Common::StringArray waveNames; - waveNames.push_back("SIERRASTANDARD"); - waveNames.push_back("SIERRAST"); - - // Search for the executable file and the wave file (i.e. check if any of the filenames match) - Common::FSList::const_iterator exeFsnode, waveFsnode; - exeFsnode = Common::find_if(fslist.begin(), fslist.end(), fsnodeNameEqualsIgnoreCase(exeNames)); - waveFsnode = Common::find_if(fslist.begin(), fslist.end(), fsnodeNameEqualsIgnoreCase(waveNames)); - - // Make sure that we found the executable file - if (exeFsnode == fslist.end()) { - warning("Couldn't find Apple IIGS game executable (%s), not loading instruments", exeNames.begin()->c_str()); + if (exeNames.empty()) { + warning("Couldn't find Apple IIGS game executable (*.SYS16 or *.SYS), not loading instruments"); return false; } - - // Make sure that we found the wave file - if (waveFsnode == fslist.end()) { - warning("Couldn't find Apple IIGS wave file (%s), not loading instruments", waveNames.begin()->c_str()); + if (waveNames.empty()) { + warning("Couldn't find Apple IIGS wave file (SIERRASTANDARD or SIERRAST), not loading instruments"); return false; } + Common::String exeName = exeNames.front()->getName(); + Common::String waveName = waveNames.front()->getName(); + // Set the MIDI program change to instrument number mapping and // load the instrument headers and their sample data. - // None of the tested SIERRASTANDARD-files have zeroes in them so - // there's no need to check for prematurely ending samples here. setProgramChangeMapping(exeInfo->instSet->progToInst); - return loadWaveFile(*waveFsnode, *exeInfo) && loadInstrumentHeaders(*exeFsnode, *exeInfo); + return loadWaveFile(waveName, *exeInfo) && loadInstrumentHeaders(exeName, *exeInfo); } /** Older Apple IIGS AGI MIDI program change to instrument number mapping. */ -static const MidiProgramChangeMapping progToInstMappingV1 = { +static const IIgsMidiProgramMapping progToInstMappingV1 = { {19, 20, 22, 23, 21, 24, 5, 5, 5, 5, 6, 7, 10, 9, 11, 9, 15, 8, 5, 5, 17, 16, 18, 12, 14, 5, 5, 5, 5, 5, @@ -778,8 +633,9 @@ static const MidiProgramChangeMapping progToInstMappingV1 = { 5 }; -/** Newer Apple IIGS AGI MIDI program change to instrument number mapping. */ -static const MidiProgramChangeMapping progToInstMappingV2 = { +/** Newer Apple IIGS AGI MIDI program change to instrument number mapping. + FIXME: Some instrument choices sound wrong. */ +static const IIgsMidiProgramMapping progToInstMappingV2 = { {21, 22, 24, 25, 23, 26, 6, 6, 6, 6, 7, 9, 12, 8, 13, 11, 17, 10, 6, 6, 19, 18, 20, 14, 16, 6, 6, 6, 6, 6, @@ -788,13 +644,39 @@ static const MidiProgramChangeMapping progToInstMappingV2 = { 6 }; -/** Older Apple IIGS AGI instrument set. Used only by Space Quest I (AGI v1.002). */ -static const InstrumentSetInfo instSetV1 = { +// Older Apple IIGS AGI instrument set. Used only by Space Quest I (AGI v1.002). +// +// Instrument 0 uses vibrato. +// Instrument 1 uses vibrato. +// Instrument 3 uses vibrato. +// Instrument 5 has swap mode enabled for the first oscillator. +// Instruemnt 9 uses vibrato. +// Instrument 10 uses vibrato. +// Instrument 12 uses vibrato. +// Instrument 15 uses vibrato. +// Instrument 16 uses vibrato. +// Instrument 18 uses vibrato. +static const IIgsInstrumentSetInfo instSetV1 = { 1192, 26, "7ee16bbc135171ffd6b9120cc7ff1af2", "edd3bf8905d9c238e02832b732fb2e18", &progToInstMappingV1 }; -/** Newer Apple IIGS AGI instrument set (AGI v1.003+). Used by all others than Space Quest I. */ -static const InstrumentSetInfo instSetV2 = { +// Newer Apple IIGS AGI instrument set (AGI v1.003+). Used by all others than Space Quest I. +// +// Instrument 0 uses vibrato. +// Instrument 1 uses vibrato. +// Instrument 3 uses vibrato. +// Instrument 6 has swap mode enabled for the first oscillator. +// Instrument 11 uses vibrato. +// Instrument 12 uses vibrato. +// Instrument 14 uses vibrato. +// Instrument 17 uses vibrato. +// Instrument 18 uses vibrato. +// Instrument 20 uses vibrato. +// +// In KQ1 intro and in LSL intro one (and the same, or at least similar) +// instrument is using vibrato. In PQ intro there is also one instrument +// using vibrato. +static const IIgsInstrumentSetInfo instSetV2 = { 1292, 28, "b7d428955bb90721996de1cbca25e768", "c05fb0b0e11deefab58bc68fbd2a3d07", &progToInstMappingV2 }; @@ -826,15 +708,14 @@ const IIgsExeInfo *SoundGen2GS::getIIgsExeInfo(enum AgiGameID gameid) const { return NULL; } -bool SoundGen2GS::loadInstrumentHeaders(const Common::FSNode &exePath, const IIgsExeInfo &exeInfo) { - bool loadedOk = false; // Was loading successful? +bool SoundGen2GS::loadInstrumentHeaders(Common::String &exePath, const IIgsExeInfo &exeInfo) { Common::File file; // Open the executable file and check that it has correct size file.open(exePath); if (file.size() != (int32)exeInfo.exeSize) { debugC(3, kDebugLevelSound, "Apple IIGS executable (%s) has wrong size (Is %d, should be %d)", - exePath.getPath().c_str(), file.size(), exeInfo.exeSize); + exePath.c_str(), file.size(), exeInfo.exeSize); } // Read the whole executable file into memory @@ -842,50 +723,49 @@ bool SoundGen2GS::loadInstrumentHeaders(const Common::FSNode &exePath, const IIg file.close(); // Check that we got enough data to be able to parse the instruments - if (data && data->size() >= (int32)(exeInfo.instSetStart + exeInfo.instSet->byteCount)) { - // Check instrument set's length (The info's saved in the executable) - data->seek(exeInfo.instSetStart - 4); - uint16 instSetByteCount = data->readUint16LE(); - if (instSetByteCount != exeInfo.instSet->byteCount) { - debugC(3, kDebugLevelSound, "Wrong instrument set size (Is %d, should be %d) in Apple IIGS executable (%s)", - instSetByteCount, exeInfo.instSet->byteCount, exePath.getPath().c_str()); - } + if (!data || data->size() < (int32)(exeInfo.instSetStart + exeInfo.instSet->byteCount)) { + warning("Error loading instruments from Apple IIGS executable (%s)", exePath.c_str()); + return false; + } - // Check instrument set's md5sum - data->seek(exeInfo.instSetStart); + // Check instrument set's length (The info's saved in the executable) + data->seek(exeInfo.instSetStart - 4); + uint16 instSetByteCount = data->readUint16LE(); + if (instSetByteCount != exeInfo.instSet->byteCount) { + debugC(3, kDebugLevelSound, "Wrong instrument set size (Is %d, should be %d) in Apple IIGS executable (%s)", + instSetByteCount, exeInfo.instSet->byteCount, exePath.c_str()); + } - Common::String md5str = Common::computeStreamMD5AsString(*data, exeInfo.instSet->byteCount); - if (md5str != exeInfo.instSet->md5) { - warning("Unknown Apple IIGS instrument set (md5: %s) in %s, trying to use it nonetheless", - md5str.c_str(), exePath.getPath().c_str()); - } + // Check instrument set's md5sum + data->seek(exeInfo.instSetStart); + Common::String md5str = Common::computeStreamMD5AsString(*data, exeInfo.instSet->byteCount); + if (md5str != exeInfo.instSet->md5) { + warning("Unknown Apple IIGS instrument set (md5: %s) in %s, trying to use it nonetheless", + md5str.c_str(), exePath.c_str()); + } - // Read in the instrument set one instrument at a time - data->seek(exeInfo.instSetStart); + // Read in the instrument set one instrument at a time + data->seek(exeInfo.instSetStart); - // Load the instruments - _instruments.clear(); - _instruments.reserve(exeInfo.instSet->instCount); + _instruments.clear(); + _instruments.reserve(exeInfo.instSet->instCount); - IIgsInstrumentHeader instrument; - for (uint i = 0; i < exeInfo.instSet->instCount; i++) { - if (!instrument.read(*data)) { - warning("Error loading Apple IIGS instrument (%d. of %d) from %s, not loading more instruments", - i + 1, exeInfo.instSet->instCount, exePath.getPath().c_str()); - break; - } - _instruments.push_back(instrument); // Add the successfully loaded instrument to the instruments array + IIgsInstrumentHeader instrument; + for (uint i = 0; i < exeInfo.instSet->instCount; i++) { + if (!instrument.read(*data)) { + warning("Error loading Apple IIGS instrument (%d. of %d) from %s, not loading more instruments", + i + 1, exeInfo.instSet->instCount, exePath.c_str()); + break; } + instrument.finalize(_wavetable); + _instruments.push_back(instrument); + } - // Loading was successful only if all instruments were loaded successfully - loadedOk = (_instruments.size() == exeInfo.instSet->instCount); - } else // Couldn't read enough data from the executable file - warning("Error loading instruments from Apple IIGS executable (%s)", exePath.getPath().c_str()); - - return loadedOk; + // Loading was successful only if all instruments were loaded successfully + return (_instruments.size() == exeInfo.instSet->instCount); } -bool SoundGen2GS::loadWaveFile(const Common::FSNode &wavePath, const IIgsExeInfo &exeInfo) { +bool SoundGen2GS::loadWaveFile(Common::String &wavePath, const IIgsExeInfo &exeInfo) { Common::File file; // Open the wave file and read it into memory @@ -894,23 +774,22 @@ bool SoundGen2GS::loadWaveFile(const Common::FSNode &wavePath, const IIgsExeInfo file.close(); // Check that we got the whole wave file - if (uint8Wave && uint8Wave->size() == SIERRASTANDARD_SIZE) { - // Check wave file's md5sum - Common::String md5str = Common::computeStreamMD5AsString(*uint8Wave, SIERRASTANDARD_SIZE); - if (md5str != exeInfo.instSet->waveFileMd5) { - warning("Unknown Apple IIGS wave file (md5: %s, game: %s).\n" \ + if (!uint8Wave || (uint8Wave->size() != SIERRASTANDARD_SIZE)) { + warning("Error loading Apple IIGS wave file (%s), not loading instruments", wavePath.c_str()); + return false; + } + + // Check wave file's md5sum + Common::String md5str = Common::computeStreamMD5AsString(*uint8Wave, SIERRASTANDARD_SIZE); + if (md5str != exeInfo.instSet->waveFileMd5) { + warning("Unknown Apple IIGS wave file (md5: %s, game: %s).\n" \ "Please report the information on the previous line to the ScummVM team.\n" \ "Using the wave file as it is - music may sound weird", md5str.c_str(), exeInfo.exePrefix); - } - - uint8Wave->seek(0); // Seek wave to its start - // Convert the wave file from 8-bit unsigned to 8-bit signed and save the result - _wave.resize(uint8Wave->size()); - return convertWave(*uint8Wave, _wave.begin(), uint8Wave->size()); - } else { // Couldn't read the wave file or it had incorrect size - warning("Error loading Apple IIGS wave file (%s), not loading instruments", wavePath.getPath().c_str()); - return false; } + + // Convert the wave file to 8-bit signed and save the result + uint8Wave->seek(0); + return convertWave(*uint8Wave, _wavetable, SIERRASTANDARD_SIZE); } } // End of namespace Agi diff --git a/engines/agi/sound_2gs.h b/engines/agi/sound_2gs.h index d9c7b8d2f1..1a225300ae 100644 --- a/engines/agi/sound_2gs.h +++ b/engines/agi/sound_2gs.h @@ -28,45 +28,30 @@ namespace Agi { -#define BUFFER_SIZE 410 - -// Apple IIGS MIDI uses 60 ticks per second (Based on tests with Apple IIGS -// KQ1 and SQ1 under MESS 0.124a). So we make the audio buffer size to be a -// 1/60th of a second in length. That should be getSampleRate() / 60 samples -// in length but as getSampleRate() is always 22050 at the moment we just use -// the hardcoded value of 368 (22050/60 = 367.5 which rounds up to 368). -// FIXME: Use getSampleRate() / 60 rather than a hardcoded value -#define IIGS_BUFFER_SIZE 368 - -// MIDI command values (Shifted right by 4 so they're in the lower nibble) -#define MIDI_CMD_NOTE_OFF 0x08 -#define MIDI_CMD_NOTE_ON 0x09 -#define MIDI_CMD_CONTROLLER 0x0B -#define MIDI_CMD_PROGRAM_CHANGE 0x0C -#define MIDI_CMD_PITCH_WHEEL 0x0E -// Whole MIDI byte values (Command and channel info together) -#define MIDI_BYTE_STOP_SEQUENCE 0xFC -#define MIDI_BYTE_TIMER_SYNC 0xF8 - -struct IIgsEnvelopeSegment { - uint8 bp; - uint16 inc; ///< 8b.8b fixed point, very probably little endian -}; - -#define ENVELOPE_SEGMENT_COUNT 8 -struct IIgsEnvelope { - IIgsEnvelopeSegment seg[ENVELOPE_SEGMENT_COUNT]; - - /** Reads an Apple IIGS envelope from then given stream. */ - bool read(Common::SeekableReadStream &stream); -}; - -// 2**(1/12) i.e. the 12th root of 2 -#define SEMITONE 1.059463094359295 - -// C6's frequency is A4's (440 Hz) frequency but one full octave and three semitones higher -// i.e. C6_FREQ = 440 * pow(2.0, 15/12.0) -#define C6_FREQ 1046.502261202395 +// Sample data in SIERRASTANDARD files is in unsigned 8-bit format. A zero +// occurring in the sample data causes the ES5503 wavetable sound chip in +// Apple IIGS to halt the corresponding oscillator immediately. We preprocess +// the sample data by converting it to signed values and the instruments by +// detecting prematurely stopping samples beforehand. +// +// Note: None of the tested SIERRASTANDARD files have zeroes in them. So in +// practice there is no need to check for them. However, they still do exist +// in the sample resources. +#define ZERO_OFFSET 0x80 + +// Apple IIGS envelope update frequency defaults to 100Hz. It can be changed, +// so there might be differences per game, for example. +#define ENVELOPE_COEF 100 / _sampleRate + +// MIDI player commands +#define MIDI_NOTE_OFF 0x8 +#define MIDI_NOTE_ON 0x9 +#define MIDI_CONTROLLER 0xB +#define MIDI_PROGRAM_CHANGE 0xC +#define MIDI_PITCH_WHEEL 0xE + +#define MIDI_STOP_SEQUENCE 0xFC +#define MIDI_TIMER_SYNC 0xF8 // Size of the SIERRASTANDARD file (i.e. the wave file i.e. the sample data used by the instruments). #define SIERRASTANDARD_SIZE 65536 @@ -75,63 +60,36 @@ struct IIgsEnvelope { // Chosen empirically based on Apple IIGS AGI game data, increase if needed. #define MAX_INSTRUMENTS 28 -struct IIgsWaveInfo { - uint8 top; - uint addr; - uint size; -// Oscillator channel -#define OSC_CHANNEL_RIGHT 0 -#define OSC_CHANNEL_LEFT 1 - uint channel; -// Oscillator mode -#define OSC_MODE_LOOP 0 -#define OSC_MODE_ONESHOT 1 -#define OSC_MODE_SYNC_AM 2 -#define OSC_MODE_SWAP 3 - uint mode; - bool halt; - int16 relPitch; ///< Relative pitch in semitones (Signed 8b.8b fixed point) - - /** Reads an Apple IIGS wave information structure from the given stream. */ - bool read(Common::SeekableReadStream &stream, bool ignoreAddr = false); - bool finalize(Common::SeekableReadStream &uint8Wave); -}; - -// Number of waves per Apple IIGS sound oscillator -#define WAVES_PER_OSCILLATOR 2 - -/** An Apple IIGS sound oscillator. Consists always of two waves. */ -struct IIgsOscillator { - IIgsWaveInfo waves[WAVES_PER_OSCILLATOR]; - - bool finalize(Common::SeekableReadStream &uint8Wave); -}; - -// Maximum number of oscillators in an Apple IIGS instrument. -// Chosen empirically based on Apple IIGS AGI game data, increase if needed. -#define MAX_OSCILLATORS 4 - -/** An Apple IIGS sound oscillator list. */ -struct IIgsOscillatorList { - uint count; ///< Oscillator count - IIgsOscillator osc[MAX_OSCILLATORS]; ///< The oscillators - - /** Indexing operators for easier access to the oscillators. */ - const IIgsOscillator &operator()(uint index) const { return osc[index]; } - IIgsOscillator &operator()(uint index) { return osc[index]; } +// The MIDI player allocates one generator for each note it starts to play. +// Here the maximum number of generators is defined. Feel free to increase +// this if it does not seem to be enough. +#define MAX_GENERATORS 16 - /** Reads an Apple IIGS oscillator list from the given stream. */ - bool read(Common::SeekableReadStream &stream, uint oscillatorCount, bool ignoreAddr = false); - bool finalize(Common::SeekableReadStream &uint8Wave); -}; +#define ENVELOPE_SEGMENT_COUNT 8 +#define MAX_OSCILLATOR_WAVES 127 // Maximum is one for every MIDI key struct IIgsInstrumentHeader { - IIgsEnvelope env; - uint8 relseg; - uint8 bendrange; - uint8 vibdepth; - uint8 vibspeed; - IIgsOscillatorList oscList; + struct { + frac_t bp; ///< Envelope segment breakpoint + frac_t inc; ///< Envelope segment velocity + } env[ENVELOPE_SEGMENT_COUNT]; + uint8 seg; ///< Envelope release segment + uint8 bend; ///< Maximum range for pitch bend + uint8 vibDepth; ///< Vibrato depth + uint8 vibSpeed; ///< Vibrato speed + uint8 waveCount[2]; ///< Wave count for both generators + struct { + uint8 key; ///< Highest MIDI key to use this wave + int offset; ///< Offset of wave data, relative to base + uint size; ///< Wave size + bool halt; ///< Oscillator halted? + bool loop; ///< Loop mode? + bool swap; ///< Swap mode? + bool chn; ///< Output channel (left / right) + int16 tune; ///< Fine tune in semitones (8.8 fixed point) + } wave[2][MAX_OSCILLATOR_WAVES]; + + int8* base; ///< Base of wave data /** * Read an Apple IIGS instrument header from the given stream. @@ -140,7 +98,7 @@ struct IIgsInstrumentHeader { * @return True if successful, false otherwise. */ bool read(Common::SeekableReadStream &stream, bool ignoreAddr = false); - bool finalize(Common::SeekableReadStream &uint8Wave); + bool finalize(int8 *); }; struct IIgsSampleHeader { @@ -159,33 +117,29 @@ struct IIgsSampleHeader { * @return True if successful, false otherwise. */ bool read(Common::SeekableReadStream &stream); - bool finalize(Common::SeekableReadStream &uint8Wave); + bool finalize(int8 *sample); }; -struct IIgsChannelInfo { - const IIgsInstrumentHeader *ins; ///< Instrument info - const int8 *relocatedSample; ///< Source sample data (8-bit signed format) using relocation - const int8 *unrelocatedSample; ///< Source sample data (8-bit signed format) without relocation - frac_t pos; ///< Current sample position - frac_t posAdd; ///< Current sample position adder (Calculated using note, vibrato etc) - uint8 origNote; ///< The original note without the added relative pitch - frac_t note; ///< Note (With the added relative pitch) - frac_t vol; ///< Current volume (Takes both channel volume and enveloping into account) - frac_t chanVol; ///< Channel volume - frac_t startEnvVol; ///< Starting envelope volume - frac_t envVol; ///< Current envelope volume - uint envSeg; ///< Current envelope segment - uint size; ///< Sample size - bool loop; ///< Should we loop the sample? - bool end; ///< Has the playing ended? - - void rewind(); ///< Rewinds the sound playing on this channel to its start - void setChannelVolume(uint8 volume); ///< Sets the channel volume - void setInstrument(const IIgsInstrumentHeader *instrument, const int8 *sample); ///< Sets the instrument to be used on this channel - void noteOn(uint8 noteParam, uint8 velocity); ///< Starts playing a note on this channel - void noteOff(uint8 velocity); ///< Releases the note on this channel - void stop(); ///< Stops the note playing on this channel instantly - bool playing(); ///< Is there a note playing on this channel? +class IIgsGenerator { +public: + IIgsGenerator() : ins(NULL), key(-1), chn(-1) {} + + const IIgsInstrumentHeader *ins; ///< Currently used instrument + int key; ///< MIDI key + int vel; ///< MIDI velocity (& channel volume) + int chn; ///< MIDI channel + struct { + int8 *base; ///< Sample base pointer + uint size; ///< Sample size + frac_t p; ///< Sample pointer + frac_t pd; ///< Sample pointer delta + bool halt; ///< Is oscillator halted? + bool loop; ///< Is looping enabled? + bool swap; ///< Is swapping enabled? + bool chn; ///< Output channel (left / right) + } osc[2]; + int seg; ///< Current envelope segment + frac_t a; ///< Current envelope amplitude }; class IIgsMidi : public AgiSound { @@ -195,15 +149,14 @@ public: virtual uint16 type() { return _type; } virtual const uint8 *getPtr() { return _ptr; } virtual void setPtr(const uint8 *ptr) { _ptr = ptr; } - virtual void rewind() { _ptr = _data + 2; _midiTicks = _soundBufTicks = 0; } + virtual void rewind() { _ptr = _data + 2; _ticks = 0; } protected: uint8 *_data; ///< Raw sound resource data const uint8 *_ptr; ///< Pointer to the current position in the MIDI data uint32 _len; ///< Length of the raw sound resource uint16 _type; ///< Sound resource type public: - uint _midiTicks; ///< MIDI song position in ticks (1/60ths of a second) - uint _soundBufTicks; ///< Sound buffer position in ticks (1/60ths of a second) + uint _ticks; ///< MIDI song position in ticks (1/60ths of a second) }; class IIgsSample : public AgiSound { @@ -214,12 +167,12 @@ public: const IIgsSampleHeader &getHeader() const { return _header; } const int8 *getSample() const { return _sample; } protected: - IIgsSampleHeader _header; ///< Apple IIGS AGI sample header - int8 *_sample; ///< Sample data (8-bit signed format) + IIgsSampleHeader _header; ///< Apple IIGS AGI sample header + int8 *_sample; ///< Sample data (8-bit signed format) }; /** Apple IIGS MIDI program change to instrument number mapping. */ -struct MidiProgramChangeMapping { +struct IIgsMidiProgramMapping { byte midiProgToInst[44]; ///< Lookup table for the MIDI program number to instrument number mapping byte undefinedInst; ///< The undefined instrument number @@ -230,42 +183,34 @@ struct MidiProgramChangeMapping { }; /** Apple IIGS AGI instrument set information. */ -struct InstrumentSetInfo { - uint byteCount; ///< Length of the whole instrument set in bytes - uint instCount; ///< Amount of instrument in the set - const char *md5; ///< MD5 hex digest of the whole instrument set +struct IIgsInstrumentSetInfo { + uint byteCount; ///< Length of the whole instrument set in bytes + uint instCount; ///< Amount of instrument in the set + const char *md5; ///< MD5 hex digest of the whole instrument set const char *waveFileMd5; ///< MD5 hex digest of the wave file (i.e. the sample data used by the instruments) - const MidiProgramChangeMapping *progToInst; ///< Program change to instrument number mapping + const IIgsMidiProgramMapping *progToInst; ///< Program change to instrument number mapping }; /** Apple IIGS AGI executable file information. */ struct IIgsExeInfo { - enum AgiGameID gameid; ///< Game ID - const char *exePrefix; ///< Prefix of the Apple IIGS AGI executable (e.g. "SQ", "PQ", "KQ4" etc) - uint agiVer; ///< Apple IIGS AGI version number, not strictly needed - uint exeSize; ///< Size of the Apple IIGS AGI executable file in bytes - uint instSetStart; ///< Starting offset of the instrument set inside the executable file - const InstrumentSetInfo *instSet; ///< Information about the used instrument set + enum AgiGameID gameid; ///< Game ID + const char *exePrefix; ///< Prefix of the Apple IIGS AGI executable (e.g. "SQ", "PQ", "KQ4" etc) + uint agiVer; ///< Apple IIGS AGI version number, not strictly needed + uint exeSize; ///< Size of the Apple IIGS AGI executable file in bytes + uint instSetStart; ///< Starting offset of the instrument set inside the executable file + const IIgsInstrumentSetInfo *instSet; ///< Information about the used instrument set }; class IIgsMidiChannel { public: - IIgsMidiChannel() : _instrument(0), _sample(0), _volume(0) {} - uint activeSounds() const; ///< How many active sounds are playing? - void setInstrument(const IIgsInstrumentHeader *instrument, const int8 *sample); - void setVolume(uint8 volume); - void noteOff(uint8 note, uint8 velocity); - void noteOn(uint8 note, uint8 velocity); - void stopSounds(); ///< Clears the channel of any sounds - void removeStoppedSounds(); ///< Removes all stopped sounds from this MIDI channel -public: - typedef Common::Array<IIgsChannelInfo>::const_iterator const_iterator; - typedef Common::Array<IIgsChannelInfo>::iterator iterator; - Common::Array<IIgsChannelInfo> _gsChannels; ///< Apple IIGS channels playing on this MIDI channel -protected: + IIgsMidiChannel() : _instrument(NULL), _volume(127) {} + void setInstrument(const IIgsInstrumentHeader *instrument) { _instrument = instrument; } + const IIgsInstrumentHeader* getInstrument() { return _instrument; } + void setVolume(int volume) { _volume = volume; } + int getVolume() { return _volume; } +private: const IIgsInstrumentHeader *_instrument; ///< Instrument used on this MIDI channel - const int8 *_sample; ///< Sample data used on this MIDI channel - uint8 _volume; ///< MIDI controller number 7 (Volume) + int _volume; ///< MIDI controller number 7 (Volume) }; class SoundGen2GS : public SoundGen, public Audio::AudioStream { @@ -276,73 +221,50 @@ public: void play(int resnum); void stop(void); - // AudioStream API int readBuffer(int16 *buffer, const int numSamples); - bool isStereo() const { - return false; - } - - bool endOfData() const { - return false; - } - - int getRate() const { - // FIXME: Ideally, we should use _sampleRate. - return 22050; - } + bool isStereo() const { return true; } + bool endOfData() const { return false; } + int getRate() const { return _sampleRate; } private: - bool _disabledMidi; - int _playingSound; - bool _playing; - - int16 *_sndBuffer; - -/** - * Class for managing Apple IIGS sound channels. - * TODO: Check what instruments are used by default on the MIDI channels - * FIXME: Some instrument choices sound wrong - */ -private: - typedef Common::Array<IIgsMidiChannel>::const_iterator const_iterator; - typedef Common::Array<IIgsMidiChannel>::iterator iterator; - static const uint kSfxMidiChannel = 0; ///< The MIDI channel used for playing sound effects - + // Loader methods bool loadInstruments(); - const IIgsExeInfo *getIIgsExeInfo(enum AgiGameID gameid) const; + bool loadInstrumentHeaders(Common::String &exePath, const IIgsExeInfo &exeInfo); + bool loadWaveFile(Common::String &wavePath, const IIgsExeInfo &exeInfo); - void setProgramChangeMapping(const MidiProgramChangeMapping *mapping); - bool loadInstrumentHeaders(const Common::FSNode &exePath, const IIgsExeInfo &exeInfo); - bool loadWaveFile(const Common::FSNode &wavePath, const IIgsExeInfo &exeInfo); - - // Miscellaneous methods - void fillAudio(int16 *stream, uint len); - uint32 mixSound(); - void playSound(); - uint activeSounds() const; ///< How many active sounds are playing? - void stopSounds(); ///< Stops all sounds - void removeStoppedSounds(); ///< Removes all stopped sounds from the MIDI channels - - // For playing Apple IIGS AGI samples (Sound effects etc) - bool playSampleSound(const IIgsSampleHeader &sampleHeader, const int8 *sample); - void playMidiSound(); - void playSampleSound(); - - // MIDI commands - void midiNoteOff(uint8 channel, uint8 note, uint8 velocity); - void midiNoteOn(uint8 channel, uint8 note, uint8 velocity); - void midiController(uint8 channel, uint8 controller, uint8 value); - void midiProgramChange(uint8 channel, uint8 program); - void midiPitchWheel(uint8 wheelPos); - //protected: - const IIgsInstrumentHeader* getInstrument(uint8 program) const; - //public: - Common::Array<IIgsMidiChannel> _midiChannels; ///< Information about each MIDI channel - //protected: - Common::Array<int8> _wave; ///< Sample data used by the Apple IIGS MIDI instruments - const MidiProgramChangeMapping *_midiProgToInst; ///< MIDI program change to instrument number mapping - Common::Array<IIgsInstrumentHeader> _instruments; ///< Instruments used by the Apple IIGS AGI + const IIgsExeInfo *getIIgsExeInfo(enum AgiGameID gameid) const; + void setProgramChangeMapping(const IIgsMidiProgramMapping *mapping); + + // Player methods + void advancePlayer(); ///< Advance the player + void advanceMidiPlayer(); ///< Advance MIDI player + uint generateOutput(); ///< Fill the output buffer + + void haltGenerators(); ///< Halt all generators + uint activeGenerators(); ///< How many generators are active? + + void midiNoteOff(int channel, int note, int velocity); + void midiNoteOn(int channel, int note, int velocity); + double midiKeyToFreq(int key, double finetune); + IIgsInstrumentHeader* getInstrument(uint8 program) { return &_instruments[_progToInst->map(program)]; }; + IIgsGenerator* allocateGenerator() { IIgsGenerator* g = &_generators[_nextGen++]; _nextGen %= 16; return g; } + + bool _disableMidi; ///< Disable MIDI if loading instruments fail + int _playingSound; ///< Resource number for the currently playing sound + bool _playing; ///< True when the resource is still playing + + IIgsGenerator _generators[MAX_GENERATORS]; ///< IIGS sound generators that are used to play single notes + uint _nextGen; ///< Next generator available for allocation + IIgsMidiChannel _channels[16]; ///< MIDI channels + Common::Array<IIgsInstrumentHeader> _instruments; ///< Instrument data + const IIgsMidiProgramMapping *_progToInst; ///< MIDI program number to instrument mapping + int8 *_wavetable; ///< Sample data used by the instruments + uint _ticks; ///< MIDI ticks (60Hz) + int16 *_out; ///< Output buffer + uint _outSize; ///< Output buffer size + + static const int kSfxMidiChannel = 15; ///< MIDI channel used for playing sample resources }; } // End of namespace Agi diff --git a/engines/agi/sound_pcjr.cpp b/engines/agi/sound_pcjr.cpp index 319b7049ed..fdebf16b1a 100644 --- a/engines/agi/sound_pcjr.cpp +++ b/engines/agi/sound_pcjr.cpp @@ -219,6 +219,7 @@ int SoundGenPCJr::volumeCalc(SndGenChan *chan) { // return 0 if it's passing more data // return -1 if it's passing nothing (end of data) int SoundGenPCJr::getNextNote(int ch, Tone *tone) { + ToneChan *tpcm; SndGenChan *chan; const byte *data; @@ -228,6 +229,7 @@ int SoundGenPCJr::getNextNote(int ch, Tone *tone) { if (!_vm->getflag(fSoundOn)) return -1; + tpcm = &_tchannel[ch]; chan = &_channel[ch]; if (!chan->avail) return -1; @@ -241,6 +243,9 @@ int SoundGenPCJr::getNextNote(int ch, Tone *tone) { // if it's 0 then it's not going to be played // if it's 0xFFFF then the channel data has finished. if ((chan->duration != 0) && (chan->duration != 0xFFFF)) { + tpcm->genTypePrev = -1; + tpcm->freqCountPrev = -1; + // only tone channels dissolve if ((ch != 3) && (_dissolveMethod != 0)) // != noise?? chan->dissolveCount = 0; diff --git a/engines/agi/text.cpp b/engines/agi/text.cpp index fedfd29362..82a2340ad6 100644 --- a/engines/agi/text.cpp +++ b/engines/agi/text.cpp @@ -504,17 +504,16 @@ int AgiEngine::print(const char *p, int lin, int col, int len) { * */ void AgiEngine::printStatus(const char *message, ...) { - char x[42]; va_list args; va_start(args, message); - vsprintf(x, message, args); + Common::String x = Common::String::vformat(message, args); va_end(args); debugC(4, kDebugLevelText, "fg=%d, bg=%d", STATUS_FG, STATUS_BG); - printText(x, 0, 0, _game.lineStatus, 40, STATUS_FG, STATUS_BG); + printText(x.c_str(), 0, 0, _game.lineStatus, 40, STATUS_FG, STATUS_BG); } static void safeStrcat(Common::String &p, const char *t) { diff --git a/engines/agos/animation.cpp b/engines/agos/animation.cpp index eb78ca3d9b..d9a585bd05 100644 --- a/engines/agos/animation.cpp +++ b/engines/agos/animation.cpp @@ -29,6 +29,7 @@ #include "common/file.h" #include "common/system.h" #include "common/textconsole.h" +#include "common/translation.h" #include "graphics/cursorman.h" #include "graphics/palette.h" @@ -540,10 +541,8 @@ MoviePlayer *makeMoviePlayer(AGOSEngine_Feeble *vm, const char *name) { return new MoviePlayerSMK(vm, baseName); } - char buf[60]; - - sprintf(buf, "Cutscene file '%s' not found!", baseName); - GUI::MessageDialog dialog(buf, "OK"); + Common::String buf = Common::String::format(_("Cutscene file '%s' not found!"), baseName); + GUI::MessageDialog dialog(buf, _("OK")); dialog.runModal(); return NULL; diff --git a/engines/agos/detection.cpp b/engines/agos/detection.cpp index 629a5d63fc..2be888b92a 100644 --- a/engines/agos/detection.cpp +++ b/engines/agos/detection.cpp @@ -23,6 +23,7 @@ #include "base/plugins.h" #include "engines/advancedDetector.h" +#include "engines/obsolete.h" #include "common/config-manager.h" #include "common/savefile.h" #include "common/system.h" @@ -48,7 +49,7 @@ struct AGOSGameDescription { * corresponding new target and platform combination. * */ -static const ADObsoleteGameID obsoleteGameIDsTable[] = { +static const Engines::ObsoleteGameID obsoleteGameIDsTable[] = { {"simon1acorn", "simon1", Common::kPlatformAcorn}, {"simon1amiga", "simon1", Common::kPlatformAmiga}, {"simon1cd32", "simon1", Common::kPlatformAmiga}, @@ -63,7 +64,7 @@ static const ADObsoleteGameID obsoleteGameIDsTable[] = { {0, 0, Common::kPlatformUnknown} }; -static const PlainGameDescriptor simonGames[] = { +static const PlainGameDescriptor agosGames[] = { {"pn", "Personal Nightmare"}, {"elvira1", "Elvira - Mistress of the Dark"}, {"elvira2", "Elvira II - The Jaws of Cerberus"}, @@ -87,36 +88,19 @@ static const char *directoryGlobs[] = { 0 }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)AGOS::gameDescriptions, - // Size of that superset structure - sizeof(AGOS::AGOSGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - simonGames, - // Structure for autoupgrading obsolete targets - obsoleteGameIDsTable, - // Name of single gameid (optional) - 0, - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NOLAUNCHLOAD, - // Maximum directory depth - 2, - // List of directory globs - directoryGlobs -}; - using namespace AGOS; class AgosMetaEngine : public AdvancedMetaEngine { public: - AgosMetaEngine() : AdvancedMetaEngine(detectionParams) {} + AgosMetaEngine() : AdvancedMetaEngine(AGOS::gameDescriptions, sizeof(AGOS::AGOSGameDescription), agosGames) { + _guioptions = Common::GUIO_NOLAUNCHLOAD; + _maxScanDepth = 2; + _directoryGlobs = directoryGlobs; + } + + virtual GameDescriptor findGame(const char *gameid) const { + return Engines::findGameID(gameid, _gameids, obsoleteGameIDsTable); + } virtual const char *getName() const { return "AGOS"; @@ -127,7 +111,13 @@ public: } virtual bool hasFeature(MetaEngineFeature f) const; + + virtual Common::Error createInstance(OSystem *syst, Engine **engine) const { + Engines::upgradeTargetIfNecessary(obsoleteGameIDsTable); + return AdvancedMetaEngine::createInstance(syst, engine); + } virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const; + virtual SaveStateList listSaves(const char *target) const; virtual int getMaximumSaveSlot() const; }; diff --git a/engines/agos/midi.cpp b/engines/agos/midi.cpp index 4459701d65..88f6dd80d1 100644 --- a/engines/agos/midi.cpp +++ b/engines/agos/midi.cpp @@ -150,7 +150,7 @@ void MidiPlayer::send(uint32 b) { // We have received a "Reset All Controllers" message // and passed it on to the MIDI driver. This may or may // not have affected the volume controller. To ensure - // consistent behaviour, explicitly set the volume to + // consistent behavior, explicitly set the volume to // what we think it should be. if (_current == &_sfx) diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index deab57d0e6..e6cce36b22 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -35,7 +35,7 @@ namespace AGOS { int AGOSEngine::countSaveGames() { - Common::InSaveFile *f; + Common::InSaveFile *f = NULL; Common::StringArray filenames; uint i = 1; char slot[4]; diff --git a/engines/agos/string.cpp b/engines/agos/string.cpp index 1cdd7f6d81..60e465fddf 100644 --- a/engines/agos/string.cpp +++ b/engines/agos/string.cpp @@ -723,11 +723,9 @@ void AGOSEngine_Feeble::printScreenText(uint vgaSpriteId, uint color, const char const char *string2 = string; int16 height, talkDelay; int stringLength = strlen(string); - int lettersPerRow; const int textHeight = 15; height = textHeight; - lettersPerRow = width / 6; talkDelay = (stringLength + 3) / 3; if (_variableArray[86] == 0) @@ -840,13 +838,12 @@ void AGOSEngine_Feeble::printInteractText(uint16 num, const char *string) { void AGOSEngine_Feeble::sendInteractText(uint16 num, const char *fmt, ...) { va_list arglist; - char string[256]; va_start(arglist, fmt); - vsprintf(string, fmt, arglist); + Common::String string = Common::String::vformat(fmt, arglist); va_end(arglist); - printInteractText(num, string); + printInteractText(num, string.c_str()); } #endif diff --git a/engines/agos/string_pn.cpp b/engines/agos/string_pn.cpp index 9656eb469e..570fbc6200 100644 --- a/engines/agos/string_pn.cpp +++ b/engines/agos/string_pn.cpp @@ -131,7 +131,7 @@ void AGOSEngine_PN::pcf(uint8 ch) { if (ch == 255) { _bp = 0; _xofs = 0; - return; /* pcf(255) initialises the routine */ + return; /* pcf(255) initializes the routine */ } /* pcf(254) flushes its working _buffer */ if (ch != 254) { if ((ch != 32) || (_bp + _xofs != 50)) diff --git a/engines/cine/cine.h b/engines/cine/cine.h index 371ea0dd1f..55376dce29 100644 --- a/engines/cine/cine.h +++ b/engines/cine/cine.h @@ -126,7 +126,7 @@ public: int modifyGameSpeed(int speedChange); int getTimerDelay() const; Common::Error loadGameState(int slot); - Common::Error saveGameState(int slot, const char *desc); + Common::Error saveGameState(int slot, const Common::String &desc); bool canLoadGameStateCurrently(); bool canSaveGameStateCurrently(); @@ -148,7 +148,7 @@ private: void resetEngine(); bool loadPlainSaveFW(Common::SeekableReadStream &in, CineSaveGameFormat saveGameFormat); bool loadTempSaveOS(Common::SeekableReadStream &in); - bool makeLoad(char *saveName); + bool makeLoad(const Common::String &saveName); void makeSaveFW(Common::OutSaveFile &out); void makeSaveOS(Common::OutSaveFile &out); void makeSave(char *saveFileName); diff --git a/engines/cine/detection.cpp b/engines/cine/detection.cpp index 0ef2c87288..cffeb29418 100644 --- a/engines/cine/detection.cpp +++ b/engines/cine/detection.cpp @@ -23,6 +23,7 @@ #include "base/plugins.h" #include "engines/advancedDetector.h" +#include "engines/obsolete.h" #include "common/system.h" #include "common/textconsole.h" @@ -52,7 +53,7 @@ static const PlainGameDescriptor cineGames[] = { {0, 0} }; -static const ADObsoleteGameID obsoleteGameIDsTable[] = { +static const Engines::ObsoleteGameID obsoleteGameIDsTable[] = { {"fw", "cine", Common::kPlatformUnknown}, {"os", "cine", Common::kPlatformUnknown}, {0, 0, Common::kPlatformUnknown} @@ -60,34 +61,16 @@ static const ADObsoleteGameID obsoleteGameIDsTable[] = { #include "cine/detection_tables.h" -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Cine::gameDescriptions, - // Size of that superset structure - sizeof(Cine::CINEGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - cineGames, - // Structure for autoupgrading obsolete targets - obsoleteGameIDsTable, - // Name of single gameid (optional) - "cine", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NOSPEECH | Common::GUIO_NOMIDI, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class CineMetaEngine : public AdvancedMetaEngine { public: - CineMetaEngine() : AdvancedMetaEngine(detectionParams) {} + CineMetaEngine() : AdvancedMetaEngine(Cine::gameDescriptions, sizeof(Cine::CINEGameDescription), cineGames) { + _singleid = "cine"; + _guioptions = Common::GUIO_NOSPEECH | Common::GUIO_NOMIDI; + } + + virtual GameDescriptor findGame(const char *gameid) const { + return Engines::findGameID(gameid, _gameids, obsoleteGameIDsTable); + } virtual const char *getName() const { return "Cine"; @@ -97,7 +80,12 @@ public: return "Future Wars & Operation Stealth (C) Delphine Software"; } + virtual Common::Error createInstance(OSystem *syst, Engine **engine) const { + Engines::upgradeTargetIfNecessary(obsoleteGameIDsTable); + return AdvancedMetaEngine::createInstance(syst, engine); + } virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const; + virtual bool hasFeature(MetaEngineFeature f) const; virtual SaveStateList listSaves(const char *target) const; virtual int getMaximumSaveSlot() const; @@ -185,10 +173,7 @@ void CineMetaEngine::removeSaveState(const char *target, int slot) const { memset(saveNames, 0, sizeof(saveNames)); Common::InSaveFile *in; - char tmp[80]; - - snprintf(tmp, 80, "%s.dir", target); - in = g_system->getSavefileManager()->openForLoading(tmp); + in = g_system->getSavefileManager()->openForLoading(Common::String::format("%s.dir", target)); if (!in) return; @@ -202,12 +187,10 @@ void CineMetaEngine::removeSaveState(const char *target, int slot) const { strncpy(saveNames[slot], slotName, 20); // Update savegame descriptions - char indexFile[80]; - snprintf(indexFile, 80, "%s.dir", target); - + Common::String indexFile = Common::String::format("%s.dir", target); Common::OutSaveFile *out = g_system->getSavefileManager()->openForSaving(indexFile); if (!out) { - warning("Unable to open file %s for saving", indexFile); + warning("Unable to open file %s for saving", indexFile.c_str()); return; } @@ -237,21 +220,20 @@ Common::Error CineEngine::loadGameState(int slot) { return gameLoaded ? Common::kNoError : Common::kUnknownError; } -Common::Error CineEngine::saveGameState(int slot, const char *desc) { +Common::Error CineEngine::saveGameState(int slot, const Common::String &desc) { // Load savegame descriptions from index file loadSaveDirectory(); // Set description for selected slot making sure it ends with a trailing zero - strncpy(currentSaveName[slot], desc, 20); + strncpy(currentSaveName[slot], desc.c_str(), 20); currentSaveName[slot][sizeof(CommandeType) - 1] = 0; // Update savegame descriptions - char indexFile[80]; - snprintf(indexFile, 80, "%s.dir", _targetName.c_str()); + Common::String indexFile = _targetName + ".dir"; Common::OutSaveFile *fHandle = _saveFileMan->openForSaving(indexFile); if (!fHandle) { - warning("Unable to open file %s for saving", indexFile); + warning("Unable to open file %s for saving", indexFile.c_str()); return Common::kUnknownError; } diff --git a/engines/cine/saveload.cpp b/engines/cine/saveload.cpp index 700875e302..0ea1a23e8f 100644 --- a/engines/cine/saveload.cpp +++ b/engines/cine/saveload.cpp @@ -460,10 +460,7 @@ void saveSeqList(Common::OutSaveFile &out) { bool CineEngine::loadSaveDirectory() { Common::InSaveFile *fHandle; - char tmp[80]; - - snprintf(tmp, 80, "%s.dir", _targetName.c_str()); - fHandle = _saveFileMan->openForLoading(tmp); + fHandle = _saveFileMan->openForLoading(Common::String::format("%s.dir", _targetName.c_str())); if (!fHandle) { return false; @@ -768,7 +765,7 @@ bool CineEngine::loadPlainSaveFW(Common::SeekableReadStream &in, CineSaveGameFor return !(in.eos() || in.err()); } -bool CineEngine::makeLoad(char *saveName) { +bool CineEngine::makeLoad(const Common::String &saveName) { Common::SharedPtr<Common::InSaveFile> saveFile(_saveFileMan->openForLoading(saveName)); if (!saveFile) { diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp index 1892a78cca..81e72d6905 100644 --- a/engines/cine/various.cpp +++ b/engines/cine/various.cpp @@ -440,13 +440,12 @@ void CineEngine::makeSystemMenu() { getMouseData(mouseUpdateStatus, (uint16 *)&mouseButton, (uint16 *)&mouseX, (uint16 *)&mouseY); if (!makeMenuChoice(confirmMenu, 2, mouseX, mouseY + 8, 100)) { - char saveString[256], tmp[80]; - - snprintf(tmp, 80, "%s.dir", _targetName.c_str()); + char saveString[256]; + Common::String tmp = Common::String::format("%s.dir", _targetName.c_str()); Common::OutSaveFile *fHandle = _saveFileMan->openForSaving(tmp); if (!fHandle) { - warning("Unable to open file %s for saving", tmp); + warning("Unable to open file %s for saving", tmp.c_str()); break; } diff --git a/engines/cruise/cruise.cpp b/engines/cruise/cruise.cpp index 1e0b7b1d7a..cf01d9bdbc 100644 --- a/engines/cruise/cruise.cpp +++ b/engines/cruise/cruise.cpp @@ -92,7 +92,7 @@ Common::Error CruiseEngine::run() { mainLoop(); - deinitialise(); + deinitialize(); return Common::kNoError; } @@ -118,7 +118,7 @@ void CruiseEngine::initialize() { _vm->_polyStruct = NULL; } -void CruiseEngine::deinitialise() { +void CruiseEngine::deinitialize() { _vm->_polyStructNorm.clear(); _vm->_polyStructExp.clear(); @@ -209,7 +209,7 @@ bool CruiseEngine::canLoadGameStateCurrently() { return playerMenuEnabled != 0; } -Common::Error CruiseEngine::saveGameState(int slot, const char *desc) { +Common::Error CruiseEngine::saveGameState(int slot, const Common::String &desc) { return saveSavegameData(slot, desc); } diff --git a/engines/cruise/cruise.h b/engines/cruise/cruise.h index a9eb39c3f2..900f677975 100644 --- a/engines/cruise/cruise.h +++ b/engines/cruise/cruise.h @@ -69,9 +69,8 @@ private: bool _speedFlag; void initialize(); - void deinitialise(); + void deinitialize(); bool loadLanguageStrings(); - bool makeLoad(char *saveName); void mainLoop(); int processInput(); protected: @@ -100,7 +99,7 @@ public: static const char *getSavegameFile(int saveGameIdx); virtual Common::Error loadGameState(int slot); virtual bool canLoadGameStateCurrently(); - virtual Common::Error saveGameState(int slot, const char *desc); + virtual Common::Error saveGameState(int slot, const Common::String &desc); virtual bool canSaveGameStateCurrently(); virtual void syncSoundSettings(); diff --git a/engines/cruise/detection.cpp b/engines/cruise/detection.cpp index 3bd0c1f76f..5be2fdeeea 100644 --- a/engines/cruise/detection.cpp +++ b/engines/cruise/detection.cpp @@ -217,34 +217,12 @@ static const CRUISEGameDescription gameDescriptions[] = { } -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Cruise::gameDescriptions, - // Size of that superset structure - sizeof(Cruise::CRUISEGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - cruiseGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "cruise", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NOSPEECH | Common::GUIO_NOMIDI, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class CruiseMetaEngine : public AdvancedMetaEngine { public: - CruiseMetaEngine() : AdvancedMetaEngine(detectionParams) {} + CruiseMetaEngine() : AdvancedMetaEngine(Cruise::gameDescriptions, sizeof(Cruise::CRUISEGameDescription), cruiseGames) { + _singleid = "cruise"; + _guioptions = Common::GUIO_NOSPEECH | Common::GUIO_NOMIDI; + } virtual const char *getName() const { return "CruisE"; diff --git a/engines/cruise/mainDraw.cpp b/engines/cruise/mainDraw.cpp index 336471b6ff..814d0aa9e9 100644 --- a/engines/cruise/mainDraw.cpp +++ b/engines/cruise/mainDraw.cpp @@ -211,7 +211,7 @@ int m_color; This "worked" on many platforms so far, but on OSX apparently the buffers don't occupy contiguous memory, and this causes severe corruption and subsequent crashes. Since I'm not really familiar with how the strange drawing code is supposed to work, - or whether this behaviour is intentional or not, the short-term fix is to allocate a big + or whether this behavior is intentional or not, the short-term fix is to allocate a big buffer and setup pointers within it. This fixes the crashes I'm seeing without causing any (visual) side-effects. If anyone wants to look, this is easily reproduced by starting the game and examining the rug. diff --git a/engines/cruise/menu.cpp b/engines/cruise/menu.cpp index 407858574c..e763e2b8a1 100644 --- a/engines/cruise/menu.cpp +++ b/engines/cruise/menu.cpp @@ -225,13 +225,10 @@ static void handleSaveLoad(bool saveFlag) { Common::String result(dialog->getResultString()); if (result.empty()) { // If the user was lazy and entered no save name, come up with a default name. - char buf[20]; - snprintf(buf, 20, "Save %d", slot + 1); - - _vm->saveGameState(slot, buf); - } else { - _vm->saveGameState(slot, result.c_str()); + result = Common::String::format("Save %d", slot + 1); } + + _vm->saveGameState(slot, result); } } diff --git a/engines/dialogs.cpp b/engines/dialogs.cpp index 75b2ca9296..531cf32dbc 100644 --- a/engines/dialogs.cpp +++ b/engines/dialogs.cpp @@ -143,9 +143,9 @@ void MainMenuDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint3 break; case kHelpCmd: { GUI::MessageDialog dialog( - "Sorry, this engine does not currently provide in-game help. " + _("Sorry, this engine does not currently provide in-game help. " "Please consult the README for basic information, and for " - "instructions on how to obtain further assistance."); + "instructions on how to obtain further assistance.")); dialog.runModal(); } break; @@ -227,11 +227,11 @@ void MainMenuDialog::save() { Common::String result(_saveDialog->getResultString()); if (result.empty()) { // If the user was lazy and entered no save name, come up with a default name. - char buf[20]; - snprintf(buf, 20, "Save %d", slot + 1); + Common::String buf; + buf = Common::String::format("Save %d", slot + 1); _engine->saveGameState(slot, buf); } else { - _engine->saveGameState(slot, result.c_str()); + _engine->saveGameState(slot, result); } close(); diff --git a/engines/draci/detection.cpp b/engines/draci/detection.cpp index d3483eb5a4..b7e83e1edb 100644 --- a/engines/draci/detection.cpp +++ b/engines/draci/detection.cpp @@ -83,34 +83,11 @@ const ADGameDescription gameDescriptions[] = { } // End of namespace Draci -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Draci::gameDescriptions, - // Size of that superset structure - sizeof(ADGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - draciGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "draci", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NONE, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class DraciMetaEngine : public AdvancedMetaEngine { public: - DraciMetaEngine() : AdvancedMetaEngine(detectionParams) {} + DraciMetaEngine() : AdvancedMetaEngine(Draci::gameDescriptions, sizeof(ADGameDescription), draciGames) { + _singleid = "draci"; + } virtual const char *getName() const { return "Draci"; diff --git a/engines/draci/draci.cpp b/engines/draci/draci.cpp index cdc91e8d9f..67e043632e 100644 --- a/engines/draci/draci.cpp +++ b/engines/draci/draci.cpp @@ -439,10 +439,8 @@ void DraciEngine::syncSoundSettings() { _music->syncVolume(); } -const char *DraciEngine::getSavegameFile(int saveGameIdx) { - static char buffer[20]; - sprintf(buffer, "draci.s%02d", saveGameIdx); - return buffer; +Common::String DraciEngine::getSavegameFile(int saveGameIdx) { + return Common::String::format("draci.s%02d", saveGameIdx); } Common::Error DraciEngine::loadGameState(int slot) { @@ -463,7 +461,7 @@ bool DraciEngine::canLoadGameStateCurrently() { (_game->getLoopSubstatus() == kOuterLoop); } -Common::Error DraciEngine::saveGameState(int slot, const char *desc) { +Common::Error DraciEngine::saveGameState(int slot, const Common::String &desc) { return saveSavegameData(slot, desc, *this); } diff --git a/engines/draci/draci.h b/engines/draci/draci.h index 83e69ca332..55ebff083e 100644 --- a/engines/draci/draci.h +++ b/engines/draci/draci.h @@ -67,10 +67,10 @@ public: void handleEvents(); - static const char *getSavegameFile(int saveGameIdx); + static Common::String getSavegameFile(int saveGameIdx); virtual Common::Error loadGameState(int slot); virtual bool canLoadGameStateCurrently(); - virtual Common::Error saveGameState(int slot, const char *desc); + virtual Common::Error saveGameState(int slot, const Common::String &desc); virtual bool canSaveGameStateCurrently(); GUI::Debugger *getDebugger() { return _console; } diff --git a/engines/draci/game.cpp b/engines/draci/game.cpp index 657e381986..893e321b79 100644 --- a/engines/draci/game.cpp +++ b/engines/draci/game.cpp @@ -934,13 +934,12 @@ void Game::inventorySwitch(int keycode) { void Game::dialogueMenu(int dialogueID) { int oldLines, hit; - char tmp[5]; - sprintf(tmp, "%d", dialogueID+1); - Common::String ext(tmp); - _dialogueArchive = new BArchive(dialoguePath + ext + ".dfw"); + Common::String name; + name = dialoguePath + Common::String::format("%d.dfw", dialogueID + 1); + _dialogueArchive = new BArchive(name); debugC(4, kDraciLogicDebugLevel, "Starting dialogue (ID: %d, Archive: %s)", - dialogueID, (dialoguePath + ext + ".dfw").c_str()); + dialogueID, name.c_str()); _currentDialogue = dialogueID; oldLines = 255; diff --git a/engines/draci/music.cpp b/engines/draci/music.cpp index 6f3e3c8384..3179c79ca4 100644 --- a/engines/draci/music.cpp +++ b/engines/draci/music.cpp @@ -80,9 +80,8 @@ void MusicPlayer::playSMF(int track, bool loop) { // Load MIDI resource data Common::File musicFile; - char musicFileName[40]; - snprintf(musicFileName, sizeof(musicFileName), _pathMask.c_str(), track); - musicFile.open(musicFileName); + Common::String musicFileName = Common::String::format(_pathMask.c_str(), track); + musicFile.open(musicFileName.c_str()); if (!musicFile.isOpen()) { debugC(2, kDraciSoundDebugLevel, "Cannot open track %d", track); return; diff --git a/engines/draci/saveload.cpp b/engines/draci/saveload.cpp index ffb1ed7ff4..1479dd3c77 100644 --- a/engines/draci/saveload.cpp +++ b/engines/draci/saveload.cpp @@ -86,7 +86,7 @@ void writeSavegameHeader(Common::OutSaveFile *out, const DraciSavegameHeader &he } Common::Error saveSavegameData(int saveGameIdx, const Common::String &saveName, DraciEngine &vm) { - const char *filename = vm.getSavegameFile(saveGameIdx); + Common::String filename = vm.getSavegameFile(saveGameIdx); Common::SaveFileManager *saveMan = g_system->getSavefileManager(); Common::OutSaveFile *f = saveMan->openForSaving(filename); if (f == NULL) diff --git a/engines/draci/script.h b/engines/draci/script.h index d788dfb66f..72d6f6c344 100644 --- a/engines/draci/script.h +++ b/engines/draci/script.h @@ -106,7 +106,7 @@ private: int _jump; bool _endProgram; - /** List of all GPL commands. Initialised in the constructor. */ + /** List of all GPL commands. Initialized in the constructor. */ const GPL2Command *_commandList; const GPL2Operator *_operatorList; const GPL2Function *_functionList; diff --git a/engines/draci/sound.cpp b/engines/draci/sound.cpp index bbba9d9cc0..106167ef8a 100644 --- a/engines/draci/sound.cpp +++ b/engines/draci/sound.cpp @@ -240,9 +240,8 @@ SoundSample *ZipSoundArchive::getSample(int i, uint freq) { sample._frequency = freq ? freq : _defaultFreq; sample._format = _format; // Read in the file (without the file header) - char file_name[20]; - sprintf(file_name, "%d.%s", i+1, _extension); - sample._stream = _archive->createReadStreamForMember(file_name); + Common::String filename = Common::String::format("%d.%s", i+1, _extension); + sample._stream = _archive->createReadStreamForMember(filename); if (!sample._stream) { debugC(2, kDraciArchiverDebugLevel, "Doesn't exist"); return NULL; diff --git a/engines/drascula/detection.cpp b/engines/drascula/detection.cpp index 5a8903db9d..2249a49e4d 100644 --- a/engines/drascula/detection.cpp +++ b/engines/drascula/detection.cpp @@ -266,34 +266,12 @@ static const DrasculaGameDescription gameDescriptions[] = { } // End of namespace Drascula -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Drascula::gameDescriptions, - // Size of that superset structure - sizeof(Drascula::DrasculaGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - drasculaGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "drascula", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NOMIDI | Common::GUIO_NOLAUNCHLOAD, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class DrasculaMetaEngine : public AdvancedMetaEngine { public: - DrasculaMetaEngine() : AdvancedMetaEngine(detectionParams) {} + DrasculaMetaEngine() : AdvancedMetaEngine(Drascula::gameDescriptions, sizeof(Drascula::DrasculaGameDescription), drasculaGames) { + _singleid = "drascula"; + _guioptions = Common::GUIO_NOMIDI | Common::GUIO_NOLAUNCHLOAD; + } virtual const char *getName() const { return "Drascula"; diff --git a/engines/drascula/drascula.cpp b/engines/drascula/drascula.cpp index cac7f93f12..b4f009eb44 100644 --- a/engines/drascula/drascula.cpp +++ b/engines/drascula/drascula.cpp @@ -893,9 +893,9 @@ bool DrasculaEngine::loadDrasculaDat() { ver = in.readByte(); if (ver != DRASCULA_DAT_VER) { - snprintf(buf, 256, "File 'drascula.dat' is wrong version. Expected %d but got %d. Get it from the ScummVM website", DRASCULA_DAT_VER, ver); - GUIErrorMessage(buf); - warning("%s", buf); + Common::String errorMessage = Common::String::format("File 'drascula.dat' is wrong version. Expected %d but got %d. Get it from the ScummVM website", DRASCULA_DAT_VER, ver); + GUIErrorMessage(errorMessage); + warning("%s", errorMessage.c_str()); return false; } diff --git a/engines/drascula/drascula.h b/engines/drascula/drascula.h index f9dcbe2810..2b6aa0f291 100644 --- a/engines/drascula/drascula.h +++ b/engines/drascula/drascula.h @@ -588,7 +588,7 @@ public: void quadrant_2(); void quadrant_3(); void quadrant_4(); - void saveGame(char[]); + void saveGame(const char *gameName); void increaseFrameNum(); int whichObject(); bool checkMenuFlags(); diff --git a/engines/drascula/saveload.cpp b/engines/drascula/saveload.cpp index 15f5855bdc..664a082eb4 100644 --- a/engines/drascula/saveload.cpp +++ b/engines/drascula/saveload.cpp @@ -28,24 +28,23 @@ namespace Drascula { bool DrasculaEngine::saveLoadScreen() { char names[10][23]; - char file[50]; - char fileEpa[50]; + Common::String file; int n, n2, num_sav = 0, y = 27; Common::InSaveFile *sav; clearRoom(); - snprintf(fileEpa, 50, "%s.epa", _targetName.c_str()); + Common::String fileEpa = Common::String::format("%s.epa", _targetName.c_str()); if (!(sav = _saveFileMan->openForLoading(fileEpa))) { Common::OutSaveFile *epa; if (!(epa = _saveFileMan->openForSaving(fileEpa))) - error("Can't open %s file", fileEpa); + error("Can't open %s file", fileEpa.c_str()); for (n = 0; n < NUM_SAVES; n++) epa->writeString("*\n"); epa->finalize(); delete epa; if (!(sav = _saveFileMan->openForLoading(fileEpa))) { - error("Can't open %s file", fileEpa); + error("Can't open %s file", fileEpa.c_str()); } } for (n = 0; n < NUM_SAVES; n++) { @@ -88,11 +87,11 @@ bool DrasculaEngine::saveLoadScreen() { enterName(); strcpy(names[n], select); if (selectionMade == 1) { - snprintf(file, 50, "%s%02d", _targetName.c_str(), n + 1); - saveGame(file); + file = Common::String::format("%s%02d", _targetName.c_str(), n + 1); + saveGame(file.c_str()); Common::OutSaveFile *tsav; if (!(tsav = _saveFileMan->openForSaving(fileEpa))) { - error("Can't open %s file", fileEpa); + error("Can't open %s file", fileEpa.c_str()); } for (n = 0; n < NUM_SAVES; n++) { tsav->writeString(names[n]); @@ -110,7 +109,7 @@ bool DrasculaEngine::saveLoadScreen() { y = y + 9; } if (selectionMade == 1) { - snprintf(file, 50, "%s%02d", _targetName.c_str(), n + 1); + file = Common::String::format("%s%02d", _targetName.c_str(), n + 1); } num_sav = n; } @@ -127,11 +126,11 @@ bool DrasculaEngine::saveLoadScreen() { } if (selectionMade == 1) { - snprintf(file, 50, "%s%02d", _targetName.c_str(), n + 1); - saveGame(file); + file = Common::String::format("%s%02d", _targetName.c_str(), n + 1); + saveGame(file.c_str()); Common::OutSaveFile *tsav; if (!(tsav = _saveFileMan->openForSaving(fileEpa))) { - error("Can't open %s file", fileEpa); + error("Can't open %s file", fileEpa.c_str()); } for (n = 0; n < NUM_SAVES; n++) { tsav->writeString(names[n]); @@ -143,16 +142,16 @@ bool DrasculaEngine::saveLoadScreen() { } if (mouseX > 125 && mouseY > 123 && mouseX < 199 && mouseY < 149 && selectionMade == 1) { - if (!loadGame(file)) { + if (!loadGame(file.c_str())) { _system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false); return false; } break; } else if (mouseX > 208 && mouseY > 123 && mouseX < 282 && mouseY < 149 && selectionMade == 1) { - saveGame(file); + saveGame(file.c_str()); Common::OutSaveFile *tsav; if (!(tsav = _saveFileMan->openForSaving(fileEpa))) { - error("Can't open %s file", fileEpa); + error("Can't open %s file", fileEpa.c_str()); } for (n = 0; n < NUM_SAVES; n++) { tsav->writeString(names[n]); @@ -229,7 +228,7 @@ bool DrasculaEngine::loadGame(const char *gameName) { return true; } -void DrasculaEngine::saveGame(char gameName[]) { +void DrasculaEngine::saveGame(const char *gameName) { Common::OutSaveFile *out; int l; diff --git a/engines/dreamweb/README b/engines/dreamweb/README new file mode 100644 index 0000000000..d184613249 --- /dev/null +++ b/engines/dreamweb/README @@ -0,0 +1,12 @@ + +WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING + +Some files(dreamgen.*) in this directory is auto-generated. This means +(at least for some time) any changes to them will be lost. + +Please look into /devtools/tasmrecover directory, patch assembler source +or translator and run ./tasm-recover script. + +Then copy dreamgen.cpp/dreamgen.h to engine/dreamweb and check the diffs. + +If you'd like to reimplement something, blacklist it, then run script. diff --git a/backends/platform/gp2x/gp2x-common.h b/engines/dreamweb/console.cpp index 7efdd7164c..e004746d8a 100644 --- a/backends/platform/gp2x/gp2x-common.h +++ b/engines/dreamweb/console.cpp @@ -18,32 +18,19 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + * $URL: https://svn.scummvm.org:4444/svn/dreamweb/console.cpp $ + * $Id: console.cpp 70 2011-01-26 05:36:55Z digitall $ + * */ -#ifndef PLATFORM_SDL_GP2X_H -#define PLATFORM_SDL_GP2X_H - -#include "backends/base-backend.h" -#include "backends/platform/sdl/sdl.h" -#include "backends/platform/sdl/posix/posix.h" -#include "backends/graphics/gp2xsdl/gp2xsdl-graphics.h" -#include "backends/events/gp2xsdl/gp2xsdl-events.h" - -#ifndef PATH_MAX - #define PATH_MAX 255 -#endif - -class OSystem_GP2X : public OSystem_POSIX { -public: - OSystem_GP2X() {} +#include "dreamweb/console.h" - void initBackend(); - void quit(); - void addSysArchivesToSearchSet(Common::SearchSet &s, int priority = 0); - void initSDL(); +namespace DreamWeb { -protected: +DreamWebConsole::DreamWebConsole(DreamWebEngine *vm) : GUI::Debugger(), _vm(vm) { +} -}; +DreamWebConsole::~DreamWebConsole() { +} -#endif +} // End of namespace DreamWeb diff --git a/backends/platform/gp2x/gp2x-mem.h b/engines/dreamweb/console.h index b2cd00a587..58c8467b34 100644 --- a/backends/platform/gp2x/gp2x-mem.h +++ b/engines/dreamweb/console.h @@ -18,34 +18,29 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * - */ - -/* - * GP2X: Memory Stuff. + * $URL: https://svn.scummvm.org:4444/svn/dreamweb/console.h $ + * $Id: console.h 70 2011-01-26 05:36:55Z digitall $ * */ -#ifndef GP2X_MEM_H -#define GP2X_MEM_H +#ifndef DREAMWEB_CONSOLE_H +#define DREAMWEB_CONSOLE_H -#ifdef __cplusplus -extern "C" { -#endif +#include "gui/debugger.h" -// Use Squidge's MMU patch rather then myown (his is neater). -// The effect if not that great but cacheing the upper RAM is no bad thing (tm) ;). +namespace DreamWeb { -//extern void InitRam (void); -//extern void CloseRam (void); -// Set ARM920t clock frequency -extern void SetClock (unsigned c); -extern void patchMMU (void); -extern void unpatchMMU (void); +class DreamWebEngine; -#define SYS_CLK_FREQ 7372800 +class DreamWebConsole : public GUI::Debugger { +public: + DreamWebConsole(DreamWebEngine *vm); + virtual ~DreamWebConsole(void); -#ifdef __cplusplus - } -#endif +private: + DreamWebEngine *_vm; +}; + +} // End of namespace DreamWeb -#endif //GP2X_MEM_H +#endif diff --git a/engines/dreamweb/detection.cpp b/engines/dreamweb/detection.cpp new file mode 100644 index 0000000000..b8cefaca95 --- /dev/null +++ b/engines/dreamweb/detection.cpp @@ -0,0 +1,155 @@ +/* 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. + * + * $URL: https://svn.scummvm.org:4444/svn/dreamweb/detection.cpp $ + * $Id: detection.cpp 3 2010-09-16 19:32:18Z megath $ + * + */ + +#include "base/plugins.h" + +#include "common/algorithm.h" +#include "common/system.h" + +#include "dreamweb/dreamweb.h" + +#include "engines/advancedDetector.h" + +namespace DreamWeb { + +struct DreamWebGameDescription { + ADGameDescription desc; +}; + +} // End of namespace DreamWeb + +static const PlainGameDescriptor dreamWebGames[] = { + { "dreamweb", "DreamWeb" }, + { 0, 0 } +}; + +#include "dreamweb/detection_tables.h" + +class DreamWebMetaEngine : public AdvancedMetaEngine { +public: + DreamWebMetaEngine(): + AdvancedMetaEngine(DreamWeb::gameDescriptions, + sizeof(DreamWeb::DreamWebGameDescription), dreamWebGames) { + _singleid = "dreamweb"; + _guioptions = Common::GUIO_NOMIDI; + } + + virtual const char *getName() const { + return "DreamWeb engine"; + } + + virtual const char *getOriginalCopyright() const { + return "DreamWeb (C) Creative Reality"; + } + + virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const; + virtual bool hasFeature(MetaEngineFeature f) const; + virtual SaveStateList listSaves(const char *target) const; + virtual int getMaximumSaveSlot() const; + virtual void removeSaveState(const char *target, int slot) const; +}; + +bool DreamWebMetaEngine::hasFeature(MetaEngineFeature f) const { + switch(f) { + case kSupportsListSaves: + //case kSupportsLoadingDuringStartup: + //case kSupportsDeleteSave: + return true; + default: + return false; + } +} + +bool DreamWeb::DreamWebEngine::hasFeature(EngineFeature f) const { + switch(f) { + case kSupportsRTL: + return true; + default: + return false; + } + return false; +} + +bool DreamWebMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const { + const DreamWeb::DreamWebGameDescription *gd = (const DreamWeb::DreamWebGameDescription *)desc; + if (gd) { + *engine = new DreamWeb::DreamWebEngine(syst, gd); + } + return gd != 0; +} + +SaveStateList DreamWebMetaEngine::listSaves(const char *target) const { + Common::SaveFileManager *saveFileMan = g_system->getSavefileManager(); + Common::StringArray files = saveFileMan->listSavefiles("DREAMWEB.D??"); + Common::sort(files.begin(), files.end()); + + SaveStateList saveList; + for(uint i = 0; i < files.size(); ++i) { + const Common::String &file = files[i]; + Common::InSaveFile *stream = saveFileMan->openForLoading(file); + if (!stream) + error("cannot open save file %s", file.c_str()); + char name[17] = {}; + stream->seek(0x61); + stream->read(name, sizeof(name) - 1); + delete stream; + + SaveStateDescriptor sd(i, name); + saveList.push_back(sd); + } + + return saveList; +} + +int DreamWebMetaEngine::getMaximumSaveSlot() const { return 6; } + +void DreamWebMetaEngine::removeSaveState(const char *target, int slot) const { +} + +#if PLUGIN_ENABLED_DYNAMIC(DREAMWEB) + REGISTER_PLUGIN_DYNAMIC(DREAMWEB, PLUGIN_TYPE_ENGINE, DreamWebMetaEngine); +#else + REGISTER_PLUGIN_STATIC(DREAMWEB, PLUGIN_TYPE_ENGINE, DreamWebMetaEngine); +#endif + +namespace DreamWeb { + +Common::Error DreamWebEngine::loadGameState(int slot) { + return Common::kNoError; +} + +Common::Error DreamWebEngine::saveGameState(int slot, const Common::String &desc) { + return Common::kNoError; +} + +bool DreamWebEngine::canLoadGameStateCurrently() { + return false; +} + +bool DreamWebEngine::canSaveGameStateCurrently() { + return false; +} + +} // End of namespace DreamWeb diff --git a/engines/dreamweb/detection_tables.h b/engines/dreamweb/detection_tables.h new file mode 100644 index 0000000000..058d43cbd2 --- /dev/null +++ b/engines/dreamweb/detection_tables.h @@ -0,0 +1,89 @@ +/* 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. + * + * $URL: https://svn.scummvm.org:4444/svn/dreamweb/detection_tables.h $ + * $Id: detection_tables.h 66 2010-11-07 08:31:21Z eriktorbjorn $ + * + */ + +#ifndef DREAMWEB_DETECTION_TABLES_H +#define DREAMWEB_DETECTION_TABLES_H + +namespace DreamWeb { + +using Common::GUIO_NONE; + +static const DreamWebGameDescription gameDescriptions[] = { + { + { + "dreamweb", + "", + { + {"dreamweb.r00", 0, "3b5c87717fc40cc5a5ae19c155662ee3", 152918}, + {"dreamweb.r02", 0, "28458718167a040d7e988cf7d2298eae", 210466}, + AD_LISTEND + }, + Common::EN_ANY, + Common::kPlatformPC, + ADGF_UNSTABLE, + GUIO_NONE + }, + }, + + // International CD release + { + { + "dreamweb", + "CD", + { + {"dreamweb.r00", 0, "3b5c87717fc40cc5a5ae19c155662ee3", 152918}, + {"dreamweb.r02", 0, "d6fe5e3590ec1eea42ff65c10b023e0f", 198681}, + AD_LISTEND + }, + Common::EN_ANY, + Common::kPlatformPC, + ADGF_CD | ADGF_UNSTABLE, + GUIO_NONE + }, + }, + + // US CD release + { + { + "dreamweb", + "CD", + { + {"dreamweb.r00", 0, "8acafd7f4418d08d0e16b65b8b10bc50", 152983}, + {"dreamweb.r02", 0, "c0c363715ddf14ab54f2379906a3aa01", 198707}, + AD_LISTEND + }, + Common::EN_USA, + Common::kPlatformPC, + ADGF_CD, + GUIO_NONE + }, + }, + + { AD_TABLE_END_MARKER } +}; + +} // End of namespace DreamWeb + +#endif diff --git a/engines/dreamweb/dreamgen.cpp b/engines/dreamweb/dreamgen.cpp new file mode 100644 index 0000000000..35721d3d4b --- /dev/null +++ b/engines/dreamweb/dreamgen.cpp @@ -0,0 +1,22740 @@ +/* PLEASE DO NOT MODIFY THIS FILE. ALL CHANGES WILL BE LOST! LOOK FOR README FOR DETAILS */ + +#include "dreamgen.h" + +namespace DreamGen { + +void DreamGenContext::alleybarksound() { + STACK_CHECK; + ax = es.word(bx+3); + _dec(ax); + _cmp(ax, 0); + if (!flags.z()) + goto nobark; + push(bx); + push(es); + al = 14; + playchannel1(); + es = pop(); + bx = pop(); + ax = 1000; +nobark: + es.word(bx+3) = ax; +} + +void DreamGenContext::intromusic() { + STACK_CHECK; +} + +void DreamGenContext::foghornsound() { + STACK_CHECK; + randomnumber(); + _cmp(al, 198); + if (!flags.z()) + return /* (nofog) */; + al = 13; + playchannel1(); +} + +void DreamGenContext::receptionist() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto gotrecep; + _cmp(data.byte(kCardpassflag), 1); + if (!flags.z()) + goto notsetcard; + _inc(data.byte(kCardpassflag)); + es.byte(bx+7) = 1; + es.word(bx+3) = 64; +notsetcard: + _cmp(es.word(bx+3), 58); + if (!flags.z()) + goto notdes1; + randomnumber(); + _cmp(al, 30); + if (flags.c()) + goto notdes2; + es.word(bx+3) = 55; + goto gotrecep; +notdes1: + _cmp(es.word(bx+3), 60); + if (!flags.z()) + goto notdes2; + randomnumber(); + _cmp(al, 240); + if (flags.c()) + goto gotrecep; + es.word(bx+3) = 53; + goto gotrecep; +notdes2: + _cmp(es.word(bx+3), 88); + if (!flags.z()) + goto notendcard; + es.word(bx+3) = 53; + goto gotrecep; +notendcard: + _inc(es.word(bx+3)); +gotrecep: + showgamereel(); + addtopeoplelist(); + al = es.byte(bx+7); + _and(al, 128); + if (flags.z()) + return /* (nottalkedrecep) */; + data.byte(kTalkedtorecep) = 1; +} + +void DreamGenContext::smokebloke() { + STACK_CHECK; + _cmp(data.byte(kRockstardead), 0); + if (!flags.z()) + goto notspokento; + al = es.byte(bx+7); + _and(al, 128); + if (flags.z()) + goto notspokento; + push(es); + push(bx); + al = 5; + setlocation(); + bx = pop(); + es = pop(); +notspokento: + checkspeed(); + if (!flags.z()) + goto gotsmokeb; + _cmp(es.word(bx+3), 100); + if (!flags.z()) + goto notsmokeb1; + randomnumber(); + _cmp(al, 30); + if (flags.c()) + goto notsmokeb2; + es.word(bx+3) = 96; + goto gotsmokeb; +notsmokeb1: + _cmp(es.word(bx+3), 117); + if (!flags.z()) + goto notsmokeb2; + es.word(bx+3) = 96; + goto gotsmokeb; +notsmokeb2: + _inc(es.word(bx+3)); +gotsmokeb: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::attendant() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); + al = es.byte(bx+7); + _and(al, 128); + if (flags.z()) + return /* (nottalked) */; + data.byte(kTalkedtoattendant) = 1; +} + +void DreamGenContext::manasleep() { + STACK_CHECK; + al = es.byte(bx+7); + _and(al, 127); + es.byte(bx+7) = al; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::eden() { + STACK_CHECK; + _cmp(data.byte(kGeneraldead), 0); + if (!flags.z()) + return /* (notinbed) */; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::edeninbath() { + STACK_CHECK; + _cmp(data.byte(kGeneraldead), 0); + if (flags.z()) + return /* (notinbath) */; + _cmp(data.byte(kSartaindead), 0); + if (!flags.z()) + return /* (notinbath) */; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::malefan() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::femalefan() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::louis() { + STACK_CHECK; + _cmp(data.byte(kRockstardead), 0); + if (!flags.z()) + return /* (notlouis1) */; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::louischair() { + STACK_CHECK; + _cmp(data.byte(kRockstardead), 0); + if (flags.z()) + return /* (notlouis2) */; + checkspeed(); + if (!flags.z()) + goto notlouisanim; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 191); + if (flags.z()) + goto restartlouis; + _cmp(ax, 185); + if (flags.z()) + goto randomlouis; + es.word(bx+3) = ax; + goto notlouisanim; +randomlouis: + es.word(bx+3) = ax; + randomnumber(); + _cmp(al, 245); + if (!flags.c()) + goto notlouisanim; +restartlouis: + ax = 182; + es.word(bx+3) = ax; +notlouisanim: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::manasleep2() { + STACK_CHECK; + al = es.byte(bx+7); + _and(al, 127); + es.byte(bx+7) = al; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::mansatstill() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::tattooman() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::drinker() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto gotdrinker; + _inc(es.word(bx+3)); + _cmp(es.word(bx+3), 115); + if (!flags.z()) + goto notdrinker1; + es.word(bx+3) = 105; + goto gotdrinker; +notdrinker1: + _cmp(es.word(bx+3), 106); + if (!flags.z()) + goto gotdrinker; + randomnumber(); + _cmp(al, 3); + if (flags.c()) + goto gotdrinker; + es.word(bx+3) = 105; +gotdrinker: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::bartender() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto gotsmoket; + _cmp(es.word(bx+3), 86); + if (!flags.z()) + goto notsmoket1; + randomnumber(); + _cmp(al, 18); + if (flags.c()) + goto notsmoket2; + es.word(bx+3) = 81; + goto gotsmoket; +notsmoket1: + _cmp(es.word(bx+3), 103); + if (!flags.z()) + goto notsmoket2; + es.word(bx+3) = 81; + goto gotsmoket; +notsmoket2: + _inc(es.word(bx+3)); +gotsmoket: + showgamereel(); + _cmp(data.byte(kGunpassflag), 1); + if (!flags.z()) + goto notgotgun; + es.byte(bx+7) = 9; +notgotgun: + addtopeoplelist(); +} + +void DreamGenContext::othersmoker() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::barwoman() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::interviewer() { + STACK_CHECK; + _cmp(data.word(kReeltowatch), 68); + if (!flags.z()) + goto notgeneralstart; + _inc(es.word(bx+3)); +notgeneralstart: + _cmp(es.word(bx+3), 250); + if (flags.z()) + goto talking; + checkspeed(); + if (!flags.z()) + goto talking; + _cmp(es.word(bx+3), 259); + if (flags.z()) + goto talking; + _inc(es.word(bx+3)); +talking: + showgamereel(); +} + +void DreamGenContext::soldier1() { + STACK_CHECK; + _cmp(es.word(bx+3), 0); + if (flags.z()) + goto soldierwait; + data.word(kWatchingtime) = 10; + _cmp(es.word(bx+3), 30); + if (!flags.z()) + goto notaftersshot; + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 40); + if (!flags.z()) + goto gotsoldframe; + data.byte(kMandead) = 2; + goto gotsoldframe; +notaftersshot: + checkspeed(); + if (!flags.z()) + goto gotsoldframe; + _inc(es.word(bx+3)); + goto gotsoldframe; +soldierwait: + _cmp(data.byte(kLastweapon), 1); + if (!flags.z()) + goto gotsoldframe; + data.word(kWatchingtime) = 10; + _cmp(data.byte(kManspath), 2); + if (!flags.z()) + goto gotsoldframe; + _cmp(data.byte(kFacing), 4); + if (!flags.z()) + goto gotsoldframe; + _inc(es.word(bx+3)); + data.byte(kLastweapon) = -1; + data.byte(kCombatcount) = 0; +gotsoldframe: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::rockstar() { + STACK_CHECK; + ax = es.word(bx+3); + _cmp(ax, 303); + if (flags.z()) + goto rockcombatend; + _cmp(ax, 118); + if (flags.z()) + goto rockcombatend; + checkspeed(); + if (!flags.z()) + goto rockspeed; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 118); + if (!flags.z()) + goto notbeforedead; + data.byte(kMandead) = 2; + goto gotrockframe; +notbeforedead: + _cmp(ax, 79); + if (!flags.z()) + goto gotrockframe; + _dec(ax); + _cmp(data.byte(kLastweapon), 1); + if (!flags.z()) + goto notgunonrock; + data.byte(kLastweapon) = -1; + ax = 123; + goto gotrockframe; +notgunonrock: + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 40); + if (!flags.z()) + goto gotrockframe; + data.byte(kCombatcount) = 0; + ax = 79; +gotrockframe: + es.word(bx+3) = ax; +rockspeed: + showgamereel(); + _cmp(es.word(bx+3), 78); + if (!flags.z()) + goto notalkrock; + addtopeoplelist(); + data.byte(kPointermode) = 2; + data.word(kWatchingtime) = 0; + return; +notalkrock: + data.word(kWatchingtime) = 2; + data.byte(kPointermode) = 0; + al = data.byte(kMapy); + es.byte(bx+2) = al; + return; +rockcombatend: + data.byte(kNewlocation) = 45; + showgamereel(); +} + +void DreamGenContext::helicopter() { + STACK_CHECK; + ax = es.word(bx+3); + _cmp(ax, 203); + if (flags.z()) + goto heliwon; + checkspeed(); + if (!flags.z()) + goto helispeed; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 53); + if (!flags.z()) + goto notbeforehdead; + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 8); + if (flags.c()) + goto waitabit; + data.byte(kMandead) = 2; +waitabit: + ax = 49; + goto gotheliframe; +notbeforehdead: + _cmp(ax, 9); + if (!flags.z()) + goto gotheliframe; + _dec(ax); + _cmp(data.byte(kLastweapon), 1); + if (!flags.z()) + goto notgunonheli; + data.byte(kLastweapon) = -1; + ax = 55; + goto gotheliframe; +notgunonheli: + ax = 5; + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 20); + if (!flags.z()) + goto gotheliframe; + data.byte(kCombatcount) = 0; + ax = 9; +gotheliframe: + es.word(bx+3) = ax; +helispeed: + showgamereel(); + al = data.byte(kMapx); + es.byte(bx+1) = al; + ax = es.word(bx+3); + _cmp(ax, 9); + if (!flags.c()) + goto notwaitingheli; + _cmp(data.byte(kCombatcount), 7); + if (flags.c()) + goto notwaitingheli; + data.byte(kPointermode) = 2; + data.word(kWatchingtime) = 0; + return; +notwaitingheli: + data.byte(kPointermode) = 0; + data.word(kWatchingtime) = 2; + return; +heliwon: + data.byte(kPointermode) = 0; +} + +void DreamGenContext::mugger() { + STACK_CHECK; + ax = es.word(bx+3); + _cmp(ax, 138); + if (flags.z()) + goto endmugger1; + _cmp(ax, 176); + if (flags.z()) + return /* (endmugger2) */; + _cmp(ax, 2); + if (!flags.z()) + goto havesetwatch; + data.word(kWatchingtime) = 175*2; +havesetwatch: + checkspeed(); + if (!flags.z()) + goto notmugger; + _inc(es.word(bx+3)); +notmugger: + showgamereel(); + al = data.byte(kMapx); + es.byte(bx+1) = al; + return; +endmugger1: + push(es); + push(bx); + createpanel2(); + showicon(); + al = 41; + findpuztext(); + di = 33+20; + bx = 104; + dl = 241; + ah = 0; + printdirect(); + worktoscreen(); + cx = 300; + hangon(); + bx = pop(); + es = pop(); + push(es); + push(bx); + es.word(bx+3) = 140; + data.byte(kManspath) = 2; + data.byte(kFinaldest) = 2; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + al = 'W'; + ah = 'E'; + cl = 'T'; + ch = 'A'; + findexobject(); + data.byte(kCommand) = al; + data.byte(kObjecttype) = 4; + removeobfrominv(); + al = 'W'; + ah = 'E'; + cl = 'T'; + ch = 'B'; + findexobject(); + data.byte(kCommand) = al; + data.byte(kObjecttype) = 4; + removeobfrominv(); + makemainscreen(); + al = 48; + bl = 68-32; + bh = 54+64; + cx = 70; + dx = 10; + setuptimeduse(); + data.byte(kBeenmugged) = 1; + bx = pop(); + es = pop(); +} + +void DreamGenContext::aide() { + STACK_CHECK; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::businessman() { + STACK_CHECK; + data.byte(kPointermode) = 0; + data.word(kWatchingtime) = 2; + ax = es.word(bx+3); + _cmp(ax, 2); + if (!flags.z()) + goto notfirstbiz; + push(ax); + push(bx); + push(es); + al = 49; + cx = 30; + dx = 1; + bl = 68; + bh = 174; + setuptimeduse(); + es = pop(); + bx = pop(); + ax = pop(); +notfirstbiz: + _cmp(ax, 95); + if (flags.z()) + goto buscombatwonend; + _cmp(ax, 49); + if (flags.z()) + return /* (buscombatend) */; + checkspeed(); + if (!flags.z()) + goto busspeed; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 48); + if (!flags.z()) + goto notbeforedeadb; + data.byte(kMandead) = 2; + goto gotbusframe; +notbeforedeadb: + _cmp(ax, 15); + if (!flags.z()) + goto buscombatwon; + _dec(ax); + _cmp(data.byte(kLastweapon), 3); + if (!flags.z()) + goto notshieldonbus; + data.byte(kLastweapon) = -1; + data.byte(kCombatcount) = 0; + ax = 51; + goto gotbusframe; +notshieldonbus: + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 20); + if (!flags.z()) + goto gotbusframe; + data.byte(kCombatcount) = 0; + ax = 15; + goto gotbusframe; +buscombatwon: + _cmp(ax, 91); + if (!flags.z()) + goto gotbusframe; + push(bx); + push(es); + al = 0; + turnpathon(); + al = 1; + turnpathon(); + al = 2; + turnpathon(); + al = 3; + turnpathoff(); + data.byte(kManspath) = 5; + data.byte(kFinaldest) = 5; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + es = pop(); + bx = pop(); + ax = 92; + goto gotbusframe; +gotbusframe: + es.word(bx+3) = ax; +busspeed: + showgamereel(); + al = data.byte(kMapy); + es.byte(bx+2) = al; + ax = es.word(bx+3); + _cmp(ax, 14); + if (!flags.z()) + return /* (buscombatend) */; + data.word(kWatchingtime) = 0; + data.byte(kPointermode) = 2; + return; +buscombatwonend: + data.byte(kPointermode) = 0; + data.word(kWatchingtime) = 0; +} + +void DreamGenContext::poolguard() { + STACK_CHECK; + ax = es.word(bx+3); + _cmp(ax, 214); + if (flags.z()) + goto combatover2; + _cmp(ax, 258); + if (flags.z()) + goto combatover2; + _cmp(ax, 185); + if (flags.z()) + goto combatover1; + _cmp(ax, 0); + if (!flags.z()) + goto notfirstpool; + al = 0; + turnpathon(); +notfirstpool: + checkspeed(); + if (!flags.z()) + goto guardspeed; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 122); + if (!flags.z()) + goto notendguard1; + _dec(ax); + _cmp(data.byte(kLastweapon), 2); + if (!flags.z()) + goto notaxeonpool; + data.byte(kLastweapon) = -1; + ax = 122; + goto gotguardframe; +notaxeonpool: + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 40); + if (!flags.z()) + goto gotguardframe; + data.byte(kCombatcount) = 0; + ax = 195; + goto gotguardframe; +notendguard1: + _cmp(ax, 147); + if (!flags.z()) + goto gotguardframe; + _dec(ax); + _cmp(data.byte(kLastweapon), 1); + if (!flags.z()) + goto notgunonpool; + data.byte(kLastweapon) = -1; + ax = 147; + goto gotguardframe; +notgunonpool: + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 40); + if (!flags.z()) + goto gotguardframe; + data.byte(kCombatcount) = 0; + ax = 220; +gotguardframe: + es.word(bx+3) = ax; +guardspeed: + showgamereel(); + ax = es.word(bx+3); + _cmp(ax, 121); + if (flags.z()) + goto iswaitingpool; + _cmp(ax, 146); + if (flags.z()) + goto iswaitingpool; + data.byte(kPointermode) = 0; + data.word(kWatchingtime) = 2; + return; +iswaitingpool: + data.byte(kPointermode) = 2; + data.word(kWatchingtime) = 0; + return; +combatover1: + data.word(kWatchingtime) = 0; + data.byte(kPointermode) = 0; + al = 0; + turnpathon(); + al = 1; + turnpathoff(); + return; +combatover2: + showgamereel(); + data.word(kWatchingtime) = 2; + data.byte(kPointermode) = 0; + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 100); + if (flags.c()) + return /* (doneover2) */; + data.word(kWatchingtime) = 0; + data.byte(kMandead) = 2; +} + +void DreamGenContext::security() { + STACK_CHECK; + _cmp(es.word(bx+3), 32); + if (flags.z()) + goto securwait; + _cmp(es.word(bx+3), 69); + if (!flags.z()) + goto notaftersec; + return; +notaftersec: + data.word(kWatchingtime) = 10; + checkspeed(); + if (!flags.z()) + goto gotsecurframe; + _inc(es.word(bx+3)); + goto gotsecurframe; +securwait: + _cmp(data.byte(kLastweapon), 1); + if (!flags.z()) + goto gotsecurframe; + data.word(kWatchingtime) = 10; + _cmp(data.byte(kManspath), 9); + if (!flags.z()) + goto gotsecurframe; + _cmp(data.byte(kFacing), 0); + if (!flags.z()) + goto gotsecurframe; + data.byte(kLastweapon) = -1; + _inc(es.word(bx+3)); +gotsecurframe: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::heavy() { + STACK_CHECK; + al = es.byte(bx+7); + _and(al, 127); + es.byte(bx+7) = al; + _cmp(es.word(bx+3), 43); + if (flags.z()) + goto heavywait; + data.word(kWatchingtime) = 10; + _cmp(es.word(bx+3), 70); + if (!flags.z()) + goto notafterhshot; + _inc(data.byte(kCombatcount)); + _cmp(data.byte(kCombatcount), 80); + if (!flags.z()) + goto gotheavyframe; + data.byte(kMandead) = 2; + goto gotheavyframe; +notafterhshot: + checkspeed(); + if (!flags.z()) + goto gotheavyframe; + _inc(es.word(bx+3)); + goto gotheavyframe; +heavywait: + _cmp(data.byte(kLastweapon), 1); + if (!flags.z()) + goto gotheavyframe; + _cmp(data.byte(kManspath), 5); + if (!flags.z()) + goto gotheavyframe; + _cmp(data.byte(kFacing), 4); + if (!flags.z()) + goto gotheavyframe; + data.byte(kLastweapon) = -1; + _inc(es.word(bx+3)); + data.byte(kCombatcount) = 0; +gotheavyframe: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::bossman() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto notboss; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 4); + if (flags.z()) + goto firstdes; + _cmp(ax, 20); + if (flags.z()) + goto secdes; + _cmp(ax, 41); + if (!flags.z()) + goto gotallboss; + ax = 0; + _inc(data.byte(kGunpassflag)); + es.byte(bx+7) = 10; + goto gotallboss; +firstdes: + _cmp(data.byte(kGunpassflag), 1); + if (flags.z()) + goto gotallboss; + push(ax); + randomnumber(); + cl = al; + ax = pop(); + _cmp(cl, 10); + if (flags.c()) + goto gotallboss; + ax = 0; + goto gotallboss; +secdes: + _cmp(data.byte(kGunpassflag), 1); + if (flags.z()) + goto gotallboss; + ax = 0; +gotallboss: + es.word(bx+3) = ax; +notboss: + showgamereel(); + addtopeoplelist(); + al = es.byte(bx+7); + _and(al, 128); + if (flags.z()) + return /* (nottalkedboss) */; + data.byte(kTalkedtoboss) = 1; +} + +void DreamGenContext::gamer() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto gamerfin; +gameragain: + randomnum1(); + _and(al, 7); + _cmp(al, 5); + if (!flags.c()) + goto gameragain; + _add(al, 20); + _cmp(al, es.byte(bx+3)); + if (flags.z()) + goto gameragain; + ah = 0; + es.word(bx+3) = ax; +gamerfin: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::sparkydrip() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + return /* (cantdrip) */; + al = 14; + ah = 0; + playchannel0(); +} + +void DreamGenContext::carparkdrip() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + return /* (cantdrip2) */; + al = 14; + playchannel1(); +} + +void DreamGenContext::keeper() { + STACK_CHECK; + _cmp(data.byte(kKeeperflag), 0); + if (!flags.z()) + goto notwaiting; + _cmp(data.word(kReeltowatch), 190); + if (flags.c()) + return /* (waiting) */; + _inc(data.byte(kKeeperflag)); + ah = es.byte(bx+7); + _and(ah, 127); + _cmp(ah, data.byte(kDreamnumber)); + if (flags.z()) + return /* (notdiff) */; + al = data.byte(kDreamnumber); + es.byte(bx+7) = al; + return; +notwaiting: + addtopeoplelist(); + showgamereel(); +} + +void DreamGenContext::candles1() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto candle1; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 44); + if (!flags.z()) + goto notendcandle1; + ax = 39; +notendcandle1: + es.word(bx+3) = ax; +candle1: + showgamereel(); +} + +void DreamGenContext::smallcandle() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto smallcandlef; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 37); + if (!flags.z()) + goto notendsmallcandle; + ax = 25; +notendsmallcandle: + es.word(bx+3) = ax; +smallcandlef: + showgamereel(); +} + +void DreamGenContext::intromagic1() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto introm1fin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 145); + if (!flags.z()) + goto gotintrom1; + ax = 121; +gotintrom1: + es.word(bx+3) = ax; + _cmp(ax, 121); + if (!flags.z()) + goto introm1fin; + _inc(data.byte(kIntrocount)); + push(es); + push(bx); + intro1text(); + bx = pop(); + es = pop(); + _cmp(data.byte(kIntrocount), 8); + if (!flags.z()) + goto introm1fin; + _add(data.byte(kMapy), 10); + data.byte(kNowinnewroom) = 1; +introm1fin: + showgamereel(); +} + +void DreamGenContext::candles() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto candlesfin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 167); + if (!flags.z()) + goto gotcandles; + ax = 162; +gotcandles: + es.word(bx+3) = ax; +candlesfin: + showgamereel(); +} + +void DreamGenContext::candles2() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto candles2fin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 238); + if (!flags.z()) + goto gotcandles2; + ax = 233; +gotcandles2: + es.word(bx+3) = ax; +candles2fin: + showgamereel(); +} + +void DreamGenContext::gates() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto gatesfin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 116); + if (!flags.z()) + goto notbang; + push(ax); + push(bx); + push(es); + al = 17; + playchannel1(); + es = pop(); + bx = pop(); + ax = pop(); +notbang: + _cmp(ax, 110); + if (flags.c()) + goto slowgates; + es.byte(bx+5) = 2; +slowgates: + _cmp(ax, 120); + if (!flags.z()) + goto gotgates; + data.byte(kGetback) = 1; + ax = 119; +gotgates: + es.word(bx+3) = ax; + push(es); + push(bx); + intro3text(); + bx = pop(); + es = pop(); +gatesfin: + showgamereel(); +} + +void DreamGenContext::intromagic2() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto introm2fin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 216); + if (!flags.z()) + goto gotintrom2; + ax = 192; +gotintrom2: + es.word(bx+3) = ax; +introm2fin: + showgamereel(); +} + +void DreamGenContext::intromagic3() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto introm3fin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 218); + if (!flags.z()) + goto gotintrom3; + data.byte(kGetback) = 1; +gotintrom3: + es.word(bx+3) = ax; +introm3fin: + showgamereel(); + al = data.byte(kMapx); + es.byte(bx+1) = al; +} + +void DreamGenContext::intromonks1() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto intromonk1fin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 80); + if (!flags.z()) + goto notendmonk1; + _add(data.byte(kMapy), 10); + data.byte(kNowinnewroom) = 1; + showgamereel(); + return; +notendmonk1: + _cmp(ax, 30); + if (!flags.z()) + goto gotintromonk1; + _sub(data.byte(kMapy), 10); + data.byte(kNowinnewroom) = 1; + ax = 51; +gotintromonk1: + es.word(bx+3) = ax; + _cmp(ax, 5); + if (flags.z()) + goto waitstep; + _cmp(ax, 15); + if (flags.z()) + goto waitstep; + _cmp(ax, 25); + if (flags.z()) + goto waitstep; + _cmp(ax, 61); + if (flags.z()) + goto waitstep; + _cmp(ax, 71); + if (flags.z()) + goto waitstep; + goto intromonk1fin; +waitstep: + push(es); + push(bx); + intro2text(); + bx = pop(); + es = pop(); + es.byte(bx+6) = -20; +intromonk1fin: + showgamereel(); + al = data.byte(kMapy); + es.byte(bx+2) = al; +} + +void DreamGenContext::intromonks2() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto intromonk2fin; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 87); + if (!flags.z()) + goto nottalk1; + _inc(data.byte(kIntrocount)); + push(es); + push(bx); + monks2text(); + bx = pop(); + es = pop(); + _cmp(data.byte(kIntrocount), 19); + if (!flags.z()) + goto notlasttalk1; + ax = 87; + goto gotintromonk2; +notlasttalk1: + ax = 74; + goto gotintromonk2; +nottalk1: + _cmp(ax, 110); + if (!flags.z()) + goto notraisearm; + _inc(data.byte(kIntrocount)); + push(es); + push(bx); + monks2text(); + bx = pop(); + es = pop(); + _cmp(data.byte(kIntrocount), 35); + if (!flags.z()) + goto notlastraise; + ax = 111; + goto gotintromonk2; +notlastraise: + ax = 98; + goto gotintromonk2; +notraisearm: + _cmp(ax, 176); + if (!flags.z()) + goto notendmonk2; + data.byte(kGetback) = 1; + goto gotintromonk2; +notendmonk2: + _cmp(ax, 125); + if (!flags.z()) + goto gotintromonk2; + ax = 140; +gotintromonk2: + es.word(bx+3) = ax; +intromonk2fin: + showgamereel(); +} + +void DreamGenContext::handclap() { + STACK_CHECK; +} + +void DreamGenContext::monks2text() { + STACK_CHECK; + _cmp(data.byte(kIntrocount), 1); + if (!flags.z()) + goto notmonk2text1; + al = 8; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; +notmonk2text1: + _cmp(data.byte(kIntrocount), 4); + if (!flags.z()) + goto notmonk2text2; + al = 9; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; +notmonk2text2: + _cmp(data.byte(kIntrocount), 7); + if (!flags.z()) + goto notmonk2text3; + al = 10; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; +notmonk2text3: + _cmp(data.byte(kIntrocount), 10); + if (!flags.z()) + goto notmonk2text4; + data.byte(kIntrocount) = 12; + al = 11; + bl = 0; + bh = 105; + cx = 100; + goto gotmonks2text; +notmonk2text4: + _cmp(data.byte(kIntrocount), 13); + if (!flags.z()) + goto notmonk2text5; + data.byte(kIntrocount) = 17; + return; + al = 12; + bl = 0; + bh = 120; + cx = 100; + goto gotmonks2text; +notmonk2text5: + _cmp(data.byte(kIntrocount), 16); + if (!flags.z()) + goto notmonk2text6; + al = 13; + bl = 0; + bh = 135; + cx = 100; + goto gotmonks2text; +notmonk2text6: + _cmp(data.byte(kIntrocount), 19); + if (!flags.z()) + goto notmonk2text7; + al = 14; + bl = 36; + bh = 160; + cx = 100; + dx = 1; + ah = 82; + { setuptimedtemp(); return; }; +notmonk2text7: + _cmp(data.byte(kIntrocount), 22); + if (!flags.z()) + goto notmonk2text8; + al = 15; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; +notmonk2text8: + _cmp(data.byte(kIntrocount), 25); + if (!flags.z()) + goto notmonk2text9; + al = 16; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; +notmonk2text9: + _cmp(data.byte(kIntrocount), 27); + if (!flags.z()) + goto notmonk2text10; + al = 17; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; +notmonk2text10: + _cmp(data.byte(kIntrocount), 31); + if (!flags.z()) + return /* (notmonk2text11) */; + al = 18; + bl = 36; + bh = 160; + cx = 100; + goto gotmonks2text; + return; +gotmonks2text: + dx = 1; + cx = 120; + ah = 82; + setuptimedtemp(); +} + +void DreamGenContext::intro1text() { + STACK_CHECK; + _cmp(data.byte(kIntrocount), 2); + if (!flags.z()) + goto notintro1text1; + al = 40; + bl = 34; + bh = 130; + cx = 90; + goto gotintro1text; +notintro1text1: + _cmp(data.byte(kIntrocount), 4); + if (!flags.z()) + goto notintro1text2; + al = 41; + bl = 34; + bh = 130; + cx = 90; + goto gotintro1text; +notintro1text2: + _cmp(data.byte(kIntrocount), 6); + if (!flags.z()) + return /* (notintro1text3) */; + al = 42; + bl = 34; + bh = 130; + cx = 90; + goto gotintro1text; + return; +gotintro1text: + dx = 1; + ah = 82; + _cmp(data.byte(kCh1playing), 255); + if (flags.z()) + goto oktalk2; + _dec(data.byte(kIntrocount)); + return; +oktalk2: + setuptimedtemp(); +} + +void DreamGenContext::intro2text() { + STACK_CHECK; + _cmp(ax, 5); + if (!flags.z()) + goto notintro2text1; + al = 43; + bl = 34; + bh = 40; + cx = 90; + goto gotintro2text; +notintro2text1: + _cmp(ax, 15); + if (!flags.z()) + return /* (notintro2text2) */; + al = 44; + bl = 34; + bh = 40; + cx = 90; + goto gotintro2text; + return; +gotintro2text: + dx = 1; + ah = 82; + setuptimedtemp(); +} + +void DreamGenContext::intro3text() { + STACK_CHECK; + _cmp(ax, 107); + if (!flags.z()) + goto notintro3text1; + al = 45; + bl = 36; + bh = 56; + cx = 100; + goto gotintro3text; +notintro3text1: + _cmp(ax, 108); + if (!flags.z()) + return /* (notintro3text2) */; + al = 46; + bl = 36; + bh = 56; + cx = 100; + goto gotintro3text; + return; +gotintro3text: + dx = 1; + ah = 82; + setuptimedtemp(); +} + +void DreamGenContext::monkandryan() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto notmonkryan; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 83); + if (!flags.z()) + goto gotmonkryan; + _inc(data.byte(kIntrocount)); + push(es); + push(bx); + textformonk(); + bx = pop(); + es = pop(); + ax = 77; + _cmp(data.byte(kIntrocount), 57); + if (!flags.z()) + goto gotmonkryan; + data.byte(kGetback) = 1; + return; +gotmonkryan: + es.word(bx+3) = ax; +notmonkryan: + showgamereel(); +} + +void DreamGenContext::endgameseq() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto notendseq; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 51); + if (!flags.z()) + goto gotendseq; + _cmp(data.byte(kIntrocount), 140); + if (flags.z()) + goto gotendseq; + _inc(data.byte(kIntrocount)); + push(es); + push(bx); + textforend(); + bx = pop(); + es = pop(); + ax = 50; +gotendseq: + es.word(bx+3) = ax; + _cmp(ax, 134); + if (!flags.z()) + goto notfadedown; + push(es); + push(bx); + push(ax); + fadescreendownhalf(); + ax = pop(); + bx = pop(); + es = pop(); + goto notendseq; +notfadedown: + _cmp(ax, 324); + if (!flags.z()) + goto notfadeend; + push(es); + push(bx); + push(ax); + fadescreendowns(); + data.byte(kVolumeto) = 7; + data.byte(kVolumedirection) = 1; + ax = pop(); + bx = pop(); + es = pop(); +notfadeend: + _cmp(ax, 340); + if (!flags.z()) + goto notendseq; + data.byte(kGetback) = 1; +notendseq: + showgamereel(); + al = data.byte(kMapy); + es.byte(bx+2) = al; + ax = es.word(bx+3); + _cmp(ax, 145); + if (!flags.z()) + return /* (notendcreds) */; + es.word(bx+3) = 146; + rollendcredits(); +} + +void DreamGenContext::rollendcredits() { + STACK_CHECK; + al = 16; + ah = 255; + playchannel0(); + data.byte(kVolume) = 7; + data.byte(kVolumeto) = 0; + data.byte(kVolumedirection) = -1; + cl = 160; + ch = 160; + di = 75; + bx = 20; + ds = data.word(kMapstore); + si = 0; + multiget(); + es = data.word(kTextfile1); + si = 3*2; + ax = es.word(si); + si = ax; + _add(si, (66*2)); + cx = 254; +endcredits1: + push(cx); + bx = 10; + cx = data.word(kLinespacing); +endcredits2: + push(cx); + push(si); + push(di); + push(es); + push(bx); + vsync(); + cl = 160; + ch = 160; + di = 75; + bx = 20; + ds = data.word(kMapstore); + si = 0; + multiput(); + vsync(); + bx = pop(); + es = pop(); + di = pop(); + si = pop(); + push(si); + push(di); + push(es); + push(bx); + cx = 18; +onelot: + push(cx); + di = 75; + dx = 161; + ax = 0; + printdirect(); + _add(bx, data.word(kLinespacing)); + cx = pop(); + if (--cx) + goto onelot; + vsync(); + cl = 160; + ch = 160; + di = 75; + bx = 20; + multidump(); + bx = pop(); + es = pop(); + di = pop(); + si = pop(); + cx = pop(); + _dec(bx); + if (--cx) + goto endcredits2; + cx = pop(); +looknext: + al = es.byte(si); + _inc(si); + _cmp(al, ':'); + if (flags.z()) + goto gotnext; + _cmp(al, 0); + if (flags.z()) + goto gotnext; + goto looknext; +gotnext: + if (--cx) + goto endcredits1; + cx = 100; + hangon(); + paneltomap(); + fadescreenuphalf(); +} + +void DreamGenContext::priest() { + STACK_CHECK; + _cmp(es.word(bx+3), 8); + if (flags.z()) + return /* (priestspoken) */; + data.byte(kPointermode) = 0; + data.word(kWatchingtime) = 2; + checkspeed(); + if (!flags.z()) + return /* (priestwait) */; + _inc(es.word(bx+3)); + push(es); + push(bx); + priesttext(); + bx = pop(); + es = pop(); +} + +void DreamGenContext::madmanstelly() { + STACK_CHECK; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 307); + if (!flags.z()) + goto notendtelly; + ax = 300; +notendtelly: + es.word(bx+3) = ax; + showgamereel(); +} + +void DreamGenContext::madman() { + STACK_CHECK; + data.word(kWatchingtime) = 2; + checkspeed(); + if (!flags.z()) + goto nomadspeed; + ax = es.word(bx+3); + _cmp(ax, 364); + if (!flags.c()) + goto ryansded; + _cmp(ax, 10); + if (!flags.z()) + goto notfirstmad; + push(es); + push(bx); + push(ax); + dx = 2247; + loadtemptext(); + ax = pop(); + bx = pop(); + es = pop(); + data.byte(kCombatcount) = -1; + data.byte(kSpeechcount) = 0; +notfirstmad: + _inc(ax); + _cmp(ax, 294); + if (flags.z()) + goto madmanspoken; + _cmp(ax, 66); + if (!flags.z()) + goto nomadspeak; + _inc(data.byte(kCombatcount)); + push(es); + push(bx); + madmantext(); + bx = pop(); + es = pop(); + ax = 53; + _cmp(data.byte(kCombatcount), 64); + if (flags.c()) + goto nomadspeak; + _cmp(data.byte(kCombatcount), 70); + if (flags.z()) + goto killryan; + _cmp(data.byte(kLastweapon), 8); + if (!flags.z()) + goto nomadspeak; + data.byte(kCombatcount) = 72; + data.byte(kLastweapon) = -1; + data.byte(kMadmanflag) = 1; + ax = 67; + goto nomadspeak; +killryan: + ax = 310; +nomadspeak: + es.word(bx+3) = ax; +nomadspeed: + showgamereel(); + al = data.byte(kMapx); + es.byte(bx+1) = al; + madmode(); + return; +madmanspoken: + _cmp(data.byte(kWongame), 1); + if (flags.z()) + return /* (alreadywon) */; + data.byte(kWongame) = 1; + push(es); + push(bx); + getridoftemptext(); + bx = pop(); + es = pop(); + return; +ryansded: + data.byte(kMandead) = 2; + showgamereel(); +} + +void DreamGenContext::madmantext() { + STACK_CHECK; + _cmp(data.byte(kSpeechcount), 63); + if (!flags.c()) + return /* (nomadtext) */; + _cmp(data.byte(kCh1playing), 255); + if (!flags.z()) + return /* (nomadtext) */; + al = data.byte(kSpeechcount); + _inc(data.byte(kSpeechcount)); + _add(al, 47); + bl = 72; + bh = 80; + cx = 90; + dx = 1; + ah = 82; + setuptimedtemp(); +} + +void DreamGenContext::madmode() { + STACK_CHECK; + data.word(kWatchingtime) = 2; + data.byte(kPointermode) = 0; + _cmp(data.byte(kCombatcount), 65); + if (flags.c()) + return /* (iswatchmad) */; + _cmp(data.byte(kCombatcount), 70); + if (!flags.c()) + return /* (iswatchmad) */; + data.byte(kPointermode) = 2; +} + +void DreamGenContext::priesttext() { + STACK_CHECK; + _cmp(es.word(bx+3), 2); + if (flags.c()) + return /* (nopriesttext) */; + _cmp(es.word(bx+3), 7); + if (!flags.c()) + return /* (nopriesttext) */; + al = es.byte(bx+3); + _and(al, 1); + if (!flags.z()) + return /* (nopriesttext) */; + al = es.byte(bx+3); + _shr(al, 1); + _add(al, 50); + bl = 72; + bh = 80; + cx = 54; + dx = 1; + setuptimeduse(); +} + +void DreamGenContext::textforend() { + STACK_CHECK; + _cmp(data.byte(kIntrocount), 20); + if (!flags.z()) + goto notendtext1; + al = 0; + bl = 34; + bh = 20; + cx = 60; + goto gotendtext; +notendtext1: + _cmp(data.byte(kIntrocount), 50); + if (!flags.z()) + goto notendtext2; + al = 1; + bl = 34; + bh = 20; + cx = 60; + goto gotendtext; +notendtext2: + _cmp(data.byte(kIntrocount), 85); + if (!flags.z()) + return /* (notendtext3) */; + al = 2; + bl = 34; + bh = 20; + cx = 60; + goto gotendtext; + return; +gotendtext: + dx = 1; + ah = 83; + setuptimedtemp(); +} + +void DreamGenContext::textformonk() { + STACK_CHECK; + _cmp(data.byte(kIntrocount), 1); + if (!flags.z()) + goto notmonktext1; + al = 19; + bl = 68; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext1: + _cmp(data.byte(kIntrocount), 5); + if (!flags.z()) + goto notmonktext2; + al = 20; + bl = 68; + bh = 38; + cx = 120; + goto gotmonktext; +notmonktext2: + _cmp(data.byte(kIntrocount), 9); + if (!flags.z()) + goto notmonktext3; + al = 21; + bl = 48; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext3: + _cmp(data.byte(kIntrocount), 13); + if (!flags.z()) + goto notmonktext4; + al = 22; + bl = 68; + bh = 38; + cx = 120; + goto gotmonktext; +notmonktext4: + _cmp(data.byte(kIntrocount), 15); + if (!flags.z()) + goto notmonktext5; + al = 23; + bl = 68; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext5: + _cmp(data.byte(kIntrocount), 21); + if (!flags.z()) + goto notmonktext6; + al = 24; + bl = 68; + bh = 38; + cx = 120; + goto gotmonktext; +notmonktext6: + _cmp(data.byte(kIntrocount), 25); + if (!flags.z()) + goto notmonktext7; + al = 25; + bl = 68; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext7: + _cmp(data.byte(kIntrocount), 29); + if (!flags.z()) + goto notmonktext8; + al = 26; + bl = 68; + bh = 38; + cx = 120; + goto gotmonktext; +notmonktext8: + _cmp(data.byte(kIntrocount), 33); + if (!flags.z()) + goto notmonktext9; + al = 27; + bl = 68; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext9: + _cmp(data.byte(kIntrocount), 37); + if (!flags.z()) + goto notmonktext10; + al = 28; + bl = 68; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext10: + _cmp(data.byte(kIntrocount), 41); + if (!flags.z()) + goto notmonktext11; + al = 29; + bl = 68; + bh = 38; + cx = 120; + goto gotmonktext; +notmonktext11: + _cmp(data.byte(kIntrocount), 45); + if (!flags.z()) + goto notmonktext12; + al = 30; + bl = 68; + bh = 154; + cx = 120; + goto gotmonktext; +notmonktext12: + _cmp(data.byte(kIntrocount), 52); + if (!flags.z()) + goto notmonktext13; + al = 31; + bl = 68; + bh = 154; + cx = 220; + goto gotmonktext; +notmonktext13: + _cmp(data.byte(kIntrocount), 53); + if (!flags.z()) + return /* (notendtitles) */; + fadescreendowns(); + data.byte(kVolumeto) = 7; + data.byte(kVolumedirection) = 1; + return; +gotmonktext: + dx = 1; + ah = 82; + _cmp(data.byte(kCh1playing), 255); + if (flags.z()) + goto oktalk; + _dec(data.byte(kIntrocount)); + return; +oktalk: + setuptimedtemp(); +} + +void DreamGenContext::drunk() { + STACK_CHECK; + _cmp(data.byte(kGeneraldead), 0); + if (!flags.z()) + return /* (trampgone) */; + al = es.byte(bx+7); + _and(al, 127); + es.byte(bx+7) = al; + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::advisor() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto noadvisor; + goto noadvisor; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 123); + if (!flags.z()) + goto notendadvis; + ax = 106; + goto gotadvframe; +notendadvis: + _cmp(ax, 108); + if (!flags.z()) + goto gotadvframe; + push(ax); + randomnumber(); + cl = al; + ax = pop(); + _cmp(cl, 3); + if (flags.c()) + goto gotadvframe; + ax = 106; +gotadvframe: + es.word(bx+3) = ax; +noadvisor: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::copper() { + STACK_CHECK; + checkspeed(); + if (!flags.z()) + goto nocopper; + ax = es.word(bx+3); + _inc(ax); + _cmp(ax, 94); + if (!flags.z()) + goto notendcopper; + ax = 64; + goto gotcopframe; +notendcopper: + _cmp(ax, 81); + if (flags.z()) + goto mightwait; + _cmp(ax, 66); + if (!flags.z()) + goto gotcopframe; +mightwait: + push(ax); + randomnumber(); + cl = al; + ax = pop(); + _cmp(cl, 7); + if (flags.c()) + goto gotcopframe; + _dec(ax); +gotcopframe: + es.word(bx+3) = ax; +nocopper: + showgamereel(); + addtopeoplelist(); +} + +void DreamGenContext::sparky() { + STACK_CHECK; + _cmp(data.word(kCard1money), 0); + if (flags.z()) + goto animsparky; + es.byte(bx+7) = 3; + goto animsparky; +animsparky: + checkspeed(); + if (!flags.z()) + goto finishsparky; + _cmp(es.word(bx+3), 34); + if (!flags.z()) + goto notsparky1; + randomnumber(); + _cmp(al, 30); + if (flags.c()) + goto dosparky; + es.word(bx+3) = 27; + goto finishsparky; +notsparky1: + _cmp(es.word(bx+3), 48); + if (!flags.z()) + goto dosparky; + es.word(bx+3) = 27; + goto finishsparky; +dosparky: + _inc(es.word(bx+3)); +finishsparky: + showgamereel(); + addtopeoplelist(); + al = es.byte(bx+7); + _and(al, 128); + if (flags.z()) + return /* (nottalkedsparky) */; + data.byte(kTalkedtosparky) = 1; +} + +void DreamGenContext::train() { + STACK_CHECK; + return; + ax = es.word(bx+3); + _cmp(ax, 21); + if (!flags.c()) + goto notrainyet; + _inc(ax); + goto gottrainframe; +notrainyet: + randomnumber(); + _cmp(al, 253); + if (flags.c()) + return /* (notrainatall) */; + _cmp(data.byte(kManspath), 5); + if (!flags.z()) + return /* (notrainatall) */; + _cmp(data.byte(kFinaldest), 5); + if (!flags.z()) + return /* (notrainatall) */; + ax = 5; +gottrainframe: + es.word(bx+3) = ax; + showgamereel(); +} + +void DreamGenContext::addtopeoplelist() { + STACK_CHECK; + push(es); + push(bx); + push(bx); + cl = es.byte(bx+7); + ax = es.word(bx+3); + bx = data.word(kListpos); + es = data.word(kBuffers); + es.word(bx) = ax; + ax = pop(); + es.word(bx+2) = ax; + es.byte(bx+4) = cl; + bx = pop(); + es = pop(); + _add(data.word(kListpos), 5); +} + +void DreamGenContext::showgamereel() { + STACK_CHECK; + ax = es.word(bx+3); + _cmp(ax, 512); + if (!flags.c()) + return /* (noshow) */; + data.word(kReelpointer) = ax; + push(es); + push(bx); + plotreel(); + bx = pop(); + es = pop(); + ax = data.word(kReelpointer); + es.word(bx+3) = ax; +} + +void DreamGenContext::checkspeed() { + STACK_CHECK; + _cmp(data.byte(kLastweapon), -1); + if (!flags.z()) + goto forcenext; + _inc(es.byte(bx+6)); + al = es.byte(bx+6); + _cmp(al, es.byte(bx+5)); + if (!flags.z()) + return /* (notspeed) */; + al = 0; + es.byte(bx+6) = al; + _cmp(al, al); + return; +forcenext: + _cmp(al, al); +} + +void DreamGenContext::clearsprites() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768); + al = 255; + cx = (32)*16; + _stosb(cx, true); +} + +void DreamGenContext::makesprite() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768); +_tmp17: + _cmp(es.byte(bx+15), 255); + if (flags.z()) + goto _tmp17a; + _add(bx, (32)); + goto _tmp17; +_tmp17a: + es.word(bx) = cx; + es.word(bx+10) = si; + es.word(bx+6) = dx; + es.word(bx+8) = di; + es.word(bx+2) = 0x0ffff; + es.byte(bx+15) = 0; + es.byte(bx+18) = 0; +} + +void DreamGenContext::delsprite() { + STACK_CHECK; + di = bx; + cx = (32); + al = 255; + _stosb(cx, true); +} + +void DreamGenContext::spriteupdate() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768); + al = data.byte(kRyanon); + es.byte(bx+31) = al; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768); + cx = 16; +_tmp18: + push(cx); + push(bx); + ax = es.word(bx); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto _tmp18a; + push(es); + push(ds); + cx = es.word(bx+2); + es.word(bx+24) = cx; + __dispatch_call(ax); + ds = pop(); + es = pop(); +_tmp18a: + bx = pop(); + cx = pop(); + _cmp(data.byte(kNowinnewroom), 1); + if (flags.z()) + return /* ($18b) */; + _add(bx, (32)); + if (--cx) + goto _tmp18; +} + +void DreamGenContext::printsprites() { + STACK_CHECK; + es = data.word(kBuffers); + cx = 0; +priorityloop: + push(cx); + data.byte(kPriority) = cl; + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768); + cx = 16; +prtspriteloop: + push(cx); + push(bx); + ax = es.word(bx); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto skipsprite; + al = data.byte(kPriority); + _cmp(al, es.byte(bx+23)); + if (!flags.z()) + goto skipsprite; + _cmp(es.byte(bx+31), 1); + if (flags.z()) + goto skipsprite; + printasprite(); +skipsprite: + bx = pop(); + cx = pop(); + _add(bx, (32)); + if (--cx) + goto prtspriteloop; + cx = pop(); + _inc(cx); + _cmp(cx, 7); + if (!flags.z()) + goto priorityloop; +} + +void DreamGenContext::printasprite() { + STACK_CHECK; + push(es); + push(bx); + si = bx; + ds = es.word(si+6); + al = es.byte(si+11); + ah = 0; + _cmp(al, 220); + if (flags.c()) + goto notnegative1; + ah = 255; +notnegative1: + bx = ax; + _add(bx, data.word(kMapady)); + al = es.byte(si+10); + ah = 0; + _cmp(al, 220); + if (flags.c()) + goto notnegative2; + ah = 255; +notnegative2: + di = ax; + _add(di, data.word(kMapadx)); + al = es.byte(si+15); + ah = 0; + _cmp(es.byte(si+30), 0); + if (flags.z()) + goto steadyframe; + ah = 8; +steadyframe: + _cmp(data.byte(kPriority), 6); + if (!flags.z()) + goto notquickp; +notquickp: + showframe(); + bx = pop(); + es = pop(); +} + +void DreamGenContext::checkone() { + STACK_CHECK; + push(cx); + al = ch; + ah = 0; + cl = 4; + _shr(ax, cl); + dl = al; + cx = pop(); + al = cl; + ah = 0; + cl = 4; + _shr(ax, cl); + ah = dl; + push(ax); + ch = 0; + cl = al; + push(cx); + al = ah; + ah = 0; + cx = 11; + _mul(cx); + cx = pop(); + _add(ax, cx); + cx = 3; + _mul(cx); + si = ax; + ds = data.word(kBuffers); + _add(si, (0+(180*10)+32+60+(32*32))); + _lodsw(); + cx = ax; + _lodsb(); + dx = pop(); +} + +void DreamGenContext::findsource() { + STACK_CHECK; + ax = data.word(kCurrentframe); + _cmp(ax, 160); + if (!flags.c()) + goto over1000; + ds = data.word(kReel1); + data.word(kTakeoff) = 0; + return; +over1000: + _cmp(ax, 320); + if (!flags.c()) + goto over1001; + ds = data.word(kReel2); + data.word(kTakeoff) = 160; + return; +over1001: + ds = data.word(kReel3); + data.word(kTakeoff) = 320; +} + +void DreamGenContext::initman() { + STACK_CHECK; + al = data.byte(kRyanx); + ah = data.byte(kRyany); + si = ax; + cx = 49464; + dx = data.word(kMainsprites); + di = 0; + makesprite(); + es.byte(bx+23) = 4; + es.byte(bx+22) = 0; + es.byte(bx+29) = 0; +} + +void DreamGenContext::mainman() { + STACK_CHECK; + _cmp(data.byte(kResetmanxy), 1); + if (!flags.z()) + goto notinnewroom; + data.byte(kResetmanxy) = 0; + al = data.byte(kRyanx); + ah = data.byte(kRyany); + es.word(bx+10) = ax; + es.byte(bx+29) = 0; + goto executewalk; +notinnewroom: + _dec(es.byte(bx+22)); + _cmp(es.byte(bx+22), -1); + if (flags.z()) + goto executewalk; + return; +executewalk: + es.byte(bx+22) = 0; + al = data.byte(kTurntoface); + _cmp(al, data.byte(kFacing)); + if (flags.z()) + goto facingok; + aboutturn(); + goto notwalk; +facingok: + _cmp(data.byte(kTurndirection), 0); + if (flags.z()) + goto alreadyturned; + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + goto alreadyturned; + data.byte(kReasseschanges) = 1; + al = data.byte(kFacing); + _cmp(al, data.byte(kLeavedirection)); + if (!flags.z()) + goto alreadyturned; + checkforexit(); +alreadyturned: + data.byte(kTurndirection) = 0; + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + goto walkman; + es.byte(bx+29) = 0; + goto notwalk; +walkman: + al = es.byte(bx+29); + _inc(al); + _cmp(al, 11); + if (!flags.z()) + goto notanimend1; + al = 1; +notanimend1: + es.byte(bx+29) = al; + walking(); + _cmp(data.byte(kLinepointer), 254); + if (flags.z()) + goto afterwalk; + al = data.byte(kFacing); + _and(al, 1); + if (flags.z()) + goto isdouble; + al = es.byte(bx+29); + _cmp(al, 2); + if (flags.z()) + goto afterwalk; + _cmp(al, 7); + if (flags.z()) + goto afterwalk; +isdouble: + walking(); +afterwalk: + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + goto notwalk; + al = data.byte(kTurntoface); + _cmp(al, data.byte(kFacing)); + if (!flags.z()) + goto notwalk; + data.byte(kReasseschanges) = 1; + al = data.byte(kFacing); + _cmp(al, data.byte(kLeavedirection)); + if (!flags.z()) + goto notwalk; + checkforexit(); +notwalk: + al = data.byte(kFacing); + ah = 0; + di = 1105; + _add(di, ax); + al = cs.byte(di); + _add(al, es.byte(bx+29)); + es.byte(bx+15) = al; + ax = es.word(bx+10); + data.byte(kRyanx) = al; + data.byte(kRyany) = ah; +} + +void DreamGenContext::aboutturn() { + STACK_CHECK; + _cmp(data.byte(kTurndirection), 1); + if (flags.z()) + goto incdir; + _cmp(data.byte(kTurndirection), -1); + if (flags.z()) + goto decdir; + al = data.byte(kFacing); + _sub(al, data.byte(kTurntoface)); + if (!flags.c()) + goto higher; + _neg(al); + _cmp(al, 4); + if (!flags.c()) + goto decdir; + goto incdir; +higher: + _cmp(al, 4); + if (!flags.c()) + goto incdir; + goto decdir; +incdir: + data.byte(kTurndirection) = 1; + al = data.byte(kFacing); + _inc(al); + _and(al, 7); + data.byte(kFacing) = al; + es.byte(bx+29) = 0; + return; +decdir: + data.byte(kTurndirection) = -1; + al = data.byte(kFacing); + _dec(al); + _and(al, 7); + data.byte(kFacing) = al; + es.byte(bx+29) = 0; +} + +void DreamGenContext::walking() { + STACK_CHECK; + _cmp(data.byte(kLinedirection), 0); + if (flags.z()) + goto normalwalk; + al = data.byte(kLinepointer); + _dec(al); + data.byte(kLinepointer) = al; + _cmp(al, 200); + if (!flags.c()) + goto endofline; + goto continuewalk; +normalwalk: + al = data.byte(kLinepointer); + _inc(al); + data.byte(kLinepointer) = al; + _cmp(al, data.byte(kLinelength)); + if (!flags.c()) + goto endofline; +continuewalk: + ah = 0; + _add(ax, ax); + push(es); + push(bx); + dx = data; + es = dx; + bx = 8173; + _add(bx, ax); + ax = es.word(bx); + bx = pop(); + es = pop(); + es.word(bx+10) = ax; + return; +endofline: + data.byte(kLinepointer) = 254; + al = data.byte(kDestination); + data.byte(kManspath) = al; + _cmp(al, data.byte(kFinaldest)); + if (flags.z()) + goto finishedwalk; + al = data.byte(kFinaldest); + data.byte(kDestination) = al; + push(es); + push(bx); + autosetwalk(); + bx = pop(); + es = pop(); + return; +finishedwalk: + facerightway(); +} + +void DreamGenContext::facerightway() { + STACK_CHECK; + push(es); + push(bx); + getroomspaths(); + al = data.byte(kManspath); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = es.byte(bx+7); + data.byte(kTurntoface) = al; + data.byte(kLeavedirection) = al; + bx = pop(); + es = pop(); +} + +void DreamGenContext::checkforexit() { + STACK_CHECK; + cl = data.byte(kRyanx); + _add(cl, 12); + ch = data.byte(kRyany); + _add(ch, 12); + checkone(); + data.byte(kLastflag) = cl; + data.byte(kLastflagex) = ch; + data.byte(kFlagx) = dl; + data.byte(kFlagy) = dh; + al = data.byte(kLastflag); + _test(al, 64); + if (flags.z()) + goto notnewdirect; + al = data.byte(kLastflagex); + data.byte(kAutolocation) = al; + return; +notnewdirect: + _test(al, 32); + if (flags.z()) + goto notleave; + push(es); + push(bx); + _cmp(data.byte(kReallocation), 2); + if (!flags.z()) + goto notlouis; + bl = 0; + push(bx); + al = 'W'; + ah = 'E'; + cl = 'T'; + ch = 'A'; + isryanholding(); + bx = pop(); + if (flags.z()) + goto noshoe1; + _inc(bl); +noshoe1: + push(bx); + al = 'W'; + ah = 'E'; + cl = 'T'; + ch = 'B'; + isryanholding(); + bx = pop(); + if (flags.z()) + goto noshoe2; + _inc(bl); +noshoe2: + _cmp(bl, 2); + if (flags.z()) + goto notlouis; + al = 42; + _cmp(bl, 0); + if (flags.z()) + goto notravmessage; + _inc(al); +notravmessage: + cx = 80; + dx = 10; + bl = 68; + bh = 64; + setuptimeduse(); + al = data.byte(kFacing); + _add(al, 4); + _and(al, 7); + data.byte(kTurntoface) = al; + bx = pop(); + es = pop(); + return; +notlouis: + bx = pop(); + es = pop(); + data.byte(kNeedtotravel) = 1; + return; +notleave: + _test(al, 4); + if (flags.z()) + goto notaleft; + adjustleft(); + return; +notaleft: + _test(al, 2); + if (flags.z()) + goto notaright; + adjustright(); + return; +notaright: + _test(al, 8); + if (flags.z()) + goto notadown; + adjustdown(); + return; +notadown: + _test(al, 16); + if (flags.z()) + return /* (notanup) */; + adjustup(); +} + +void DreamGenContext::adjustdown() { + STACK_CHECK; + push(es); + push(bx); + _add(data.byte(kMapy), 10); + al = data.byte(kLastflagex); + cl = 16; + _mul(cl); + es.byte(bx+11) = al; + data.byte(kNowinnewroom) = 1; + bx = pop(); + es = pop(); +} + +void DreamGenContext::adjustup() { + STACK_CHECK; + push(es); + push(bx); + _sub(data.byte(kMapy), 10); + al = data.byte(kLastflagex); + cl = 16; + _mul(cl); + es.byte(bx+11) = al; + data.byte(kNowinnewroom) = 1; + bx = pop(); + es = pop(); +} + +void DreamGenContext::adjustleft() { + STACK_CHECK; + push(es); + push(bx); + data.byte(kLastflag) = 0; + _sub(data.byte(kMapx), 11); + al = data.byte(kLastflagex); + cl = 16; + _mul(cl); + es.byte(bx+10) = al; + data.byte(kNowinnewroom) = 1; + bx = pop(); + es = pop(); +} + +void DreamGenContext::adjustright() { + STACK_CHECK; + push(es); + push(bx); + _add(data.byte(kMapx), 11); + al = data.byte(kLastflagex); + cl = 16; + _mul(cl); + _sub(al, 2); + es.byte(bx+10) = al; + data.byte(kNowinnewroom) = 1; + bx = pop(); + es = pop(); +} + +void DreamGenContext::reminders() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 24); + if (!flags.z()) + return /* (notinedenslift) */; + _cmp(data.byte(kMapx), 44); + if (!flags.z()) + return /* (notinedenslift) */; + _cmp(data.byte(kProgresspoints), 0); + if (!flags.z()) + return /* (notfirst) */; + al = 'D'; + ah = 'K'; + cl = 'E'; + ch = 'Y'; + isryanholding(); + if (flags.z()) + goto forgotone; + al = 'C'; + ah = 'S'; + cl = 'H'; + ch = 'R'; + findexobject(); + _cmp(al, (114)); + if (flags.z()) + goto forgotone; + ax = es.word(bx+2); + _cmp(al, 4); + if (!flags.z()) + goto forgotone; + _cmp(ah, 255); + if (flags.z()) + goto havegotcard; + cl = 'P'; + ch = 'U'; + dl = 'R'; + dh = 'S'; + _xchg(al, ah); + compare(); + if (!flags.z()) + goto forgotone; +havegotcard: + _inc(data.byte(kProgresspoints)); + return; +forgotone: + al = 50; + bl = 54; + bh = 70; + cx = 48; + dx = 8; + setuptimeduse(); +} + +void DreamGenContext::initrain() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*24)); + bx = 1113; +checkmorerain: + al = cs.byte(bx); + _cmp(al, 255); + if (flags.z()) + goto finishinitrain; + _cmp(al, data.byte(kReallocation)); + if (!flags.z()) + goto checkrain; + al = cs.byte(bx+1); + _cmp(al, data.byte(kMapx)); + if (!flags.z()) + goto checkrain; + al = cs.byte(bx+2); + _cmp(al, data.byte(kMapy)); + if (!flags.z()) + goto checkrain; + al = cs.byte(bx+3); + data.byte(kRainspace) = al; + goto dorain; +checkrain: + _add(bx, 4); + goto checkmorerain; +dorain: + cx = 4; +initraintop: + randomnumber(); + _and(al, 31); + _add(al, 3); + _cmp(al, data.byte(kRainspace)); + if (!flags.c()) + goto initraintop; + _add(cl, al); + _cmp(cl, data.byte(kMapxsize)); + if (!flags.c()) + goto initrainside; + push(cx); + splitintolines(); + cx = pop(); + goto initraintop; +initrainside: + cl = data.byte(kMapxsize); + _dec(cl); +initrainside2: + randomnumber(); + _and(al, 31); + _add(al, 3); + _cmp(al, data.byte(kRainspace)); + if (!flags.c()) + goto initrainside2; + _add(ch, al); + _cmp(ch, data.byte(kMapysize)); + if (!flags.c()) + goto finishinitrain; + push(cx); + splitintolines(); + cx = pop(); + goto initrainside2; +finishinitrain: + al = 255; + _stosb(); +} + +void DreamGenContext::splitintolines() { + STACK_CHECK; +lookforlinestart: + getblockofpixel(); + _cmp(al, 0); + if (!flags.z()) + goto foundlinestart; + _dec(cl); + _inc(ch); + _cmp(cl, 0); + if (flags.z()) + return /* (endofthisline) */; + _cmp(ch, data.byte(kMapysize)); + if (!flags.c()) + return /* (endofthisline) */; + goto lookforlinestart; +foundlinestart: + es.word(di) = cx; + bh = 1; +lookforlineend: + getblockofpixel(); + _cmp(al, 0); + if (flags.z()) + goto foundlineend; + _dec(cl); + _inc(ch); + _cmp(cl, 0); + if (flags.z()) + goto foundlineend; + _cmp(ch, data.byte(kMapysize)); + if (!flags.c()) + goto foundlineend; + _inc(bh); + goto lookforlineend; +foundlineend: + push(cx); + es.byte(di+2) = bh; + randomnumber(); + es.byte(di+3) = al; + randomnumber(); + es.byte(di+4) = al; + randomnumber(); + _and(al, 3); + _add(al, 4); + es.byte(di+5) = al; + _add(di, 6); + cx = pop(); + _cmp(cl, 0); + if (flags.z()) + return /* (endofthisline) */; + _cmp(ch, data.byte(kMapysize)); + if (!flags.c()) + return /* (endofthisline) */; + goto lookforlinestart; +} + +void DreamGenContext::getblockofpixel() { + STACK_CHECK; + push(cx); + push(es); + push(di); + ax = data.word(kMapxstart); + _add(cl, al); + ax = data.word(kMapystart); + _add(ch, al); + checkone(); + _and(cl, 1); + if (!flags.z()) + goto failrain; + di = pop(); + es = pop(); + cx = pop(); + return; +failrain: + di = pop(); + es = pop(); + cx = pop(); + al = 0; +} + +void DreamGenContext::showrain() { + STACK_CHECK; + ds = data.word(kMainsprites); + si = 6*58; + ax = ds.word(si+2); + si = ax; + _add(si, 2080); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*24)); + es = data.word(kBuffers); + _cmp(es.byte(bx), 255); + if (flags.z()) + return /* (nothunder) */; +morerain: + es = data.word(kBuffers); + _cmp(es.byte(bx), 255); + if (flags.z()) + goto finishrain; + al = es.byte(bx+1); + ah = 0; + _add(ax, data.word(kMapady)); + _add(ax, data.word(kMapystart)); + cx = 320; + _mul(cx); + cl = es.byte(bx); + ch = 0; + _add(ax, cx); + _add(ax, data.word(kMapadx)); + _add(ax, data.word(kMapxstart)); + di = ax; + cl = es.byte(bx+2); + ch = 0; + ax = es.word(bx+3); + dl = es.byte(bx+5); + dh = 0; + _sub(ax, dx); + _and(ax, 511); + es.word(bx+3) = ax; + _add(bx, 6); + push(si); + _add(si, ax); + es = data.word(kWorkspace); + ah = 0; + dx = 320-2; +rainloop: + _lodsb(); + _cmp(al, ah); + if (flags.z()) + goto noplot; + _stosb(); + _add(di, dx); + if (--cx) + goto rainloop; + si = pop(); + goto morerain; +noplot: + _add(di, 320-1); + if (--cx) + goto rainloop; + si = pop(); + goto morerain; +finishrain: + _cmp(data.word(kCh1blockstocopy), 0); + if (!flags.z()) + return /* (nothunder) */; + _cmp(data.byte(kReallocation), 2); + if (!flags.z()) + goto notlouisthund; + _cmp(data.byte(kBeenmugged), 1); + if (!flags.z()) + return /* (nothunder) */; +notlouisthund: + _cmp(data.byte(kReallocation), 55); + if (flags.z()) + return /* (nothunder) */; + randomnum1(); + _cmp(al, 1); + if (!flags.c()) + return /* (nothunder) */; + al = 7; + _cmp(data.byte(kCh0playing), 6); + if (flags.z()) + goto isthunder1; + al = 4; +isthunder1: + playchannel1(); +} + +void DreamGenContext::backobject() { + STACK_CHECK; + ds = data.word(kSetdat); + di = es.word(bx+20); + al = es.byte(bx+18); + _cmp(al, 0); + if (flags.z()) + goto _tmp48z; + _dec(al); + es.byte(bx+18) = al; + return /* (finishback) */; +_tmp48z: + al = ds.byte(di+7); + es.byte(bx+18) = al; + al = ds.byte(di+8); + _cmp(al, 6); + if (!flags.z()) + goto notwidedoor; + widedoor(); + return /* (finishback) */; +notwidedoor: + _cmp(al, 5); + if (!flags.z()) + goto notrandom; + random(); + return /* (finishback) */; +notrandom: + _cmp(al, 4); + if (!flags.z()) + goto notlockdoor; + lockeddoorway(); + return /* (finishback) */; +notlockdoor: + _cmp(al, 3); + if (!flags.z()) + goto notlift; + liftsprite(); + return /* (finishback) */; +notlift: + _cmp(al, 2); + if (!flags.z()) + goto notdoor; + doorway(); + return /* (finishback) */; +notdoor: + _cmp(al, 1); + if (!flags.z()) + goto steadyob; + constant(); + return /* (finishback) */; +steadyob: + steady(); +} + +void DreamGenContext::liftsprite() { + STACK_CHECK; + al = data.byte(kLiftflag); + _cmp(al, 0); + if (flags.z()) + goto liftclosed; + _cmp(al, 1); + if (flags.z()) + goto liftopen; + _cmp(al, 3); + if (flags.z()) + goto openlift; + al = es.byte(bx+19); + _cmp(al, 0); + if (flags.z()) + goto finishclose; + _dec(al); + _cmp(al, 11); + if (!flags.z()) + goto pokelift; + push(ax); + al = 3; + liftnoise(); + ax = pop(); + goto pokelift; +finishclose: + data.byte(kLiftflag) = 0; + return; +openlift: + al = es.byte(bx+19); + _cmp(al, 12); + if (flags.z()) + goto endoflist; + _inc(al); + _cmp(al, 1); + if (!flags.z()) + goto pokelift; + push(ax); + al = 2; + liftnoise(); + ax = pop(); +pokelift: + es.byte(bx+19) = al; + ah = 0; + push(di); + _add(di, ax); + al = ds.byte(di+18); + di = pop(); + es.byte(bx+15) = al; + ds.byte(di+17) = al; + return; +endoflist: + data.byte(kLiftflag) = 1; + return; +liftopen: + al = data.byte(kLiftpath); + push(es); + push(bx); + turnpathon(); + bx = pop(); + es = pop(); + _cmp(data.byte(kCounttoclose), 0); + if (flags.z()) + goto nocountclose; + _dec(data.byte(kCounttoclose)); + _cmp(data.byte(kCounttoclose), 0); + if (!flags.z()) + goto nocountclose; + data.byte(kLiftflag) = 2; +nocountclose: + al = 12; + goto pokelift; +liftclosed: + al = data.byte(kLiftpath); + push(es); + push(bx); + turnpathoff(); + bx = pop(); + es = pop(); + _cmp(data.byte(kCounttoopen), 0); + if (flags.z()) + goto nocountopen; + _dec(data.byte(kCounttoopen)); + _cmp(data.byte(kCounttoopen), 0); + if (!flags.z()) + goto nocountopen; + data.byte(kLiftflag) = 3; +nocountopen: + al = 0; + goto pokelift; +} + +void DreamGenContext::liftnoise() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 5); + if (flags.z()) + goto hissnoise; + _cmp(data.byte(kReallocation), 21); + if (flags.z()) + goto hissnoise; + playchannel1(); + return; +hissnoise: + al = 13; + playchannel1(); +} + +void DreamGenContext::random() { + STACK_CHECK; + randomnum1(); + push(di); + _and(ax, 7); + _add(di, 18); + _add(di, ax); + al = ds.byte(di); + di = pop(); + es.byte(bx+15) = al; +} + +void DreamGenContext::steady() { + STACK_CHECK; + al = ds.byte(di+18); + ds.byte(di+17) = al; + es.byte(bx+15) = al; +} + +void DreamGenContext::constant() { + STACK_CHECK; + _inc(es.byte(bx+19)); + cl = es.byte(bx+19); + ch = 0; + _add(di, cx); + _cmp(ds.byte(di+18), 255); + if (!flags.z()) + goto gotconst; + _sub(di, cx); + cx = 0; + es.byte(bx+19) = cl; +gotconst: + al = ds.byte(di+18); + _sub(di, cx); + es.byte(bx+15) = al; + ds.byte(di+17) = al; +} + +void DreamGenContext::doorway() { + STACK_CHECK; + data.byte(kDoorcheck1) = -24; + data.byte(kDoorcheck2) = 10; + data.byte(kDoorcheck3) = -30; + data.byte(kDoorcheck4) = 10; + dodoor(); +} + +void DreamGenContext::widedoor() { + STACK_CHECK; + data.byte(kDoorcheck1) = -24; + data.byte(kDoorcheck2) = 24; + data.byte(kDoorcheck3) = -30; + data.byte(kDoorcheck4) = 24; + dodoor(); +} + +void DreamGenContext::dodoor() { + STACK_CHECK; + al = data.byte(kRyanx); + ah = data.byte(kRyany); + cl = es.byte(bx+10); + ch = es.byte(bx+11); + _cmp(al, cl); + if (!flags.c()) + goto rtofdoor; + _sub(al, cl); + _cmp(al, data.byte(kDoorcheck1)); + if (!flags.c()) + goto upordown; + goto shutdoor; +rtofdoor: + _sub(al, cl); + _cmp(al, data.byte(kDoorcheck2)); + if (!flags.c()) + goto shutdoor; +upordown: + _cmp(ah, ch); + if (!flags.c()) + goto botofdoor; + _sub(ah, ch); + _cmp(ah, data.byte(kDoorcheck3)); + if (flags.c()) + goto shutdoor; + goto opendoor; +botofdoor: + _sub(ah, ch); + _cmp(ah, data.byte(kDoorcheck4)); + if (!flags.c()) + goto shutdoor; +opendoor: + cl = es.byte(bx+19); + _cmp(data.byte(kThroughdoor), 1); + if (!flags.z()) + goto notthrough; + _cmp(cl, 0); + if (!flags.z()) + goto notthrough; + cl = 6; +notthrough: + _inc(cl); + _cmp(cl, 1); + if (!flags.z()) + goto notdoorsound2; + al = 0; + _cmp(data.byte(kReallocation), 5); + if (!flags.z()) + goto nothoteldoor2; + al = 13; +nothoteldoor2: + playchannel1(); +notdoorsound2: + ch = 0; + push(di); + _add(di, cx); + al = ds.byte(di+18); + _cmp(al, 255); + if (!flags.z()) + goto atlast1; + _dec(di); + _dec(cl); +atlast1: + es.byte(bx+19) = cl; + al = ds.byte(di+18); + di = pop(); + es.byte(bx+15) = al; + ds.byte(di+17) = al; + data.byte(kThroughdoor) = 1; + return; +shutdoor: + cl = es.byte(bx+19); + _cmp(cl, 5); + if (!flags.z()) + goto notdoorsound1; + al = 1; + _cmp(data.byte(kReallocation), 5); + if (!flags.z()) + goto nothoteldoor1; + al = 13; +nothoteldoor1: + playchannel1(); +notdoorsound1: + _cmp(cl, 0); + if (flags.z()) + goto atlast2; + _dec(cl); + es.byte(bx+19) = cl; +atlast2: + ch = 0; + push(di); + _add(di, cx); + al = ds.byte(di+18); + di = pop(); + es.byte(bx+15) = al; + ds.byte(di+17) = al; + _cmp(cl, 5); + if (!flags.z()) + return /* (notnearly) */; + data.byte(kThroughdoor) = 0; +} + +void DreamGenContext::lockeddoorway() { + STACK_CHECK; + al = data.byte(kRyanx); + ah = data.byte(kRyany); + cl = es.byte(bx+10); + ch = es.byte(bx+11); + _cmp(al, cl); + if (!flags.c()) + goto rtofdoor2; + _sub(al, cl); + _cmp(al, -24); + if (!flags.c()) + goto upordown2; + goto shutdoor2; +rtofdoor2: + _sub(al, cl); + _cmp(al, 10); + if (!flags.c()) + goto shutdoor2; +upordown2: + _cmp(ah, ch); + if (!flags.c()) + goto botofdoor2; + _sub(ah, ch); + _cmp(ah, -30); + if (flags.c()) + goto shutdoor2; + goto opendoor2; +botofdoor2: + _sub(ah, ch); + _cmp(ah, 12); + if (!flags.c()) + goto shutdoor2; +opendoor2: + _cmp(data.byte(kThroughdoor), 1); + if (flags.z()) + goto mustbeopen; + _cmp(data.byte(kLockstatus), 1); + if (flags.z()) + goto shutdoor; +mustbeopen: + cl = es.byte(bx+19); + _cmp(cl, 1); + if (!flags.z()) + goto notdoorsound4; + al = 0; + playchannel1(); +notdoorsound4: + _cmp(cl, 6); + if (!flags.z()) + goto noturnonyet; + al = data.byte(kDoorpath); + push(es); + push(bx); + turnpathon(); + bx = pop(); + es = pop(); +noturnonyet: + cl = es.byte(bx+19); + _cmp(data.byte(kThroughdoor), 1); + if (!flags.z()) + goto notthrough2; + _cmp(cl, 0); + if (!flags.z()) + goto notthrough2; + cl = 6; +notthrough2: + _inc(cl); + ch = 0; + push(di); + _add(di, cx); + al = ds.byte(di+18); + _cmp(al, 255); + if (!flags.z()) + goto atlast3; + _dec(di); + _dec(cl); +atlast3: + es.byte(bx+19) = cl; + al = ds.byte(di+18); + di = pop(); + es.byte(bx+15) = al; + ds.byte(di+17) = al; + _cmp(cl, 5); + if (!flags.z()) + return /* (justshutting) */; + data.byte(kThroughdoor) = 1; + return; +shutdoor2: + cl = es.byte(bx+19); + _cmp(cl, 5); + if (!flags.z()) + goto notdoorsound3; + al = 1; + playchannel1(); +notdoorsound3: + _cmp(cl, 0); + if (flags.z()) + goto atlast4; + _dec(cl); + es.byte(bx+19) = cl; +atlast4: + ch = 0; + data.byte(kThroughdoor) = 0; + push(di); + _add(di, cx); + al = ds.byte(di+18); + di = pop(); + es.byte(bx+15) = al; + ds.byte(di+17) = al; + _cmp(cl, 0); + if (!flags.z()) + return /* (notlocky) */; + al = data.byte(kDoorpath); + push(es); + push(bx); + turnpathoff(); + bx = pop(); + es = pop(); + data.byte(kLockstatus) = 1; +/*continuing to unbounded code: shutdoor from dodoor:60-87*/ +shutdoor: + cl = es.byte(bx+19); + _cmp(cl, 5); + if (!flags.z()) + goto notdoorsound1; + al = 1; + _cmp(data.byte(kReallocation), 5); + if (!flags.z()) + goto nothoteldoor1; + al = 13; +nothoteldoor1: + playchannel1(); +notdoorsound1: + _cmp(cl, 0); + if (flags.z()) + goto atlast2; + _dec(cl); + es.byte(bx+19) = cl; +atlast2: + ch = 0; + push(di); + _add(di, cx); + al = ds.byte(di+18); + di = pop(); + es.byte(bx+15) = al; + ds.byte(di+17) = al; + _cmp(cl, 5); + if (!flags.z()) + return /* (notnearly) */; + data.byte(kThroughdoor) = 0; +} + +void DreamGenContext::updatepeople() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)); + data.word(kListpos) = di; + cx = 12*5; + al = 255; + _stosb(cx, true); + _inc(data.word(kMaintimer)); + es = cs; + bx = 534; + di = 991; +updateloop: + al = es.byte(bx); + _cmp(al, 255); + if (flags.z()) + return /* (endupdate) */; + _cmp(al, data.byte(kReallocation)); + if (!flags.z()) + goto notinthisroom; + cx = es.word(bx+1); + _cmp(cl, data.byte(kMapx)); + if (!flags.z()) + goto notinthisroom; + _cmp(ch, data.byte(kMapy)); + if (!flags.z()) + goto notinthisroom; + push(di); + ax = cs.word(di); + __dispatch_call(ax); + di = pop(); +notinthisroom: + _add(bx, 8); + _add(di, 2); + goto updateloop; +} + +void DreamGenContext::getreelframeax() { + STACK_CHECK; + push(ds); + data.word(kCurrentframe) = ax; + findsource(); + es = ds; + ds = pop(); + ax = data.word(kCurrentframe); + _sub(ax, data.word(kTakeoff)); + _add(ax, ax); + cx = ax; + _add(ax, ax); + _add(ax, cx); + bx = ax; +} + +void DreamGenContext::reelsonscreen() { + STACK_CHECK; + reconstruct(); + updatepeople(); + watchreel(); + showrain(); + usetimedtext(); +} + +void DreamGenContext::plotreel() { + STACK_CHECK; + getreelstart(); +retryreel: + push(es); + push(si); + ax = es.word(si+2); + _cmp(al, 220); + if (flags.c()) + goto normalreel; + _cmp(al, 255); + if (flags.z()) + goto normalreel; + dealwithspecial(); + _inc(data.word(kReelpointer)); + si = pop(); + es = pop(); + _add(si, 40); + goto retryreel; +normalreel: + cx = 8; +plotloop: + push(cx); + push(es); + push(si); + ax = es.word(si); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto notplot; + showreelframe(); +notplot: + si = pop(); + es = pop(); + cx = pop(); + _add(si, 5); + if (--cx) + goto plotloop; + soundonreels(); + bx = pop(); + es = pop(); +} + +void DreamGenContext::soundonreels() { + STACK_CHECK; + bl = data.byte(kReallocation); + _add(bl, bl); + _xor(bh, bh); + _add(bx, 1214); + si = cs.word(bx); +reelsoundloop: + al = cs.byte(si); + _cmp(al, 255); + if (flags.z()) + goto endreelsound; + ax = cs.word(si+1); + _cmp(ax, data.word(kReelpointer)); + if (!flags.z()) + goto skipreelsound; + _cmp(ax, data.word(kLastsoundreel)); + if (flags.z()) + goto skipreelsound; + data.word(kLastsoundreel) = ax; + al = cs.byte(si); + _cmp(al, 64); + if (flags.c()) + { playchannel1(); return; }; + _cmp(al, 128); + if (flags.c()) + goto channel0once; + _and(al, 63); + ah = 255; + { playchannel0(); return; }; +channel0once: + _and(al, 63); + ah = 0; + { playchannel0(); return; }; +skipreelsound: + _add(si, 3); + goto reelsoundloop; +endreelsound: + ax = data.word(kLastsoundreel); + _cmp(ax, data.word(kReelpointer)); + if (flags.z()) + return /* (nochange2) */; + data.word(kLastsoundreel) = -1; +} + +void DreamGenContext::reconstruct() { + STACK_CHECK; + _cmp(data.byte(kHavedoneobs), 0); + if (flags.z()) + return /* (noneedtorecon) */; + data.byte(kNewobs) = 1; + drawfloor(); + spriteupdate(); + printsprites(); + data.byte(kHavedoneobs) = 0; +} + +void DreamGenContext::dealwithspecial() { + STACK_CHECK; + _sub(al, 220); + _cmp(al, 0); + if (!flags.z()) + goto notplset; + al = ah; + placesetobject(); + data.byte(kHavedoneobs) = 1; + return; +notplset: + _cmp(al, 1); + if (!flags.z()) + goto notremset; + al = ah; + removesetobject(); + data.byte(kHavedoneobs) = 1; + return; +notremset: + _cmp(al, 2); + if (!flags.z()) + goto notplfree; + al = ah; + placefreeobject(); + data.byte(kHavedoneobs) = 1; + return; +notplfree: + _cmp(al, 3); + if (!flags.z()) + goto notremfree; + al = ah; + removefreeobject(); + data.byte(kHavedoneobs) = 1; + return; +notremfree: + _cmp(al, 4); + if (!flags.z()) + goto notryanoff; + switchryanoff(); + return; +notryanoff: + _cmp(al, 5); + if (!flags.z()) + goto notryanon; + data.byte(kTurntoface) = ah; + data.byte(kFacing) = ah; + switchryanon(); + return; +notryanon: + _cmp(al, 6); + if (!flags.z()) + goto notchangeloc; + data.byte(kNewlocation) = ah; + return; +notchangeloc: + movemap(); +} + +void DreamGenContext::movemap() { + STACK_CHECK; + _cmp(ah, 32); + if (!flags.z()) + goto notmapup2; + _sub(data.byte(kMapy), 20); + data.byte(kNowinnewroom) = 1; + return; +notmapup2: + _cmp(ah, 16); + if (!flags.z()) + goto notmapupspec; + _sub(data.byte(kMapy), 10); + data.byte(kNowinnewroom) = 1; + return; +notmapupspec: + _cmp(ah, 8); + if (!flags.z()) + goto notmapdownspec; + _add(data.byte(kMapy), 10); + data.byte(kNowinnewroom) = 1; + return; +notmapdownspec: + _cmp(ah, 2); + if (!flags.z()) + goto notmaprightspec; + _add(data.byte(kMapx), 11); + data.byte(kNowinnewroom) = 1; + return; +notmaprightspec: + _sub(data.byte(kMapx), 11); + data.byte(kNowinnewroom) = 1; +} + +void DreamGenContext::getreelstart() { + STACK_CHECK; + ax = data.word(kReelpointer); + cx = 40; + _mul(cx); + es = data.word(kReels); + si = ax; + _add(si, (0+(36*144))); +} + +void DreamGenContext::showreelframe() { + STACK_CHECK; + al = es.byte(si+2); + ah = 0; + di = ax; + _add(di, data.word(kMapadx)); + al = es.byte(si+3); + bx = ax; + _add(bx, data.word(kMapady)); + ax = es.word(si); + data.word(kCurrentframe) = ax; + findsource(); + ax = data.word(kCurrentframe); + _sub(ax, data.word(kTakeoff)); + ah = 8; + showframe(); +} + +void DreamGenContext::deleverything() { + STACK_CHECK; + al = data.byte(kMapysize); + ah = 0; + _add(ax, data.word(kMapoffsety)); + _cmp(ax, 182); + if (!flags.c()) + goto bigroom; + maptopanel(); + return; +bigroom: + _sub(data.byte(kMapysize), 8); + maptopanel(); + _add(data.byte(kMapysize), 8); +} + +void DreamGenContext::dumpeverything() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)); +dumpevery1: + ax = es.word(bx); + cx = es.word(bx+2); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto finishevery1; + _cmp(ax, es.word(bx+(40*5))); + if (!flags.z()) + goto notskip1; + _cmp(cx, es.word(bx+(40*5)+2)); + if (flags.z()) + goto skip1; +notskip1: + push(bx); + push(es); + push(ds); + bl = ah; + bh = 0; + ah = 0; + di = ax; + _add(di, data.word(kMapadx)); + _add(bx, data.word(kMapady)); + multidump(); + ds = pop(); + es = pop(); + bx = pop(); +skip1: + _add(bx, 5); + goto dumpevery1; +finishevery1: + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40))+(40*5); +dumpevery2: + ax = es.word(bx); + cx = es.word(bx+2); + _cmp(ax, 0x0ffff); + if (flags.z()) + return /* (finishevery2) */; + push(bx); + push(es); + push(ds); + bl = ah; + bh = 0; + ah = 0; + di = ax; + _add(di, data.word(kMapadx)); + _add(bx, data.word(kMapady)); + multidump(); + ds = pop(); + es = pop(); + bx = pop(); + _add(bx, 5); + goto dumpevery2; +} + +void DreamGenContext::allocatework() { + STACK_CHECK; + bx = 0x1000; + allocatemem(); + data.word(kWorkspace) = ax; +} + +void DreamGenContext::readabyte() { + STACK_CHECK; + _cmp(si, 30000); + if (!flags.z()) + goto notendblock; + push(bx); + push(es); + push(di); + push(ds); + push(si); + readoneblock(); + si = pop(); + ds = pop(); + di = pop(); + es = pop(); + bx = pop(); + si = 0; +notendblock: + _lodsb(); +} + +void DreamGenContext::loadpalfromiff() { + STACK_CHECK; + dx = 2481; + openfile(); + cx = 2000; + ds = data.word(kMapstore); + dx = 0; + readfromfile(); + closefile(); + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768); + ds = data.word(kMapstore); + si = 0x30; + cx = 768; +palloop: + _lodsb(); + _shr(al, 1); + _shr(al, 1); + _cmp(data.byte(kBrightness), 1); + if (!flags.z()) + goto nought; + _cmp(al, 0); + if (flags.z()) + goto nought; + ah = al; + _shr(ah, 1); + _add(al, ah); + _shr(ah, 1); + _add(al, ah); + _cmp(al, 64); + if (flags.c()) + goto nought; + al = 63; +nought: + _stosb(); + if (--cx) + goto palloop; +} + +void DreamGenContext::paneltomap() { + STACK_CHECK; + di = data.word(kMapxstart); + _add(di, data.word(kMapadx)); + bx = data.word(kMapystart); + _add(bx, data.word(kMapady)); + ds = data.word(kMapstore); + si = 0; + cl = data.byte(kMapxsize); + ch = data.byte(kMapysize); + multiget(); +} + +void DreamGenContext::maptopanel() { + STACK_CHECK; + di = data.word(kMapxstart); + _add(di, data.word(kMapadx)); + bx = data.word(kMapystart); + _add(bx, data.word(kMapady)); + ds = data.word(kMapstore); + si = 0; + cl = data.byte(kMapxsize); + ch = data.byte(kMapysize); + multiput(); +} + +void DreamGenContext::dumpmap() { + STACK_CHECK; + di = data.word(kMapxstart); + _add(di, data.word(kMapadx)); + bx = data.word(kMapystart); + _add(bx, data.word(kMapady)); + cl = data.byte(kMapxsize); + ch = data.byte(kMapysize); + multidump(); +} + +void DreamGenContext::pixelcheckset() { + STACK_CHECK; + push(ax); + _sub(al, es.byte(bx)); + _sub(ah, es.byte(bx+1)); + push(es); + push(bx); + push(cx); + push(ax); + al = es.byte(bx+4); + getsetad(); + al = es.byte(bx+17); + es = data.word(kSetframes); + bx = (0); + ah = 0; + cx = 6; + _mul(cx); + _add(bx, ax); + ax = pop(); + push(ax); + al = ah; + ah = 0; + cl = es.byte(bx); + ch = 0; + _mul(cx); + cx = pop(); + ch = 0; + _add(ax, cx); + _add(ax, es.word(bx+2)); + bx = ax; + _add(bx, (0+2080)); + al = es.byte(bx); + dl = al; + cx = pop(); + bx = pop(); + es = pop(); + ax = pop(); + _cmp(dl, 0); +} + +void DreamGenContext::createpanel() { + STACK_CHECK; + di = 0; + bx = 8; + ds = data.word(kIcons2); + al = 0; + ah = 2; + showframe(); + di = 160; + bx = 8; + ds = data.word(kIcons2); + al = 0; + ah = 2; + showframe(); + di = 0; + bx = 104; + ds = data.word(kIcons2); + al = 0; + ah = 2; + showframe(); + di = 160; + bx = 104; + ds = data.word(kIcons2); + al = 0; + ah = 2; + showframe(); +} + +void DreamGenContext::createpanel2() { + STACK_CHECK; + createpanel(); + di = 0; + bx = 0; + ds = data.word(kIcons2); + al = 5; + ah = 2; + showframe(); + di = 160; + bx = 0; + ds = data.word(kIcons2); + al = 5; + ah = 2; + showframe(); +} + +void DreamGenContext::clearwork() { + STACK_CHECK; + ax = 0x0; + es = data.word(kWorkspace); + di = 0; + cx = (200*320)/64; +clearloop: + _stosw(32); + if (--cx) + goto clearloop; +} + +void DreamGenContext::zoom() { + STACK_CHECK; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + return /* (inwatching) */; + _cmp(data.byte(kZoomon), 1); + if (flags.z()) + goto zoomswitch; + return; +zoomswitch: + _cmp(data.byte(kCommandtype), 199); + if (flags.c()) + goto zoomit; + putunderzoom(); + return; +zoomit: + ax = data.word(kOldpointery); + _sub(ax, 9); + cx = (320); + _mul(cx); + _add(ax, data.word(kOldpointerx)); + _sub(ax, 11); + si = ax; + ax = (132)+4; + cx = (320); + _mul(cx); + _add(ax, (8)+5); + di = ax; + es = data.word(kWorkspace); + ds = data.word(kWorkspace); + cx = 20; +zoomloop: + push(cx); + cx = 23; +zoomloop2: + _lodsb(); + ah = al; + _stosw(); + es.word(di+(320)-2) = ax; + if (--cx) + goto zoomloop2; + _add(si, (320)-23); + _add(di, (320)-46+(320)); + cx = pop(); + if (--cx) + goto zoomloop; + crosshair(); + data.byte(kDidzoom) = 1; +} + +void DreamGenContext::delthisone() { + STACK_CHECK; + push(ax); + push(ax); + al = ah; + ah = 0; + _add(ax, data.word(kMapady)); + bx = (320); + _mul(bx); + bx = pop(); + bh = 0; + _add(bx, data.word(kMapadx)); + _add(ax, bx); + di = ax; + ax = pop(); + push(ax); + al = ah; + ah = 0; + bx = 22*8; + _mul(bx); + bx = pop(); + bh = 0; + _add(ax, bx); + si = ax; + es = data.word(kWorkspace); + ds = data.word(kMapstore); + dl = cl; + dh = 0; + ax = (320); + _sub(ax, dx); + _neg(dx); + _add(dx, 22*8); +deloneloop: + push(cx); + ch = 0; + _movsb(cx, true); + cx = pop(); + _add(di, ax); + _add(si, dx); + _dec(ch); + if (!flags.z()) + goto deloneloop; +} + +void DreamGenContext::width160() { + STACK_CHECK; + _movsw(161); +} + +void DreamGenContext::doblocks() { + STACK_CHECK; + es = data.word(kWorkspace); + ax = data.word(kMapady); + cx = (320); + _mul(cx); + di = data.word(kMapadx); + _add(di, ax); + al = data.byte(kMapy); + ah = 0; + bx = (66); + _mul(bx); + bl = data.byte(kMapx); + bh = 0; + _add(ax, bx); + si = (0); + _add(si, ax); + cx = 10; +loop120: + push(di); + push(cx); + cx = 11; +loop124: + push(cx); + push(di); + ds = data.word(kMapdata); + _lodsb(); + ds = data.word(kBackdrop); + push(si); + _cmp(al, 0); + if (flags.z()) + goto zeroblock; + ah = al; + al = 0; + si = (0+192); + _add(si, ax); + bh = 14; + bh = 4; +firstbitofblock: + _movsw(8); + _add(di, (320)-16); + _dec(bh); + if (!flags.z()) + goto firstbitofblock; + bh = 12; +loop125: + _movsw(8); + ax = 0x0dfdf; + _stosw(2); + _add(di, (320)-20); + _dec(bh); + if (!flags.z()) + goto loop125; + _add(di, 4); + ax = 0x0dfdf; + _stosw(8); + _add(di, (320)-16); + _stosw(8); + _add(di, (320)-16); + _stosw(8); + _add(di, (320)-16); + _stosw(8); +zeroblock: + si = pop(); + di = pop(); + cx = pop(); + _add(di, 16); + if (--cx) + goto loop124; + _add(si, (66)-11); + cx = pop(); + di = pop(); + _add(di, (320)*16); + if (--cx) + goto loop120; +} + +void DreamGenContext::showframe() { + STACK_CHECK; + push(dx); + push(ax); + cx = ax; + _and(cx, 511); + _add(cx, cx); + si = cx; + _add(cx, cx); + _add(si, cx); + _cmp(ds.word(si), 0); + if (!flags.z()) + goto notblankshow; + ax = pop(); + dx = pop(); + cx = 0; + return; +notblankshow: + _test(ah, 128); + if (!flags.z()) + goto skipoffsets; + al = ds.byte(si+4); + ah = 0; + _add(di, ax); + al = ds.byte(si+5); + ah = 0; + _add(bx, ax); +skipoffsets: + cx = ds.word(si+0); + ax = ds.word(si+2); + _add(ax, 2080); + si = ax; + ax = pop(); + dx = pop(); + _cmp(ah, 0); + if (flags.z()) + goto noeffects; + _test(ah, 128); + if (flags.z()) + goto notcentred; + push(ax); + al = cl; + ah = 0; + _shr(ax, 1); + _sub(di, ax); + al = ch; + ah = 0; + _shr(ax, 1); + _sub(bx, ax); + ax = pop(); +notcentred: + _test(ah, 64); + if (flags.z()) + goto notdiffdest; + push(cx); + frameoutfx(); + cx = pop(); + return; +notdiffdest: + _test(ah, 8); + if (flags.z()) + goto notprintlist; + push(ax); + ax = di; + _sub(ax, data.word(kMapadx)); + push(bx); + _sub(bx, data.word(kMapady)); + ah = bl; + bx = pop(); + ax = pop(); +notprintlist: + _test(ah, 4); + if (flags.z()) + goto notflippedx; + dx = (320); + es = data.word(kWorkspace); + push(cx); + frameoutfx(); + cx = pop(); + return; +notflippedx: + _test(ah, 2); + if (flags.z()) + goto notnomask; + dx = (320); + es = data.word(kWorkspace); + push(cx); + frameoutnm(); + cx = pop(); + return; +notnomask: + _test(ah, 32); + if (flags.z()) + goto noeffects; + dx = (320); + es = data.word(kWorkspace); + push(cx); + frameoutbh(); + cx = pop(); + return; +noeffects: + dx = (320); + es = data.word(kWorkspace); + push(cx); + frameoutv(); + cx = pop(); +} + +void DreamGenContext::frameoutv() { + STACK_CHECK; + push(dx); + ax = bx; + bx = dx; + _mul(bx); + _add(di, ax); + dx = pop(); + push(cx); + ch = 0; + _sub(dx, cx); + cx = pop(); +frameloop1: + push(cx); + ch = 0; +frameloop2: + _lodsb(); + _cmp(al, 0); + if (!flags.z()) + goto backtosolid; +backtoother: + _inc(di); + if (--cx) + goto frameloop2; + cx = pop(); + _add(di, dx); + _dec(ch); + if (!flags.z()) + goto frameloop1; + return; +frameloop3: + _lodsb(); + _cmp(al, 0); + if (flags.z()) + goto backtoother; +backtosolid: + _stosb(); + if (--cx) + goto frameloop3; + cx = pop(); + _add(di, dx); + _dec(ch); + if (!flags.z()) + goto frameloop1; +} + +void DreamGenContext::frameoutbh() { + STACK_CHECK; + push(dx); + ax = bx; + bx = dx; + _mul(bx); + _add(di, ax); + dx = pop(); + push(cx); + ch = 0; + _sub(dx, cx); + cx = pop(); +bhloop2: + push(cx); + ch = 0; + ah = 255; +bhloop1: + _cmp(es.byte(di), ah); + if (!flags.z()) + goto nofill; + _movsb(); + if (--cx) + goto bhloop1; + goto nextline; +nofill: + _inc(di); + _inc(si); + if (--cx) + goto bhloop1; +nextline: + _add(di, dx); + cx = pop(); + _dec(ch); + if (!flags.z()) + goto bhloop2; +} + +void DreamGenContext::frameoutfx() { + STACK_CHECK; + push(dx); + ax = bx; + bx = dx; + _mul(bx); + _add(di, ax); + dx = pop(); + push(cx); + ch = 0; + _add(dx, cx); + cx = pop(); +frameloopfx1: + push(cx); + ch = 0; +frameloopfx2: + _lodsb(); + _cmp(al, 0); + if (!flags.z()) + goto backtosolidfx; +backtootherfx: + _dec(di); + if (--cx) + goto frameloopfx2; + cx = pop(); + _add(di, dx); + _dec(ch); + if (!flags.z()) + goto frameloopfx1; + return; +frameloopfx3: + _lodsb(); + _cmp(al, 0); + if (flags.z()) + goto backtootherfx; +backtosolidfx: + es.byte(di) = al; + _dec(di); + if (--cx) + goto frameloopfx3; + cx = pop(); + _add(di, dx); + _dec(ch); + if (!flags.z()) + goto frameloopfx1; +} + +void DreamGenContext::transferinv() { + STACK_CHECK; + di = data.word(kExframepos); + push(di); + al = data.byte(kExpos); + ah = 0; + bx = ax; + _add(ax, ax); + _add(ax, bx); + _inc(ax); + cx = 6; + _mul(cx); + es = data.word(kExtras); + bx = (0); + _add(bx, ax); + _add(di, (0+2080)); + push(bx); + al = data.byte(kItemtotran); + ah = 0; + bx = ax; + _add(ax, ax); + _add(ax, bx); + _inc(ax); + cx = 6; + _mul(cx); + ds = data.word(kFreeframes); + bx = (0); + _add(bx, ax); + si = (0+2080); + al = ds.byte(bx); + ah = 0; + cl = ds.byte(bx+1); + ch = 0; + _add(si, ds.word(bx+2)); + dx = ds.word(bx+4); + bx = pop(); + es.byte(bx+0) = al; + es.byte(bx+1) = cl; + es.word(bx+4) = dx; + _mul(cx); + cx = ax; + push(cx); + _movsb(cx, true); + cx = pop(); + ax = pop(); + es.word(bx+2) = ax; + _add(data.word(kExframepos), cx); +} + +void DreamGenContext::transfermap() { + STACK_CHECK; + di = data.word(kExframepos); + push(di); + al = data.byte(kExpos); + ah = 0; + bx = ax; + _add(ax, ax); + _add(ax, bx); + cx = 6; + _mul(cx); + es = data.word(kExtras); + bx = (0); + _add(bx, ax); + _add(di, (0+2080)); + push(bx); + al = data.byte(kItemtotran); + ah = 0; + bx = ax; + _add(ax, ax); + _add(ax, bx); + cx = 6; + _mul(cx); + ds = data.word(kFreeframes); + bx = (0); + _add(bx, ax); + si = (0+2080); + al = ds.byte(bx); + ah = 0; + cl = ds.byte(bx+1); + ch = 0; + _add(si, ds.word(bx+2)); + dx = ds.word(bx+4); + bx = pop(); + es.byte(bx+0) = al; + es.byte(bx+1) = cl; + es.word(bx+4) = dx; + _mul(cx); + cx = ax; + push(cx); + _movsb(cx, true); + cx = pop(); + ax = pop(); + es.word(bx+2) = ax; + _add(data.word(kExframepos), cx); +} + +void DreamGenContext::dofade() { + STACK_CHECK; + _cmp(data.byte(kFadedirection), 0); + if (flags.z()) + return /* (finishfade) */; + cl = data.byte(kNumtofade); + ch = 0; + al = data.byte(kColourpos); + ah = 0; + ds = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)); + _add(si, ax); + _add(si, ax); + _add(si, ax); + showgroup(); + al = data.byte(kNumtofade); + _add(al, data.byte(kColourpos)); + data.byte(kColourpos) = al; + _cmp(al, 0); + if (!flags.z()) + return /* (finishfade) */; + fadecalculation(); +} + +void DreamGenContext::clearendpal() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768); + cx = 768; + al = 0; + _stosb(cx, true); +} + +void DreamGenContext::clearpalette() { + STACK_CHECK; + data.byte(kFadedirection) = 0; + clearstartpal(); + dumpcurrent(); +} + +void DreamGenContext::fadescreenup() { + STACK_CHECK; + clearstartpal(); + paltoendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; +} + +void DreamGenContext::fadetowhite() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768); + cx = 768; + al = 63; + _stosb(cx, true); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768); + al = 0; + _stosb(3); + paltostartpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; +} + +void DreamGenContext::fadefromwhite() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)); + cx = 768; + al = 63; + _stosb(cx, true); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)); + al = 0; + _stosb(3); + paltoendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; +} + +void DreamGenContext::fadescreenups() { + STACK_CHECK; + clearstartpal(); + paltoendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 64; +} + +void DreamGenContext::fadescreendownhalf() { + STACK_CHECK; + paltostartpal(); + paltoendpal(); + cx = 768; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768); +halfend: + al = es.byte(bx); + _shr(al, 1); + es.byte(bx) = al; + _inc(bx); + if (--cx) + goto halfend; + ds = data.word(kBuffers); + es = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3))+(56*3); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768)+(56*3); + cx = 3*5; + _movsb(cx, true); + si = (0+(180*10)+32+60+(32*32)+(11*10*3))+(77*3); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768)+(77*3); + cx = 3*2; + _movsb(cx, true); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 31; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 32; +} + +void DreamGenContext::fadescreenuphalf() { + STACK_CHECK; + endpaltostart(); + paltoendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 31; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 32; +} + +void DreamGenContext::fadescreendown() { + STACK_CHECK; + paltostartpal(); + clearendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; +} + +void DreamGenContext::fadescreendowns() { + STACK_CHECK; + paltostartpal(); + clearendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 64; +} + +void DreamGenContext::clearstartpal() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)); + cx = 256; +wholeloop1: + ax = 0; + _stosw(); + al = 0; + _stosb(); + if (--cx) + goto wholeloop1; +} + +void DreamGenContext::showgun() { + STACK_CHECK; + data.byte(kAddtored) = 0; + data.byte(kAddtogreen) = 0; + data.byte(kAddtoblue) = 0; + paltostartpal(); + paltoendpal(); + greyscalesum(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; + cx = 130; + hangon(); + endpaltostart(); + clearendpal(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; + cx = 200; + hangon(); + data.byte(kRoomssample) = 34; + loadroomssample(); + data.byte(kVolume) = 0; + dx = 2351; + loadintotemp(); + createpanel2(); + ds = data.word(kTempgraphics); + al = 0; + ah = 0; + di = 100; + bx = 4; + showframe(); + ds = data.word(kTempgraphics); + al = 1; + ah = 0; + di = 158; + bx = 106; + showframe(); + worktoscreen(); + getridoftemp(); + fadescreenup(); + cx = 160; + hangon(); + al = 12; + ah = 0; + playchannel0(); + dx = 2260; + loadtemptext(); + rollendcredits2(); + getridoftemptext(); +} + +void DreamGenContext::rollendcredits2() { + STACK_CHECK; + rollem(); +} + +void DreamGenContext::rollem() { + STACK_CHECK; + cl = 160; + ch = 160; + di = 25; + bx = 20; + ds = data.word(kMapstore); + si = 0; + multiget(); + es = data.word(kTextfile1); + si = 49*2; + ax = es.word(si); + si = ax; + _add(si, (66*2)); + cx = 80; +endcredits21: + push(cx); + bx = 10; + cx = data.word(kLinespacing); +endcredits22: + push(cx); + push(si); + push(di); + push(es); + push(bx); + vsync(); + cl = 160; + ch = 160; + di = 25; + bx = 20; + ds = data.word(kMapstore); + si = 0; + multiput(); + vsync(); + bx = pop(); + es = pop(); + di = pop(); + si = pop(); + push(si); + push(di); + push(es); + push(bx); + cx = 18; +onelot2: + push(cx); + di = 25; + dx = 161; + ax = 0; + printdirect(); + _add(bx, data.word(kLinespacing)); + cx = pop(); + if (--cx) + goto onelot2; + vsync(); + cl = 160; + ch = 160; + di = 25; + bx = 20; + multidump(); + bx = pop(); + es = pop(); + di = pop(); + si = pop(); + cx = pop(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto endearly2; + _dec(bx); + if (--cx) + goto endcredits22; + cx = pop(); +looknext2: + al = es.byte(si); + _inc(si); + _cmp(al, ':'); + if (flags.z()) + goto gotnext2; + _cmp(al, 0); + if (flags.z()) + goto gotnext2; + goto looknext2; +gotnext2: + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + return /* (endearly) */; + if (--cx) + goto endcredits21; + cx = 120; + hangone(); + return; +endearly2: + cx = pop(); +} + +void DreamGenContext::fadecalculation() { + STACK_CHECK; + _cmp(data.byte(kFadecount), 0); + if (flags.z()) + goto nomorefading; + bl = data.byte(kFadecount); + es = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768); + cx = 768; +fadecolloop: + al = es.byte(si); + ah = es.byte(di); + _cmp(al, ah); + if (flags.z()) + goto gotthere; + if (flags.c()) + goto lesscolour; + _dec(es.byte(si)); + goto gotthere; +lesscolour: + _cmp(bl, ah); + if (flags.z()) + goto withit; + if (!flags.c()) + goto gotthere; +withit: + _inc(es.byte(si)); +gotthere: + _inc(si); + _inc(di); + if (--cx) + goto fadecolloop; + _dec(data.byte(kFadecount)); + return; +nomorefading: + data.byte(kFadedirection) = 0; +} + +void DreamGenContext::greyscalesum() { + STACK_CHECK; + es = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768); + cx = 256; +greysumloop1: + push(cx); + bx = 0; + al = es.byte(si); + ah = 0; + cx = 20; + _mul(cx); + _add(bx, ax); + al = es.byte(si+1); + ah = 0; + cx = 59; + _mul(cx); + _add(bx, ax); + al = es.byte(si+2); + ah = 0; + cx = 11; + _mul(cx); + _add(bx, ax); + al = -1; +greysumloop2: + _inc(al); + _sub(bx, 100); + if (!flags.c()) + goto greysumloop2; + bl = al; + al = bl; + ah = data.byte(kAddtored); + _cmp(al, 0); + _add(al, ah); + _stosb(); + ah = data.byte(kAddtogreen); + al = bl; + _cmp(al, 0); + if (flags.z()) + goto noaddg; + _add(al, ah); +noaddg: + _stosb(); + ah = data.byte(kAddtoblue); + al = bl; + _cmp(al, 0); + if (flags.z()) + goto noaddb; + _add(al, ah); +noaddb: + _stosb(); + _add(si, 3); + cx = pop(); + if (--cx) + goto greysumloop1; +} + +void DreamGenContext::paltostartpal() { + STACK_CHECK; + es = data.word(kBuffers); + ds = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)); + cx = 768/2; + _movsw(cx, true); +} + +void DreamGenContext::endpaltostart() { + STACK_CHECK; + es = data.word(kBuffers); + ds = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)); + cx = 768/2; + _movsw(cx, true); +} + +void DreamGenContext::startpaltoend() { + STACK_CHECK; + es = data.word(kBuffers); + ds = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)); + cx = 768/2; + _movsw(cx, true); +} + +void DreamGenContext::paltoendpal() { + STACK_CHECK; + es = data.word(kBuffers); + ds = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768); + cx = 768/2; + _movsw(cx, true); +} + +void DreamGenContext::allpalette() { + STACK_CHECK; + es = data.word(kBuffers); + ds = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768); + cx = 768/2; + _movsw(cx, true); + dumpcurrent(); +} + +void DreamGenContext::dumpcurrent() { + STACK_CHECK; + si = (0+(180*10)+32+60+(32*32)+(11*10*3)); + ds = data.word(kBuffers); + vsync(); + al = 0; + cx = 128; + showgroup(); + vsync(); + al = 128; + cx = 128; + showgroup(); +} + +void DreamGenContext::fadedownmon() { + STACK_CHECK; + paltostartpal(); + paltoendpal(); + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768)+(231*3); + cx = 3*8; + ax = 0; + _stosb(cx, true); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768)+(246*3); + _stosb(); + _stosw(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; + cx = 64; + hangon(); +} + +void DreamGenContext::fadeupmon() { + STACK_CHECK; + paltostartpal(); + paltoendpal(); + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3))+(231*3); + cx = 3*8; + ax = 0; + _stosb(cx, true); + di = (0+(180*10)+32+60+(32*32)+(11*10*3))+(246*3); + _stosb(); + _stosw(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; + cx = 128; + hangon(); +} + +void DreamGenContext::fadeupmonfirst() { + STACK_CHECK; + paltostartpal(); + paltoendpal(); + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3))+(231*3); + cx = 3*8; + ax = 0; + _stosb(cx, true); + di = (0+(180*10)+32+60+(32*32)+(11*10*3))+(246*3); + _stosb(); + _stosw(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; + cx = 64; + hangon(); + al = 26; + playchannel1(); + cx = 64; + hangon(); +} + +void DreamGenContext::fadeupyellows() { + STACK_CHECK; + paltoendpal(); + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768)+(231*3); + cx = 3*8; + ax = 0; + _stosb(cx, true); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768)+(246*3); + _stosb(); + _stosw(); + data.byte(kFadedirection) = 1; + data.byte(kFadecount) = 63; + data.byte(kColourpos) = 0; + data.byte(kNumtofade) = 128; + cx = 128; + hangon(); +} + +void DreamGenContext::initialmoncols() { + STACK_CHECK; + paltostartpal(); + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3))+(230*3); + cx = 3*9; + ax = 0; + _stosb(cx, true); + di = (0+(180*10)+32+60+(32*32)+(11*10*3))+(246*3); + _stosb(); + _stosw(); + ds = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3))+(230*3); + al = 230; + cx = 18; + showgroup(); +} + +void DreamGenContext::titles() { + STACK_CHECK; + clearpalette(); + biblequote(); + intro(); +} + +void DreamGenContext::endgame() { + STACK_CHECK; + dx = 2260; + loadtemptext(); + monkspeaking(); + gettingshot(); + getridoftemptext(); + data.byte(kVolumeto) = 7; + data.byte(kVolumedirection) = 1; + cx = 200; + hangon(); +} + +void DreamGenContext::monkspeaking() { + STACK_CHECK; + data.byte(kRoomssample) = 35; + loadroomssample(); + dx = 2364; + loadintotemp(); + clearwork(); + showmonk(); + worktoscreen(); + data.byte(kVolume) = 7; + data.byte(kVolumedirection) = -1; + data.byte(kVolumeto) = 5; + al = 12; + ah = 255; + playchannel0(); + fadescreenups(); + cx = 300; + hangon(); + al = 40; +loadspeech2: + push(ax); + dl = 'T'; + dh = 83; + cl = 'T'; + ah = 0; + loadspeech(); + al = 50+12; + playchannel1(); +notloadspeech2: + vsync(); + _cmp(data.byte(kCh1playing), 255); + if (!flags.z()) + goto notloadspeech2; + ax = pop(); + _inc(al); + _cmp(al, 48); + if (!flags.z()) + goto loadspeech2; + data.byte(kVolumedirection) = 1; + data.byte(kVolumeto) = 7; + fadescreendowns(); + cx = 300; + hangon(); + getridoftemp(); +} + +void DreamGenContext::showmonk() { + STACK_CHECK; + al = 0; + ah = 128; + di = 160; + bx = 72; + ds = data.word(kTempgraphics); + showframe(); +} + +void DreamGenContext::gettingshot() { + STACK_CHECK; + data.byte(kNewlocation) = 55; + clearpalette(); + loadintroroom(); + fadescreenups(); + data.byte(kVolumeto) = 0; + data.byte(kVolumedirection) = -1; + runendseq(); + clearbeforeload(); +} + +void DreamGenContext::credits() { + STACK_CHECK; + clearpalette(); + realcredits(); +} + +void DreamGenContext::biblequote() { + STACK_CHECK; + mode640x480(); + dx = 2377; + showpcx(); + fadescreenups(); + cx = 80; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto biblequotearly; + cx = 560; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto biblequotearly; + fadescreendowns(); + cx = 200; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto biblequotearly; + cancelch0(); +biblequotearly: + data.byte(kLasthardkey) = 0; +} + +void DreamGenContext::hangone() { + STACK_CHECK; +hangonloope: + push(cx); + vsync(); + cx = pop(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + return /* (hangonearly) */; + if (--cx) + goto hangonloope; +} + +void DreamGenContext::intro() { + STACK_CHECK; + dx = 2247; + loadtemptext(); + loadpalfromiff(); + setmode(); + data.byte(kNewlocation) = 50; + clearpalette(); + loadintroroom(); + data.byte(kVolume) = 7; + data.byte(kVolumedirection) = -1; + data.byte(kVolumeto) = 4; + al = 12; + ah = 255; + playchannel0(); + fadescreenups(); + runintroseq(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto introearly; + clearbeforeload(); + data.byte(kNewlocation) = 52; + loadintroroom(); + runintroseq(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto introearly; + clearbeforeload(); + data.byte(kNewlocation) = 53; + loadintroroom(); + runintroseq(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto introearly; + clearbeforeload(); + allpalette(); + data.byte(kNewlocation) = 54; + loadintroroom(); + runintroseq(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto introearly; + getridoftemptext(); + clearbeforeload(); +introearly: + data.byte(kLasthardkey) = 0; +} + +void DreamGenContext::runintroseq() { + STACK_CHECK; + data.byte(kGetback) = 0; +moreintroseq: + vsync(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto earlyendrun; + spriteupdate(); + vsync(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto earlyendrun; + deleverything(); + printsprites(); + reelsonscreen(); + afterintroroom(); + usetimedtext(); + vsync(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto earlyendrun; + dumpmap(); + dumptimedtext(); + vsync(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto earlyendrun; + _cmp(data.byte(kGetback), 1); + if (!flags.z()) + goto moreintroseq; + return; +earlyendrun: + getridoftemptext(); + clearbeforeload(); +} + +void DreamGenContext::runendseq() { + STACK_CHECK; + atmospheres(); + data.byte(kGetback) = 0; +moreendseq: + vsync(); + spriteupdate(); + vsync(); + deleverything(); + printsprites(); + reelsonscreen(); + afterintroroom(); + usetimedtext(); + vsync(); + dumpmap(); + dumptimedtext(); + vsync(); + _cmp(data.byte(kGetback), 1); + if (!flags.z()) + goto moreendseq; +} + +void DreamGenContext::loadintroroom() { + STACK_CHECK; + data.byte(kIntrocount) = 0; + data.byte(kLocation) = 255; + loadroom(); + data.word(kMapoffsetx) = 72; + data.word(kMapoffsety) = 16; + clearsprites(); + data.byte(kThroughdoor) = 0; + data.byte(kCurrentkey) = '0'; + data.byte(kMainmode) = 0; + clearwork(); + data.byte(kNewobs) = 1; + drawfloor(); + reelsonscreen(); + spriteupdate(); + printsprites(); + worktoscreen(); +} + +void DreamGenContext::realcredits() { + STACK_CHECK; + data.byte(kRoomssample) = 33; + loadroomssample(); + data.byte(kVolume) = 0; + mode640x480(); + cx = 35; + hangon(); + dx = 2390; + showpcx(); + al = 12; + ah = 0; + playchannel0(); + cx = 2; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + allpalette(); + cx = 80; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + fadescreendowns(); + cx = 256; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + dx = 2403; + showpcx(); + al = 12; + ah = 0; + playchannel0(); + cx = 2; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + allpalette(); + cx = 80; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + fadescreendowns(); + cx = 256; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + dx = 2416; + showpcx(); + al = 12; + ah = 0; + playchannel0(); + cx = 2; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + allpalette(); + cx = 80; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + fadescreendowns(); + cx = 256; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + dx = 2429; + showpcx(); + al = 12; + ah = 0; + playchannel0(); + cx = 2; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + allpalette(); + cx = 80; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + fadescreendowns(); + cx = 256; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + dx = 2442; + showpcx(); + al = 12; + ah = 0; + playchannel0(); + cx = 2; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + allpalette(); + cx = 80; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + fadescreendowns(); + cx = 256; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + dx = 2455; + showpcx(); + fadescreenups(); + cx = 60; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + al = 13; + ah = 0; + playchannel0(); + cx = 350; + hangone(); + _cmp(data.byte(kLasthardkey), 1); + if (flags.z()) + goto realcreditsearly; + fadescreendowns(); + cx = 256; + hangone(); +realcreditsearly: + data.byte(kLasthardkey) = 0; +} + +void DreamGenContext::printchar() { + STACK_CHECK; + _cmp(al, 255); + if (flags.z()) + return /* (ignoreit) */; + push(si); + push(bx); + push(di); + push(ax); + _sub(al, 32); + ah = 0; + _add(ax, data.word(kCharshift)); + showframe(); + ax = pop(); + di = pop(); + bx = pop(); + si = pop(); + _cmp(data.byte(kKerning), 0); + if (!flags.z()) + goto nokern; + kernchars(); +nokern: + push(cx); + ch = 0; + _add(di, cx); + cx = pop(); +} + +void DreamGenContext::kernchars() { + STACK_CHECK; + _cmp(al, 'a'); + if (flags.z()) + goto iskern; + _cmp(al, 'u'); + if (flags.z()) + goto iskern; + return; +iskern: + _cmp(ah, 'n'); + if (flags.z()) + goto kernit; + _cmp(ah, 't'); + if (flags.z()) + goto kernit; + _cmp(ah, 'r'); + if (flags.z()) + goto kernit; + _cmp(ah, 'i'); + if (flags.z()) + goto kernit; + _cmp(ah, 'l'); + if (flags.z()) + goto kernit; + return; +kernit: + _dec(cl); +} + +void DreamGenContext::printslow() { + STACK_CHECK; + data.byte(kPointerframe) = 1; + data.byte(kPointermode) = 3; + ds = data.word(kCharset1); +printloopslow6: + push(bx); + push(di); + push(dx); + getnumber(); + ch = 0; +printloopslow5: + push(cx); + push(si); + push(es); + ax = es.word(si); + push(bx); + push(cx); + push(es); + push(si); + push(ds); + printboth(); + ds = pop(); + si = pop(); + es = pop(); + cx = pop(); + bx = pop(); + ax = es.word(si+1); + _inc(si); + _cmp(al, 0); + if (flags.z()) + goto finishslow; + _cmp(al, ':'); + if (flags.z()) + goto finishslow; + _cmp(cl, 1); + if (flags.z()) + goto afterslow; + push(di); + push(ds); + push(bx); + push(cx); + push(es); + push(si); + data.word(kCharshift) = 91; + printboth(); + data.word(kCharshift) = 0; + si = pop(); + es = pop(); + cx = pop(); + bx = pop(); + ds = pop(); + di = pop(); + waitframes(); + _cmp(ax, 0); + if (flags.z()) + goto keepgoing; + _cmp(ax, data.word(kOldbutton)); + if (!flags.z()) + goto finishslow2; +keepgoing: + waitframes(); + _cmp(ax, 0); + if (flags.z()) + goto afterslow; + _cmp(ax, data.word(kOldbutton)); + if (!flags.z()) + goto finishslow2; +afterslow: + es = pop(); + si = pop(); + cx = pop(); + _inc(si); + if (--cx) + goto printloopslow5; + dx = pop(); + di = pop(); + bx = pop(); + _add(bx, 10); + goto printloopslow6; +finishslow: + es = pop(); + si = pop(); + cx = pop(); + dx = pop(); + di = pop(); + bx = pop(); + al = 0; + return; +finishslow2: + es = pop(); + si = pop(); + cx = pop(); + dx = pop(); + di = pop(); + bx = pop(); + al = 1; +} + +void DreamGenContext::waitframes() { + STACK_CHECK; + push(di); + push(bx); + push(es); + push(si); + push(ds); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + delpointer(); + ax = data.word(kMousebutton); + ds = pop(); + si = pop(); + es = pop(); + bx = pop(); + di = pop(); +} + +void DreamGenContext::printboth() { + STACK_CHECK; + push(ax); + push(cx); + push(bx); + push(di); + printchar(); + ax = pop(); + push(di); + di = ax; + multidump(); + di = pop(); + bx = pop(); + cx = pop(); + ax = pop(); +} + +void DreamGenContext::printdirect() { + STACK_CHECK; + data.word(kLastxpos) = di; + ds = data.word(kCurrentset); +printloop6: + push(bx); + push(di); + push(dx); + getnumber(); + ch = 0; +printloop5: + ax = es.word(si); + _inc(si); + _cmp(al, 0); + if (flags.z()) + goto finishdirct; + _cmp(al, ':'); + if (flags.z()) + goto finishdirct; + push(cx); + push(es); + printchar(); + data.word(kLastxpos) = di; + es = pop(); + cx = pop(); + if (--cx) + goto printloop5; + dx = pop(); + di = pop(); + bx = pop(); + _add(bx, data.word(kLinespacing)); + goto printloop6; +finishdirct: + dx = pop(); + di = pop(); + bx = pop(); +} + +void DreamGenContext::monprint() { + STACK_CHECK; + data.byte(kKerning) = 1; + si = bx; + dl = 166; + di = data.word(kMonadx); + bx = data.word(kMonady); + ds = data.word(kTempcharset); +printloop8: + push(bx); + push(di); + push(dx); + getnumber(); + ch = 0; +printloop7: + al = es.byte(si); + _inc(si); + _cmp(al, ':'); + if (flags.z()) + goto finishmon2; + _cmp(al, 0); + if (flags.z()) + goto finishmon; + _cmp(al, 34); + if (flags.z()) + goto finishmon; + _cmp(al, '='); + if (flags.z()) + goto finishmon; + _cmp(al, '%'); + if (!flags.z()) + goto nottrigger; + ah = es.byte(si); + _inc(si); + _inc(si); + goto finishmon; +nottrigger: + push(cx); + push(es); + printchar(); + data.word(kCurslocx) = di; + data.word(kCurslocy) = bx; + data.word(kMaintimer) = 1; + printcurs(); + vsync(); + push(si); + push(dx); + push(ds); + push(es); + push(bx); + push(di); + lockmon(); + di = pop(); + bx = pop(); + es = pop(); + ds = pop(); + dx = pop(); + si = pop(); + delcurs(); + es = pop(); + cx = pop(); + if (--cx) + goto printloop7; +finishmon2: + dx = pop(); + di = pop(); + bx = pop(); + scrollmonitor(); + data.word(kCurslocx) = di; + goto printloop8; +finishmon: + dx = pop(); + di = pop(); + bx = pop(); + _cmp(al, '%'); + if (!flags.z()) + goto nottrigger2; + data.byte(kLasttrigger) = ah; +nottrigger2: + data.word(kCurslocx) = di; + scrollmonitor(); + bx = si; + data.byte(kKerning) = 0; +} + +void DreamGenContext::getnumber() { + STACK_CHECK; + cx = 0; + push(si); + push(bx); + push(di); + push(ds); + push(es); + di = si; +wordloop: + push(cx); + push(dx); + getnextword(); + dx = pop(); + cx = pop(); + _cmp(al, 1); + if (flags.z()) + goto endoftext; + al = cl; + ah = 0; + push(bx); + bh = 0; + _add(ax, bx); + bx = pop(); + _sub(ax, 10); + dh = 0; + _cmp(ax, dx); + if (!flags.c()) + goto gotoverend; + _add(cl, bl); + _add(ch, bh); + goto wordloop; +gotoverend: + al = dl; + _and(al, 1); + if (flags.z()) + goto notcentre; + push(cx); + al = dl; + _and(al, 0xfe); + ah = 0; + ch = 0; + _sub(ax, cx); + _add(ax, 20); + _shr(ax, 1); + cx = pop(); + es = pop(); + ds = pop(); + di = pop(); + bx = pop(); + si = pop(); + _add(di, ax); + cl = ch; + return; +notcentre: + es = pop(); + ds = pop(); + di = pop(); + bx = pop(); + si = pop(); + cl = ch; + return; +endoftext: + al = cl; + ah = 0; + push(bx); + bh = 0; + _add(ax, bx); + bx = pop(); + _sub(ax, 10); + dh = 0; + _cmp(ax, dx); + if (!flags.c()) + goto gotoverend2; + _add(cl, bl); + _add(ch, bh); +gotoverend2: + al = dl; + _and(al, 1); + if (flags.z()) + goto notcent2; + push(cx); + al = dl; + _and(al, 0xfe); + _add(al, 2); + ah = 0; + ch = 0; + _add(ax, 20); + _sub(ax, cx); + _shr(ax, 1); + cx = pop(); + es = pop(); + ds = pop(); + di = pop(); + bx = pop(); + si = pop(); + _add(di, ax); + cl = ch; + return; +notcent2: + es = pop(); + ds = pop(); + di = pop(); + bx = pop(); + si = pop(); + cl = ch; +} + +void DreamGenContext::getnextword() { + STACK_CHECK; + bx = 0; +getloop: + ax = es.word(di); + _inc(di); + _inc(bh); + _cmp(al, ':'); + if (flags.z()) + goto endall; + _cmp(al, 0); + if (flags.z()) + goto endall; + _cmp(al, 32); + if (flags.z()) + goto endword; + _cmp(al, 255); + if (flags.z()) + goto getloop; + push(ax); + _sub(al, 32); + ah = 0; + _add(ax, data.word(kCharshift)); + _add(ax, ax); + si = ax; + _add(ax, ax); + _add(si, ax); + cl = ds.byte(si+0); + ax = pop(); + kernchars(); + _add(bl, cl); + goto getloop; +endword: + _add(bl, 6); + al = 0; + return; +endall: + _add(bl, 6); + al = 1; +} + +void DreamGenContext::fillryan() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(180*10)+32); + findallryan(); + si = (0+(180*10)+32); + al = data.byte(kRyanpage); + ah = 0; + cx = 20; + _mul(cx); + _add(si, ax); + di = (80); + bx = (58); + cx = 2; +ryanloop2: + push(cx); + push(di); + push(bx); + cx = 5; +ryanloop1: + push(cx); + push(di); + push(bx); + ax = es.word(si); + _add(si, 2); + push(si); + push(es); + obtoinv(); + es = pop(); + si = pop(); + bx = pop(); + di = pop(); + cx = pop(); + _add(di, (44)); + if (--cx) + goto ryanloop1; + bx = pop(); + di = pop(); + cx = pop(); + _add(bx, (44)); + if (--cx) + goto ryanloop2; + showryanpage(); +} + +void DreamGenContext::fillopen() { + STACK_CHECK; + deltextline(); + getopenedsize(); + _cmp(ah, 4); + if (flags.c()) + goto lessthanapage; + ah = 4; +lessthanapage: + al = 1; + push(ax); + es = data.word(kBuffers); + di = (0+(180*10)); + findallopen(); + si = (0+(180*10)); + di = (80); + bx = (58)+96; + cx = pop(); +openloop1: + push(cx); + push(di); + push(bx); + ax = es.word(si); + _add(si, 2); + push(si); + push(es); + _cmp(ch, cl); + if (flags.c()) + goto nextopenslot; + obtoinv(); +nextopenslot: + es = pop(); + si = pop(); + bx = pop(); + di = pop(); + cx = pop(); + _add(di, (44)); + _inc(cl); + _cmp(cl, 5); + if (!flags.z()) + goto openloop1; + undertextline(); +} + +void DreamGenContext::findallryan() { + STACK_CHECK; + push(di); + cx = 30; + ax = 0x0ffff; + _stosw(cx, true); + di = pop(); + cl = 4; + ds = data.word(kExtras); + bx = (0+2080+30000); + ch = 0; +findryanloop: + _cmp(ds.byte(bx+2), cl); + if (!flags.z()) + goto notinryaninv; + _cmp(ds.byte(bx+3), 255); + if (!flags.z()) + goto notinryaninv; + al = ds.byte(bx+4); + ah = 0; + push(di); + _add(di, ax); + _add(di, ax); + al = ch; + ah = 4; + _stosw(); + di = pop(); +notinryaninv: + _add(bx, 16); + _inc(ch); + _cmp(ch, (114)); + if (!flags.z()) + goto findryanloop; +} + +void DreamGenContext::findallopen() { + STACK_CHECK; + push(di); + cx = 16; + ax = 0x0ffff; + _stosw(cx, true); + di = pop(); + cl = data.byte(kOpenedob); + dl = data.byte(kOpenedtype); + ds = data.word(kExtras); + bx = (0+2080+30000); + ch = 0; +findopen1: + _cmp(ds.byte(bx+3), cl); + if (!flags.z()) + goto findopen2; + _cmp(ds.byte(bx+2), dl); + if (!flags.z()) + goto findopen2; + _cmp(data.byte(kOpenedtype), 4); + if (flags.z()) + goto noloccheck; + al = ds.byte(bx+5); + _cmp(al, data.byte(kReallocation)); + if (!flags.z()) + goto findopen2; +noloccheck: + al = ds.byte(bx+4); + ah = 0; + push(di); + _add(di, ax); + _add(di, ax); + al = ch; + ah = 4; + _stosw(); + di = pop(); +findopen2: + _add(bx, 16); + _inc(ch); + _cmp(ch, (114)); + if (!flags.z()) + goto findopen1; + cl = data.byte(kOpenedob); + dl = data.byte(kOpenedtype); + push(dx); + ds = data.word(kFreedat); + dx = pop(); + bx = 0; + ch = 0; +findopen1a: + _cmp(ds.byte(bx+3), cl); + if (!flags.z()) + goto findopen2a; + _cmp(ds.byte(bx+2), dl); + if (!flags.z()) + goto findopen2a; + al = ds.byte(bx+4); + ah = 0; + push(di); + _add(di, ax); + _add(di, ax); + al = ch; + ah = 2; + _stosw(); + di = pop(); +findopen2a: + _add(bx, 16); + _inc(ch); + _cmp(ch, 80); + if (!flags.z()) + goto findopen1a; +} + +void DreamGenContext::obtoinv() { + STACK_CHECK; + push(bx); + push(es); + push(si); + push(ax); + push(ax); + push(di); + push(bx); + ds = data.word(kIcons1); + _sub(di, 2); + _sub(bx, 1); + al = 10; + ah = 0; + showframe(); + bx = pop(); + di = pop(); + ax = pop(); + _cmp(al, 255); + if (flags.z()) + goto finishfill; + push(bx); + push(di); + push(ax); + ds = data.word(kExtras); + _cmp(ah, 4); + if (flags.z()) + goto isanextra; + ds = data.word(kFreeframes); +isanextra: + cl = al; + _add(al, al); + _add(al, cl); + _inc(al); + ah = 128; + _add(bx, 19); + _add(di, 18); + showframe(); + ax = pop(); + di = pop(); + bx = pop(); + push(bx); + getanyaddir(); + isitworn(); + bx = pop(); + if (!flags.z()) + goto finishfill; + ds = data.word(kIcons1); + _sub(di, 3); + _sub(bx, 2); + al = 7; + ah = 0; + showframe(); +finishfill: + ax = pop(); + si = pop(); + es = pop(); + bx = pop(); +} + +void DreamGenContext::isitworn() { + STACK_CHECK; + al = es.byte(bx+12); + _cmp(al, 'W'-'A'); + if (!flags.z()) + return /* (notworn) */; + al = es.byte(bx+13); + _cmp(al, 'E'-'A'); +} + +void DreamGenContext::makeworn() { + STACK_CHECK; + es.byte(bx+12) = 'W'-'A'; + es.byte(bx+13) = 'E'-'A'; +} + +void DreamGenContext::examineob() { + STACK_CHECK; + data.byte(kPointermode) = 0; + data.word(kTimecount) = 0; +examineagain: + data.byte(kInmaparea) = 0; + data.byte(kExamagain) = 0; + data.byte(kOpenedob) = 255; + data.byte(kOpenedtype) = 255; + data.byte(kInvopen) = 0; + al = data.byte(kCommandtype); + data.byte(kObjecttype) = al; + data.byte(kItemframe) = 0; + data.byte(kPointerframe) = 0; + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + obpicture(); + describeob(); + undertextline(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +waitexam: + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + delpointer(); + data.byte(kGetback) = 0; + bx = 2494; + _cmp(data.byte(kInvopen), 0); + if (flags.z()) + goto notuseinv; + bx = 2556; + _cmp(data.byte(kInvopen), 1); + if (flags.z()) + goto notuseinv; + bx = 2618; +notuseinv: + checkcoords(); + _cmp(data.byte(kExamagain), 0); + if (flags.z()) + goto norex; + goto examineagain; +norex: + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto waitexam; + data.byte(kPickup) = 0; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto iswatching; + _cmp(data.byte(kNewlocation), 255); + if (!flags.z()) + goto justgetback; +iswatching: + makemainscreen(); + data.byte(kInvopen) = 0; + data.byte(kOpenedob) = 255; + return; +justgetback: + data.byte(kInvopen) = 0; + data.byte(kOpenedob) = 255; +} + +void DreamGenContext::makemainscreen() { + STACK_CHECK; + createpanel(); + data.byte(kNewobs) = 1; + drawfloor(); + spriteupdate(); + printsprites(); + reelsonscreen(); + showicon(); + getunderzoom(); + undertextline(); + data.byte(kCommandtype) = 255; + animpointer(); + worktoscreenm(); + data.byte(kCommandtype) = 200; + data.byte(kManisoffscreen) = 0; +} + +void DreamGenContext::getbackfromob() { + STACK_CHECK; + _cmp(data.byte(kPickup), 1); + if (!flags.z()) + goto notheldob; + blank(); + return; +notheldob: + getback1(); +} + +void DreamGenContext::incryanpage() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 222); + if (flags.z()) + goto alreadyincryan; + data.byte(kCommandtype) = 222; + al = 31; + commandonly(); +alreadyincryan: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (noincryan) */; + _and(ax, 1); + if (!flags.z()) + goto doincryan; + return; +doincryan: + ax = data.word(kMousex); + _sub(ax, (80)+167); + data.byte(kRyanpage) = -1; +findnewpage: + _inc(data.byte(kRyanpage)); + _sub(ax, 18); + if (!flags.c()) + goto findnewpage; + delpointer(); + fillryan(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::openinv() { + STACK_CHECK; + data.byte(kInvopen) = 1; + al = 61; + di = (80); + bx = (58)-10; + dl = 240; + printmessage(); + fillryan(); + data.byte(kCommandtype) = 255; +} + +void DreamGenContext::showryanpage() { + STACK_CHECK; + ds = data.word(kIcons1); + di = (80)+167; + bx = (58)-12; + al = 12; + ah = 0; + showframe(); + al = 13; + _add(al, data.byte(kRyanpage)); + push(ax); + al = data.byte(kRyanpage); + ah = 0; + cx = 18; + _mul(cx); + ds = data.word(kIcons1); + di = (80)+167; + _add(di, ax); + bx = (58)-12; + ax = pop(); + ah = 0; + showframe(); +} + +void DreamGenContext::openob() { + STACK_CHECK; + al = data.byte(kOpenedob); + ah = data.byte(kOpenedtype); + di = 5847; + copyname(); + di = (80); + bx = (58)+86; + al = 62; + dl = 240; + printmessage(); + di = data.word(kLastxpos); + _add(di, 5); + bx = (58)+86; + es = cs; + si = 5847; + dl = 220; + al = 0; + ah = 0; + printdirect(); + fillopen(); + getopenedsize(); + al = ah; + ah = 0; + cx = (44); + _mul(cx); + _add(ax, (80)); + bx = 2588; + cs.word(bx) = ax; +} + +void DreamGenContext::obicons() { + STACK_CHECK; + al = data.byte(kCommand); + getanyad(); + _cmp(al, 255); + if (flags.z()) + goto cantopenit; + ds = data.word(kIcons2); + di = 210; + bx = 1; + al = 4; + ah = 0; + showframe(); +cantopenit: + ds = data.word(kIcons2); + di = 260; + bx = 1; + al = 1; + ah = 0; + showframe(); +} + +void DreamGenContext::examicon() { + STACK_CHECK; + ds = data.word(kIcons2); + di = 254; + bx = 5; + al = 3; + ah = 0; + showframe(); +} + +void DreamGenContext::obpicture() { + STACK_CHECK; + al = data.byte(kCommand); + ah = data.byte(kObjecttype); + _cmp(ah, 1); + if (flags.z()) + return /* (setframe) */; + _cmp(ah, 4); + if (flags.z()) + goto exframe; + ds = data.word(kFreeframes); + di = 160; + bx = 68; + cl = al; + _add(al, al); + _add(al, cl); + _inc(al); + ah = 128; + showframe(); + return; +exframe: + ds = data.word(kExtras); + di = 160; + bx = 68; + cl = al; + _add(al, al); + _add(al, cl); + _inc(al); + ah = 128; + showframe(); +} + +void DreamGenContext::describeob() { + STACK_CHECK; + getobtextstart(); + di = 33; + bx = 92; + dl = 241; + ah = 16; + data.word(kCharshift) = 91+91; + printdirect(); + data.word(kCharshift) = 0; + di = 36; + bx = 104; + dl = 241; + ah = 0; + printdirect(); + push(bx); + obsthatdothings(); + bx = pop(); + additionaltext(); +} + +void DreamGenContext::additionaltext() { + STACK_CHECK; + _add(bx, 10); + push(bx); + al = data.byte(kCommand); + ah = data.byte(kObjecttype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'E'; + compare(); + if (flags.z()) + goto emptycup; + al = data.byte(kCommand); + ah = data.byte(kObjecttype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'F'; + compare(); + if (flags.z()) + goto fullcup; + bx = pop(); + return; +emptycup: + al = 40; + findpuztext(); + bx = pop(); + di = 36; + dl = 241; + ah = 0; + printdirect(); + return; +fullcup: + al = 39; + findpuztext(); + bx = pop(); + di = 36; + dl = 241; + ah = 0; + printdirect(); +} + +void DreamGenContext::obsthatdothings() { + STACK_CHECK; + al = data.byte(kCommand); + ah = data.byte(kObjecttype); + cl = 'M'; + ch = 'E'; + dl = 'M'; + dh = 'B'; + compare(); + if (!flags.z()) + return /* (notlouiscard) */; + al = 4; + getlocation(); + _cmp(al, 1); + if (flags.z()) + return /* (seencard) */; + al = 4; + setlocation(); + lookatcard(); +} + +void DreamGenContext::getobtextstart() { + STACK_CHECK; + es = data.word(kFreedesc); + si = (0); + cx = (0+(82*2)); + _cmp(data.byte(kObjecttype), 2); + if (flags.z()) + goto describe; + es = data.word(kSetdesc); + si = (0); + cx = (0+(130*2)); + _cmp(data.byte(kObjecttype), 1); + if (flags.z()) + goto describe; + es = data.word(kExtras); + si = (0+2080+30000+(16*114)); + cx = (0+2080+30000+(16*114)+((114+2)*2)); +describe: + al = data.byte(kCommand); + ah = 0; + _add(ax, ax); + _add(si, ax); + ax = es.word(si); + _add(ax, cx); + si = ax; + bx = ax; +tryagain: + push(si); + findnextcolon(); + al = es.byte(si); + cx = si; + si = pop(); + _cmp(data.byte(kObjecttype), 1); + if (!flags.z()) + return /* (cantmakeoneup) */; + _cmp(al, 0); + if (flags.z()) + goto findsometext; + _cmp(al, ':'); + if (flags.z()) + goto findsometext; + return; +findsometext: + searchforsame(); + goto tryagain; +} + +void DreamGenContext::searchforsame() { + STACK_CHECK; + si = cx; +searchagain: + _inc(si); + al = es.byte(bx); +search: + _cmp(es.byte(si), al); + if (flags.z()) + goto gotstartletter; + _inc(cx); + _inc(si); + _cmp(si, 8000); + if (flags.c()) + goto search; + si = bx; + ax = pop(); + return; +gotstartletter: + push(bx); + push(si); +keepchecking: + _inc(si); + _inc(bx); + al = es.byte(bx); + ah = es.byte(si); + _cmp(al, ':'); + if (flags.z()) + goto foundmatch; + _cmp(al, 0); + if (flags.z()) + goto foundmatch; + _cmp(al, ah); + if (flags.z()) + goto keepchecking; + si = pop(); + bx = pop(); + goto searchagain; +foundmatch: + si = pop(); + bx = pop(); +} + +void DreamGenContext::findnextcolon() { + STACK_CHECK; +isntcolon: + al = es.byte(si); + _inc(si); + _cmp(al, 0); + if (flags.z()) + return /* (endofcolon) */; + _cmp(al, ':'); + if (!flags.z()) + goto isntcolon; +} + +void DreamGenContext::inventory() { + STACK_CHECK; + _cmp(data.byte(kMandead), 1); + if (flags.z()) + goto iswatchinv; + _cmp(data.word(kWatchingtime), 0); + if (flags.z()) + goto notwatchinv; +iswatchinv: + blank(); + return; +notwatchinv: + _cmp(data.byte(kCommandtype), 239); + if (flags.z()) + goto alreadyopinv; + data.byte(kCommandtype) = 239; + al = 32; + commandonly(); +alreadyopinv: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (cantopinv) */; + _and(ax, 1); + if (!flags.z()) + goto doopeninv; + return; +doopeninv: + data.word(kTimecount) = 0; + data.byte(kPointermode) = 0; + data.byte(kInmaparea) = 0; + animpointer(); + createpanel(); + showpanel(); + examicon(); + showman(); + showexit(); + undertextline(); + data.byte(kPickup) = 0; + data.byte(kInvopen) = 2; + openinv(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + data.byte(kOpenedob) = 255; + goto waitexam; +/*continuing to unbounded code: examineagain from examineob:3-66*/ +examineagain: + data.byte(kInmaparea) = 0; + data.byte(kExamagain) = 0; + data.byte(kOpenedob) = 255; + data.byte(kOpenedtype) = 255; + data.byte(kInvopen) = 0; + al = data.byte(kCommandtype); + data.byte(kObjecttype) = al; + data.byte(kItemframe) = 0; + data.byte(kPointerframe) = 0; + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + obpicture(); + describeob(); + undertextline(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +waitexam: + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + delpointer(); + data.byte(kGetback) = 0; + bx = 2494; + _cmp(data.byte(kInvopen), 0); + if (flags.z()) + goto notuseinv; + bx = 2556; + _cmp(data.byte(kInvopen), 1); + if (flags.z()) + goto notuseinv; + bx = 2618; +notuseinv: + checkcoords(); + _cmp(data.byte(kExamagain), 0); + if (flags.z()) + goto norex; + goto examineagain; +norex: + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto waitexam; + data.byte(kPickup) = 0; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto iswatching; + _cmp(data.byte(kNewlocation), 255); + if (!flags.z()) + goto justgetback; +iswatching: + makemainscreen(); + data.byte(kInvopen) = 0; + data.byte(kOpenedob) = 255; + return; +justgetback: + data.byte(kInvopen) = 0; + data.byte(kOpenedob) = 255; +} + +void DreamGenContext::setpickup() { + STACK_CHECK; + _cmp(data.byte(kObjecttype), 1); + if (flags.z()) + goto cantpick; + _cmp(data.byte(kObjecttype), 3); + if (flags.z()) + goto cantpick; + getanyad(); + al = es.byte(bx+2); + _cmp(al, 4); + if (!flags.z()) + goto canpick; +cantpick: + blank(); + return; +canpick: + _cmp(data.byte(kCommandtype), 209); + if (flags.z()) + goto alreadysp; + data.byte(kCommandtype) = 209; + bl = data.byte(kCommand); + bh = data.byte(kObjecttype); + al = 33; + commandwithob(); +alreadysp: + ax = data.word(kMousebutton); + _cmp(ax, 1); + if (!flags.z()) + return /* (nosetpick) */; + _cmp(ax, data.word(kOldbutton)); + if (!flags.z()) + goto dosetpick; + return; +dosetpick: + createpanel(); + showpanel(); + showman(); + showexit(); + examicon(); + data.byte(kPickup) = 1; + data.byte(kInvopen) = 2; + _cmp(data.byte(kObjecttype), 4); + if (flags.z()) + goto pickupexob; + al = data.byte(kCommand); + data.byte(kItemframe) = al; + data.byte(kOpenedob) = 255; + transfertoex(); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = 4; + geteitherad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; + openinv(); + worktoscreenm(); + return; +pickupexob: + al = data.byte(kCommand); + data.byte(kItemframe) = al; + data.byte(kOpenedob) = 255; + openinv(); + worktoscreenm(); +} + +void DreamGenContext::examinventory() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 249); + if (flags.z()) + goto alreadyexinv; + data.byte(kCommandtype) = 249; + al = 32; + commandonly(); +alreadyexinv: + ax = data.word(kMousebutton); + _and(ax, 1); + if (!flags.z()) + goto doexinv; + return; +doexinv: + createpanel(); + showpanel(); + showman(); + showexit(); + examicon(); + data.byte(kPickup) = 0; + data.byte(kInvopen) = 2; + openinv(); + worktoscreenm(); +} + +void DreamGenContext::reexfrominv() { + STACK_CHECK; + findinvpos(); + ax = es.word(bx); + data.byte(kCommandtype) = ah; + data.byte(kCommand) = al; + data.byte(kExamagain) = 1; + data.byte(kPointermode) = 0; +} + +void DreamGenContext::reexfromopen() { + STACK_CHECK; + return; + findopenpos(); + ax = es.word(bx); + data.byte(kCommandtype) = ah; + data.byte(kCommand) = al; + data.byte(kExamagain) = 1; + data.byte(kPointermode) = 0; +} + +void DreamGenContext::swapwithinv() { + STACK_CHECK; + al = data.byte(kItemframe); + ah = data.byte(kObjecttype); + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto difsub7; + _cmp(data.byte(kCommandtype), 243); + if (flags.z()) + goto alreadyswap1; + data.byte(kCommandtype) = 243; +difsub7: + data.word(kOldsubject) = ax; + bx = ax; + al = 34; + commandwithob(); +alreadyswap1: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (cantswap1) */; + _and(ax, 1); + if (!flags.z()) + goto doswap1; + return; +doswap1: + ah = data.byte(kObjecttype); + al = data.byte(kItemframe); + push(ax); + findinvpos(); + ax = es.word(bx); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = ah; + geteitherad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; + bl = data.byte(kItemframe); + bh = data.byte(kObjecttype); + ax = pop(); + data.byte(kObjecttype) = ah; + data.byte(kItemframe) = al; + push(bx); + findinvpos(); + delpointer(); + al = data.byte(kItemframe); + geteitherad(); + es.byte(bx+2) = 4; + es.byte(bx+3) = 255; + al = data.byte(kLastinvpos); + es.byte(bx+4) = al; + ax = pop(); + data.byte(kObjecttype) = ah; + data.byte(kItemframe) = al; + fillryan(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::swapwithopen() { + STACK_CHECK; + al = data.byte(kItemframe); + ah = data.byte(kObjecttype); + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto difsub8; + _cmp(data.byte(kCommandtype), 242); + if (flags.z()) + goto alreadyswap2; + data.byte(kCommandtype) = 242; +difsub8: + data.word(kOldsubject) = ax; + bx = ax; + al = 34; + commandwithob(); +alreadyswap2: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (cantswap2) */; + _and(ax, 1); + if (!flags.z()) + goto doswap2; + return; +doswap2: + geteitherad(); + isitworn(); + if (!flags.z()) + goto notwornswap; + wornerror(); + return; +notwornswap: + delpointer(); + al = data.byte(kItemframe); + _cmp(al, data.byte(kOpenedob)); + if (!flags.z()) + goto isntsame2; + al = data.byte(kObjecttype); + _cmp(al, data.byte(kOpenedtype)); + if (!flags.z()) + goto isntsame2; + errormessage1(); + return; +isntsame2: + checkobjectsize(); + _cmp(al, 0); + if (flags.z()) + goto sizeok2; + return; +sizeok2: + ah = data.byte(kObjecttype); + al = data.byte(kItemframe); + push(ax); + findopenpos(); + ax = es.word(bx); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = ah; + _cmp(ah, 4); + if (!flags.z()) + goto makeswapex; + geteitherad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; + goto actuallyswap; +makeswapex: + transfertoex(); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = 4; + geteitherad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; +actuallyswap: + bl = data.byte(kItemframe); + bh = data.byte(kObjecttype); + ax = pop(); + data.byte(kObjecttype) = ah; + data.byte(kItemframe) = al; + push(bx); + findopenpos(); + geteitherad(); + al = data.byte(kOpenedtype); + es.byte(bx+2) = al; + al = data.byte(kOpenedob); + es.byte(bx+3) = al; + al = data.byte(kLastinvpos); + es.byte(bx+4) = al; + al = data.byte(kReallocation); + es.byte(bx+5) = al; + ax = pop(); + data.byte(kObjecttype) = ah; + data.byte(kItemframe) = al; + fillopen(); + fillryan(); + undertextline(); + readmouse(); + useopened(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::intoinv() { + STACK_CHECK; + _cmp(data.byte(kPickup), 0); + if (!flags.z()) + goto notout; + outofinv(); + return; +notout: + findinvpos(); + ax = es.word(bx); + _cmp(al, 255); + if (flags.z()) + goto canplace1; + swapwithinv(); + return; +canplace1: + al = data.byte(kItemframe); + ah = data.byte(kObjecttype); + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto difsub1; + _cmp(data.byte(kCommandtype), 220); + if (flags.z()) + goto alreadyplce; + data.byte(kCommandtype) = 220; +difsub1: + data.word(kOldsubject) = ax; + bx = ax; + al = 35; + commandwithob(); +alreadyplce: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notletgo2) */; + _and(ax, 1); + if (!flags.z()) + goto doplace; + return; +doplace: + delpointer(); + al = data.byte(kItemframe); + getexad(); + es.byte(bx+2) = 4; + es.byte(bx+3) = 255; + al = data.byte(kLastinvpos); + es.byte(bx+4) = al; + data.byte(kPickup) = 0; + fillryan(); + readmouse(); + showpointer(); + outofinv(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::deletetaken() { + STACK_CHECK; + es = data.word(kFreedat); + ah = data.byte(kReallocation); + ds = data.word(kExtras); + si = (0+2080+30000); + cx = (114); +takenloop: + al = ds.byte(si+11); + _cmp(al, ah); + if (!flags.z()) + goto notinhere; + bl = ds.byte(si+1); + bh = 0; + _add(bx, bx); + _add(bx, bx); + _add(bx, bx); + _add(bx, bx); + es.byte(bx+2) = 254; +notinhere: + _add(si, 16); + if (--cx) + goto takenloop; +} + +void DreamGenContext::outofinv() { + STACK_CHECK; + findinvpos(); + ax = es.word(bx); + _cmp(al, 255); + if (!flags.z()) + goto canpick2; + blank(); + return; +canpick2: + bx = data.word(kMousebutton); + _cmp(bx, 2); + if (!flags.z()) + goto canpick2a; + reexfrominv(); + return; +canpick2a: + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto difsub3; + _cmp(data.byte(kCommandtype), 221); + if (flags.z()) + goto alreadygrab; + data.byte(kCommandtype) = 221; +difsub3: + data.word(kOldsubject) = ax; + bx = ax; + al = 36; + commandwithob(); +alreadygrab: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notletgo) */; + _and(ax, 1); + if (!flags.z()) + goto dograb; + return; +dograb: + delpointer(); + data.byte(kPickup) = 1; + findinvpos(); + ax = es.word(bx); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = ah; + getexad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; + fillryan(); + readmouse(); + showpointer(); + intoinv(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::getfreead() { + STACK_CHECK; + ah = 0; + cl = 4; + _shl(ax, cl); + bx = ax; + es = data.word(kFreedat); +} + +void DreamGenContext::getexad() { + STACK_CHECK; + ah = 0; + bx = 16; + _mul(bx); + bx = ax; + es = data.word(kExtras); + _add(bx, (0+2080+30000)); +} + +void DreamGenContext::geteitherad() { + STACK_CHECK; + _cmp(data.byte(kObjecttype), 4); + if (flags.z()) + goto isinexlist; + al = data.byte(kItemframe); + getfreead(); + return; +isinexlist: + al = data.byte(kItemframe); + getexad(); +} + +void DreamGenContext::getanyad() { + STACK_CHECK; + _cmp(data.byte(kObjecttype), 4); + if (flags.z()) + goto isex; + _cmp(data.byte(kObjecttype), 2); + if (flags.z()) + goto isfree; + al = data.byte(kCommand); + getsetad(); + ax = es.word(bx+4); + return; +isfree: + al = data.byte(kCommand); + getfreead(); + ax = es.word(bx+7); + return; +isex: + al = data.byte(kCommand); + getexad(); + ax = es.word(bx+7); +} + +void DreamGenContext::getanyaddir() { + STACK_CHECK; + _cmp(ah, 4); + if (flags.z()) + goto isex3; + _cmp(ah, 2); + if (flags.z()) + goto isfree3; + getsetad(); + return; +isfree3: + getfreead(); + return; +isex3: + getexad(); +} + +void DreamGenContext::getopenedsize() { + STACK_CHECK; + _cmp(data.byte(kOpenedtype), 4); + if (flags.z()) + goto isex2; + _cmp(data.byte(kOpenedtype), 2); + if (flags.z()) + goto isfree2; + al = data.byte(kOpenedob); + getsetad(); + ax = es.word(bx+3); + return; +isfree2: + al = data.byte(kOpenedob); + getfreead(); + ax = es.word(bx+7); + return; +isex2: + al = data.byte(kOpenedob); + getexad(); + ax = es.word(bx+7); +} + +void DreamGenContext::getsetad() { + STACK_CHECK; + ah = 0; + bx = 64; + _mul(bx); + bx = ax; + es = data.word(kSetdat); +} + +void DreamGenContext::findinvpos() { + STACK_CHECK; + cx = data.word(kMousex); + _sub(cx, (80)); + bx = -1; +findinv1: + _inc(bx); + _sub(cx, (44)); + if (!flags.c()) + goto findinv1; + cx = data.word(kMousey); + _sub(cx, (58)); + _sub(bx, 5); +findinv2: + _add(bx, 5); + _sub(cx, (44)); + if (!flags.c()) + goto findinv2; + al = data.byte(kRyanpage); + ah = 0; + cx = 10; + _mul(cx); + _add(bx, ax); + al = bl; + data.byte(kLastinvpos) = al; + _add(bx, bx); + es = data.word(kBuffers); + _add(bx, (0+(180*10)+32)); +} + +void DreamGenContext::findopenpos() { + STACK_CHECK; + cx = data.word(kMousex); + _sub(cx, (80)); + bx = -1; +findopenp1: + _inc(bx); + _sub(cx, (44)); + if (!flags.c()) + goto findopenp1; + al = bl; + data.byte(kLastinvpos) = al; + _add(bx, bx); + es = data.word(kBuffers); + _add(bx, (0+(180*10))); +} + +void DreamGenContext::dropobject() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 223); + if (flags.z()) + goto alreadydrop; + data.byte(kCommandtype) = 223; + _cmp(data.byte(kPickup), 0); + if (flags.z()) + { blank(); return; }; + bl = data.byte(kItemframe); + bh = data.byte(kObjecttype); + al = 37; + commandwithob(); +alreadydrop: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nodrop) */; + _and(ax, 1); + if (!flags.z()) + goto dodrop; + return; +dodrop: + geteitherad(); + isitworn(); + if (!flags.z()) + goto nowornerror; + wornerror(); + return; +nowornerror: + _cmp(data.byte(kReallocation), 47); + if (flags.z()) + goto nodrop2; + cl = data.byte(kRyanx); + _add(cl, 12); + ch = data.byte(kRyany); + _add(ch, 12); + checkone(); + _cmp(cl, 2); + if (flags.c()) + goto nodroperror; +nodrop2: + droperror(); + return; +nodroperror: + _cmp(data.byte(kMapxsize), 64); + if (!flags.z()) + goto notinlift; + _cmp(data.byte(kMapysize), 64); + if (!flags.z()) + goto notinlift; + droperror(); + return; +notinlift: + al = data.byte(kItemframe); + ah = 4; + cl = 'G'; + ch = 'U'; + dl = 'N'; + dh = 'A'; + compare(); + if (flags.z()) + { cantdrop(); return; }; + al = data.byte(kItemframe); + ah = 4; + cl = 'S'; + ch = 'H'; + dl = 'L'; + dh = 'D'; + compare(); + if (flags.z()) + { cantdrop(); return; }; + data.byte(kObjecttype) = 4; + al = data.byte(kItemframe); + getexad(); + es.byte(bx+2) = 0; + al = data.byte(kRyanx); + _add(al, 4); + cl = 4; + _shr(al, cl); + _add(al, data.byte(kMapx)); + ah = data.byte(kRyany); + _add(ah, 8); + cl = 4; + _shr(ah, cl); + _add(ah, data.byte(kMapy)); + es.byte(bx+3) = al; + es.byte(bx+5) = ah; + al = data.byte(kRyanx); + _add(al, 4); + _and(al, 15); + ah = data.byte(kRyany); + _add(ah, 8); + _and(ah, 15); + es.byte(bx+4) = al; + es.byte(bx+6) = ah; + data.byte(kPickup) = 0; + al = data.byte(kReallocation); + es.byte(bx) = al; +} + +void DreamGenContext::droperror() { + STACK_CHECK; + data.byte(kCommandtype) = 255; + delpointer(); + di = 76; + bx = 21; + al = 56; + dl = 240; + printmessage(); + worktoscreenm(); + cx = 50; + hangonp(); + showpanel(); + showman(); + examicon(); + data.byte(kCommandtype) = 255; + worktoscreenm(); +} + +void DreamGenContext::cantdrop() { + STACK_CHECK; + data.byte(kCommandtype) = 255; + delpointer(); + di = 76; + bx = 21; + al = 24; + dl = 240; + printmessage(); + worktoscreenm(); + cx = 50; + hangonp(); + showpanel(); + showman(); + examicon(); + data.byte(kCommandtype) = 255; + worktoscreenm(); +} + +void DreamGenContext::wornerror() { + STACK_CHECK; + data.byte(kCommandtype) = 255; + delpointer(); + di = 76; + bx = 21; + al = 57; + dl = 240; + printmessage(); + worktoscreenm(); + cx = 50; + hangonp(); + showpanel(); + showman(); + examicon(); + data.byte(kCommandtype) = 255; + worktoscreenm(); +} + +void DreamGenContext::removeobfrominv() { + STACK_CHECK; + _cmp(data.byte(kCommand), 100); + if (flags.z()) + return /* (obnotexist) */; + getanyad(); + di = bx; + cl = data.byte(kCommand); + ch = 0; + deleteexobject(); +} + +void DreamGenContext::selectopenob() { + STACK_CHECK; + al = data.byte(kCommand); + getanyad(); + _cmp(al, 255); + if (!flags.z()) + goto canopenit1; + blank(); + return; +canopenit1: + _cmp(data.byte(kCommandtype), 224); + if (flags.z()) + goto alreadyopob; + data.byte(kCommandtype) = 224; + bl = data.byte(kCommand); + bh = data.byte(kObjecttype); + al = 38; + commandwithob(); +alreadyopob: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (noopenob) */; + _and(ax, 1); + if (!flags.z()) + goto doopenob; + return; +doopenob: + al = data.byte(kCommand); + data.byte(kOpenedob) = al; + al = data.byte(kObjecttype); + data.byte(kOpenedtype) = al; + createpanel(); + showpanel(); + showman(); + examicon(); + showexit(); + openinv(); + openob(); + undertextline(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::useopened() { + STACK_CHECK; + _cmp(data.byte(kOpenedob), 255); + if (flags.z()) + return /* (cannotuseopen) */; + _cmp(data.byte(kPickup), 0); + if (!flags.z()) + goto notout2; + outofopen(); + return; +notout2: + findopenpos(); + ax = es.word(bx); + _cmp(al, 255); + if (flags.z()) + goto canplace3; + swapwithopen(); + return; +canplace3: + _cmp(data.byte(kPickup), 1); + if (flags.z()) + goto intoopen; + blank(); + return; +intoopen: + al = data.byte(kItemframe); + ah = data.byte(kObjecttype); + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto difsub2; + _cmp(data.byte(kCommandtype), 227); + if (flags.z()) + goto alreadyplc2; + data.byte(kCommandtype) = 227; +difsub2: + data.word(kOldsubject) = ax; + bx = ax; + al = 35; + commandwithob(); +alreadyplc2: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notletgo3) */; + _cmp(ax, 1); + if (flags.z()) + goto doplace2; + return; +doplace2: + geteitherad(); + isitworn(); + if (!flags.z()) + goto notworntoopen; + wornerror(); + return; +notworntoopen: + delpointer(); + al = data.byte(kItemframe); + _cmp(al, data.byte(kOpenedob)); + if (!flags.z()) + goto isntsame; + al = data.byte(kObjecttype); + _cmp(al, data.byte(kOpenedtype)); + if (!flags.z()) + goto isntsame; + errormessage1(); + return; +isntsame: + checkobjectsize(); + _cmp(al, 0); + if (flags.z()) + goto sizeok1; + return; +sizeok1: + data.byte(kPickup) = 0; + al = data.byte(kItemframe); + geteitherad(); + al = data.byte(kOpenedtype); + es.byte(bx+2) = al; + al = data.byte(kOpenedob); + es.byte(bx+3) = al; + al = data.byte(kLastinvpos); + es.byte(bx+4) = al; + al = data.byte(kReallocation); + es.byte(bx+5) = al; + fillopen(); + undertextline(); + readmouse(); + useopened(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::errormessage1() { + STACK_CHECK; + delpointer(); + di = 76; + bx = 21; + al = 58; + dl = 240; + printmessage(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + cx = 50; + hangonp(); + showpanel(); + showman(); + examicon(); + readmouse(); + useopened(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::errormessage2() { + STACK_CHECK; + data.byte(kCommandtype) = 255; + delpointer(); + di = 76; + bx = 21; + al = 59; + dl = 240; + printmessage(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + cx = 50; + hangonp(); + showpanel(); + showman(); + examicon(); + readmouse(); + useopened(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::errormessage3() { + STACK_CHECK; + delpointer(); + di = 76; + bx = 21; + al = 60; + dl = 240; + printmessage(); + worktoscreenm(); + cx = 50; + hangonp(); + showpanel(); + showman(); + examicon(); + readmouse(); + useopened(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::checkobjectsize() { + STACK_CHECK; + getopenedsize(); + push(ax); + al = data.byte(kItemframe); + geteitherad(); + al = es.byte(bx+9); + cx = pop(); + _cmp(al, 255); + if (!flags.z()) + goto notunsized; + al = 6; +notunsized: + _cmp(al, 100); + if (!flags.c()) + goto specialcase; + _cmp(cl, 100); + if (flags.c()) + goto isntspecial; + errormessage3(); + goto sizewrong; +isntspecial: + _cmp(cl, al); + if (!flags.c()) + goto sizeok; +specialcase: + _sub(al, 100); + _cmp(cl, 100); + if (!flags.c()) + goto bothspecial; + _cmp(cl, al); + if (!flags.c()) + goto sizeok; + errormessage2(); + goto sizewrong; +bothspecial: + _sub(cl, 100); + _cmp(al, cl); + if (flags.z()) + goto sizeok; + errormessage3(); +sizewrong: + al = 1; + return; +sizeok: + al = 0; +} + +void DreamGenContext::outofopen() { + STACK_CHECK; + _cmp(data.byte(kOpenedob), 255); + if (flags.z()) + goto cantuseopen; + findopenpos(); + ax = es.word(bx); + _cmp(al, 255); + if (!flags.z()) + goto canpick4; +cantuseopen: + blank(); + return; +canpick4: + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto difsub4; + _cmp(data.byte(kCommandtype), 228); + if (flags.z()) + goto alreadygrb; + data.byte(kCommandtype) = 228; +difsub4: + data.word(kOldsubject) = ax; + bx = ax; + al = 36; + commandwithob(); +alreadygrb: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notletgo4) */; + _cmp(ax, 1); + if (flags.z()) + goto dogrb; + _cmp(ax, 2); + if (!flags.z()) + return /* (notletgo4) */; + reexfromopen(); + return; +dogrb: + delpointer(); + data.byte(kPickup) = 1; + findopenpos(); + ax = es.word(bx); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = ah; + _cmp(ah, 4); + if (!flags.z()) + goto makeintoex; + geteitherad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; + goto actuallyout; +makeintoex: + transfertoex(); + data.byte(kItemframe) = al; + data.byte(kObjecttype) = 4; + geteitherad(); + es.byte(bx+2) = 20; + es.byte(bx+3) = 255; +actuallyout: + fillopen(); + undertextline(); + readmouse(); + useopened(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::transfertoex() { + STACK_CHECK; + emergencypurge(); + getexpos(); + al = data.byte(kExpos); + push(ax); + push(di); + al = data.byte(kItemframe); + ah = 0; + bx = 16; + _mul(bx); + ds = data.word(kFreedat); + si = ax; + cx = 8; + _movsw(cx, true); + di = pop(); + al = data.byte(kReallocation); + es.byte(di) = al; + es.byte(di+11) = al; + al = data.byte(kItemframe); + es.byte(di+1) = al; + es.byte(di+2) = 4; + es.byte(di+3) = 255; + al = data.byte(kLastinvpos); + es.byte(di+4) = al; + al = data.byte(kItemframe); + data.byte(kItemtotran) = al; + transfermap(); + transferinv(); + transfertext(); + al = data.byte(kItemframe); + ah = 0; + bx = 16; + _mul(bx); + ds = data.word(kFreedat); + si = ax; + ds.byte(si+2) = 254; + pickupconts(); + ax = pop(); +} + +void DreamGenContext::pickupconts() { + STACK_CHECK; + al = ds.byte(si+7); + _cmp(al, 255); + if (flags.z()) + return /* (notopenable) */; + al = data.byte(kItemframe); + ah = data.byte(kObjecttype); + dl = data.byte(kExpos); + es = data.word(kFreedat); + bx = 0; + cx = 0; +pickupcontloop: + push(cx); + push(es); + push(bx); + push(dx); + push(ax); + _cmp(es.byte(bx+2), ah); + if (!flags.z()) + goto notinsidethis; + _cmp(es.byte(bx+3), al); + if (!flags.z()) + goto notinsidethis; + data.byte(kItemtotran) = cl; + transfercontoex(); +notinsidethis: + ax = pop(); + dx = pop(); + bx = pop(); + es = pop(); + cx = pop(); + _add(bx, 16); + _inc(cx); + _cmp(cx, 80); + if (!flags.z()) + goto pickupcontloop; +} + +void DreamGenContext::transfercontoex() { + STACK_CHECK; + push(es); + push(bx); + push(dx); + push(es); + push(bx); + getexpos(); + si = pop(); + ds = pop(); + push(di); + cx = 8; + _movsw(cx, true); + di = pop(); + dx = pop(); + al = data.byte(kReallocation); + es.byte(di) = al; + es.byte(di+11) = al; + al = data.byte(kItemtotran); + es.byte(di+1) = al; + es.byte(di+3) = dl; + es.byte(di+2) = 4; + transfermap(); + transferinv(); + transfertext(); + si = pop(); + ds = pop(); + ds.byte(si+2) = 255; +} + +void DreamGenContext::transfertext() { + STACK_CHECK; + es = data.word(kExtras); + al = data.byte(kExpos); + ah = 0; + _add(ax, ax); + bx = (0+2080+30000+(16*114)); + _add(bx, ax); + di = data.word(kExtextpos); + es.word(bx) = di; + _add(di, (0+2080+30000+(16*114)+((114+2)*2))); + al = data.byte(kItemtotran); + ah = 0; + _add(ax, ax); + ds = data.word(kFreedesc); + bx = (0); + _add(bx, ax); + si = (0+(82*2)); + ax = ds.word(bx); + _add(si, ax); +moretext: + _lodsb(); + _stosb(); + _inc(data.word(kExtextpos)); + _cmp(al, 0); + if (!flags.z()) + goto moretext; +} + +void DreamGenContext::getexpos() { + STACK_CHECK; + es = data.word(kExtras); + al = 0; + di = (0+2080+30000); +tryanotherex: + _cmp(es.byte(di+2), 255); + if (flags.z()) + goto foundnewex; + _add(di, 16); + _inc(al); + _cmp(al, (114)); + if (!flags.z()) + goto tryanotherex; +foundnewex: + data.byte(kExpos) = al; +} + +void DreamGenContext::purgealocation() { + STACK_CHECK; + push(ax); + es = data.word(kExtras); + di = (0+2080+30000); + bx = pop(); + cx = 0; +purgeloc: + _cmp(bl, es.byte(di+0)); + if (!flags.z()) + goto dontpurge; + _cmp(es.byte(di+2), 0); + if (!flags.z()) + goto dontpurge; + push(di); + push(es); + push(bx); + push(cx); + deleteexobject(); + cx = pop(); + bx = pop(); + es = pop(); + di = pop(); +dontpurge: + _add(di, 16); + _inc(cx); + _cmp(cx, (114)); + if (!flags.z()) + goto purgeloc; +} + +void DreamGenContext::emergencypurge() { + STACK_CHECK; +checkpurgeagain: + ax = data.word(kExframepos); + _add(ax, 4000); + _cmp(ax, (30000)); + if (flags.c()) + goto notnearframeend; + purgeanitem(); + goto checkpurgeagain; +notnearframeend: + ax = data.word(kExtextpos); + _add(ax, 400); + _cmp(ax, (18000)); + if (flags.c()) + return /* (notneartextend) */; + purgeanitem(); + goto checkpurgeagain; +} + +void DreamGenContext::purgeanitem() { + STACK_CHECK; + es = data.word(kExtras); + di = (0+2080+30000); + bl = data.byte(kReallocation); + cx = 0; +lookforpurge: + al = es.byte(di+2); + _cmp(al, 0); + if (!flags.z()) + goto cantpurge; + _cmp(es.byte(di+12), 2); + if (flags.z()) + goto iscup; + _cmp(es.byte(di+12), 255); + if (!flags.z()) + goto cantpurge; +iscup: + _cmp(es.byte(di+11), bl); + if (flags.z()) + goto cantpurge; + deleteexobject(); + return; +cantpurge: + _add(di, 16); + _inc(cx); + _cmp(cx, (114)); + if (!flags.z()) + goto lookforpurge; + di = (0+2080+30000); + bl = data.byte(kReallocation); + cx = 0; +lookforpurge2: + al = es.byte(di+2); + _cmp(al, 0); + if (!flags.z()) + goto cantpurge2; + _cmp(es.byte(di+12), 255); + if (!flags.z()) + goto cantpurge2; + deleteexobject(); + return; +cantpurge2: + _add(di, 16); + _inc(cx); + _cmp(cx, (114)); + if (!flags.z()) + goto lookforpurge2; +} + +void DreamGenContext::deleteexobject() { + STACK_CHECK; + push(cx); + push(cx); + push(cx); + push(cx); + al = 255; + cx = 16; + _stosb(cx, true); + ax = pop(); + cl = al; + _add(al, al); + _add(al, cl); + deleteexframe(); + ax = pop(); + cl = al; + _add(al, al); + _add(al, cl); + _inc(al); + deleteexframe(); + ax = pop(); + deleteextext(); + bx = pop(); + bh = bl; + bl = 4; + di = (0+2080+30000); + cx = 0; +deleteconts: + _cmp(es.word(di+2), bx); + if (!flags.z()) + goto notinsideex; + push(bx); + push(cx); + push(di); + deleteexobject(); + di = pop(); + cx = pop(); + bx = pop(); +notinsideex: + _add(di, 16); + _inc(cx); + _cmp(cx, (114)); + if (!flags.z()) + goto deleteconts; +} + +void DreamGenContext::deleteexframe() { + STACK_CHECK; + di = (0); + ah = 0; + _add(ax, ax); + _add(di, ax); + _add(ax, ax); + _add(di, ax); + al = es.byte(di); + ah = 0; + cl = es.byte(di+1); + ch = 0; + _mul(cx); + si = es.word(di+2); + push(si); + _add(si, (0+2080)); + cx = (30000); + _sub(cx, es.word(di+2)); + di = si; + _add(si, ax); + push(ax); + ds = es; + _movsb(cx, true); + bx = pop(); + _sub(data.word(kExframepos), bx); + si = pop(); + cx = (114)*3; + di = (0); +shuffleadsdown: + ax = es.word(di+2); + _cmp(ax, si); + if (flags.c()) + goto beforethisone; + _sub(ax, bx); +beforethisone: + es.word(di+2) = ax; + _add(di, 6); + if (--cx) + goto shuffleadsdown; +} + +void DreamGenContext::deleteextext() { + STACK_CHECK; + di = (0+2080+30000+(16*114)); + ah = 0; + _add(ax, ax); + _add(di, ax); + ax = es.word(di); + si = ax; + di = ax; + _add(si, (0+2080+30000+(16*114)+((114+2)*2))); + _add(di, (0+2080+30000+(16*114)+((114+2)*2))); + ax = 0; +findlenextext: + cl = es.byte(si); + _inc(ax); + _inc(si); + _cmp(cl, 0); + if (!flags.z()) + goto findlenextext; + cx = (18000); + bx = si; + _sub(bx, (0+2080+30000+(16*114)+((114+2)*2))); + push(bx); + push(ax); + _sub(cx, bx); + _movsb(cx, true); + bx = pop(); + _sub(data.word(kExtextpos), bx); + si = pop(); + cx = (114); + di = (0+2080+30000+(16*114)); +shuffletextads: + ax = es.word(di); + _cmp(ax, si); + if (flags.c()) + goto beforethistext; + _sub(ax, bx); +beforethistext: + es.word(di) = ax; + _add(di, 2); + if (--cx) + goto shuffletextads; +} + +void DreamGenContext::blockget() { + STACK_CHECK; + ah = al; + al = 0; + ds = data.word(kBackdrop); + si = (0+192); + _add(si, ax); +} + +void DreamGenContext::drawfloor() { + STACK_CHECK; + push(es); + push(bx); + eraseoldobs(); + drawflags(); + calcmapad(); + doblocks(); + showallobs(); + showallfree(); + showallex(); + paneltomap(); + initrain(); + data.byte(kNewobs) = 0; + bx = pop(); + es = pop(); +} + +void DreamGenContext::calcmapad() { + STACK_CHECK; + getdimension(); + push(cx); + push(dx); + al = 11; + _sub(al, dl); + _sub(al, cl); + _sub(al, cl); + ax.cbw(); + bx = 8; + _mul(bx); + _add(ax, data.word(kMapoffsetx)); + data.word(kMapadx) = ax; + dx = pop(); + cx = pop(); + al = 10; + _sub(al, dh); + _sub(al, ch); + _sub(al, ch); + ax.cbw(); + bx = 8; + _mul(bx); + _add(ax, data.word(kMapoffsety)); + data.word(kMapady) = ax; +} + +void DreamGenContext::getdimension() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)); + ch = 0; +dimloop1: + addalong(); + _cmp(al, 0); + if (!flags.z()) + goto finishdim1; + _inc(ch); + goto dimloop1; +finishdim1: + bx = (0+(180*10)+32+60+(32*32)); + cl = 0; +dimloop2: + push(bx); + addlength(); + bx = pop(); + _cmp(al, 0); + if (!flags.z()) + goto finishdim2; + _inc(cl); + _add(bx, 3); + goto dimloop2; +finishdim2: + bx = (0+(180*10)+32+60+(32*32))+(11*3*9); + dh = 10; +dimloop3: + push(bx); + addalong(); + bx = pop(); + _cmp(al, 0); + if (!flags.z()) + goto finishdim3; + _dec(dh); + _sub(bx, 11*3); + goto dimloop3; +finishdim3: + bx = (0+(180*10)+32+60+(32*32))+(3*10); + dl = 11; +dimloop4: + push(bx); + addlength(); + bx = pop(); + _cmp(al, 0); + if (!flags.z()) + goto finishdim4; + _dec(dl); + _sub(bx, 3); + goto dimloop4; +finishdim4: + al = cl; + ah = 0; + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + data.word(kMapxstart) = ax; + al = ch; + ah = 0; + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + data.word(kMapystart) = ax; + _sub(dl, cl); + _sub(dh, ch); + al = dl; + ah = 0; + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + data.byte(kMapxsize) = al; + al = dh; + ah = 0; + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + _shl(ax, 1); + data.byte(kMapysize) = al; +} + +void DreamGenContext::addalong() { + STACK_CHECK; + ah = 11; +addloop: + _cmp(es.byte(bx), 0); + if (!flags.z()) + goto gotalong; + _add(bx, 3); + _dec(ah); + if (!flags.z()) + goto addloop; + al = 0; + return; +gotalong: + al = 1; +} + +void DreamGenContext::addlength() { + STACK_CHECK; + ah = 10; +addloop2: + _cmp(es.byte(bx), 0); + if (!flags.z()) + goto gotlength; + _add(bx, 3*11); + _dec(ah); + if (!flags.z()) + goto addloop2; + al = 0; + return; +gotlength: + al = 1; +} + +void DreamGenContext::drawflags() { + STACK_CHECK; + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)); + al = data.byte(kMapy); + ah = 0; + cx = (66); + _mul(cx); + bl = data.byte(kMapx); + bh = 0; + _add(ax, bx); + si = (0); + _add(si, ax); + cx = 10; +_tmp28: + push(cx); + cx = 11; +_tmp28a: + ds = data.word(kMapdata); + _lodsb(); + ds = data.word(kBackdrop); + push(si); + push(ax); + ah = 0; + _add(ax, ax); + si = (0); + _add(si, ax); + _movsw(); + ax = pop(); + _stosb(); + si = pop(); + if (--cx) + goto _tmp28a; + _add(si, (66)-11); + cx = pop(); + if (--cx) + goto _tmp28; +} + +void DreamGenContext::eraseoldobs() { + STACK_CHECK; + _cmp(data.byte(kNewobs), 0); + if (flags.z()) + return /* (donterase) */; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768); + cx = 16; +oberase: + push(cx); + push(bx); + ax = es.word(bx+20); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto notthisob; + di = bx; + al = 255; + cx = (32); + _stosb(cx, true); +notthisob: + bx = pop(); + cx = pop(); + _add(bx, (32)); + if (--cx) + goto oberase; +} + +void DreamGenContext::showallobs() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)); + data.word(kListpos) = bx; + di = bx; + cx = 128*5; + al = 255; + _stosb(cx, true); + es = data.word(kSetframes); + data.word(kFrsegment) = es; + ax = (0); + data.word(kDataad) = ax; + ax = (0+2080); + data.word(kFramesad) = ax; + data.byte(kCurrentob) = 0; + ds = data.word(kSetdat); + si = 0; + cx = 128; +showobsloop: + push(cx); + push(si); + push(si); + _add(si, 58); + es = data.word(kSetdat); + getmapad(); + si = pop(); + _cmp(ch, 0); + if (flags.z()) + goto blankframe; + al = es.byte(si+18); + ah = 0; + data.word(kCurrentframe) = ax; + _cmp(al, 255); + if (flags.z()) + goto blankframe; + push(es); + push(si); + calcfrframe(); + finalframe(); + si = pop(); + es = pop(); + al = es.byte(si+18); + es.byte(si+17) = al; + _cmp(es.byte(si+8), 0); + if (!flags.z()) + goto animating; + _cmp(es.byte(si+5), 5); + if (flags.z()) + goto animating; + _cmp(es.byte(si+5), 6); + if (flags.z()) + goto animating; + ax = data.word(kCurrentframe); + ah = 0; + _add(di, data.word(kMapadx)); + _add(bx, data.word(kMapady)); + showframe(); + goto drawnsetob; +animating: + makebackob(); +drawnsetob: + si = data.word(kListpos); + es = data.word(kBuffers); + al = data.byte(kSavex); + ah = data.byte(kSavey); + es.word(si) = ax; + cx = ax; + ax = data.word(kSavesize); + _add(al, cl); + _add(ah, ch); + es.word(si+2) = ax; + al = data.byte(kCurrentob); + es.byte(si+4) = al; + _add(si, 5); + data.word(kListpos) = si; +blankframe: + _inc(data.byte(kCurrentob)); + si = pop(); + cx = pop(); + _add(si, 64); + _dec(cx); + if (flags.z()) + return /* (finishedsetobs) */; + goto showobsloop; +} + +void DreamGenContext::makebackob() { + STACK_CHECK; + _cmp(data.byte(kNewobs), 0); + if (flags.z()) + return /* (nomake) */; + al = es.byte(si+5); + ah = es.byte(si+8); + push(si); + push(ax); + push(si); + ax = data.word(kObjectx); + bx = data.word(kObjecty); + ah = bl; + si = ax; + cx = 49520; + dx = data.word(kSetframes); + di = (0); + makesprite(); + ax = pop(); + es.word(bx+20) = ax; + ax = pop(); + _cmp(al, 255); + if (!flags.z()) + goto usedpriority; + al = 0; +usedpriority: + es.byte(bx+23) = al; + es.byte(bx+30) = ah; + es.byte(bx+16) = 0; + es.byte(bx+18) = 0; + es.byte(bx+19) = 0; + si = pop(); +} + +void DreamGenContext::showallfree() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)); + data.word(kListpos) = bx; + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)); + cx = 80*5; + al = 255; + _stosb(cx, true); + es = data.word(kFreeframes); + data.word(kFrsegment) = es; + ax = (0); + data.word(kDataad) = ax; + ax = (0+2080); + data.word(kFramesad) = ax; + al = 0; + data.byte(kCurrentfree) = al; + ds = data.word(kFreedat); + si = 2; + cx = 0; +loop127: + push(cx); + push(si); + push(si); + es = data.word(kFreedat); + getmapad(); + si = pop(); + _cmp(ch, 0); + if (flags.z()) + goto over138; + al = data.byte(kCurrentfree); + ah = 0; + dx = ax; + _add(ax, ax); + _add(ax, dx); + data.word(kCurrentframe) = ax; + push(es); + push(si); + calcfrframe(); + es = data.word(kMapstore); + ds = data.word(kFrsegment); + finalframe(); + si = pop(); + es = pop(); + _cmp(cx, 0); + if (flags.z()) + goto over138; + ax = data.word(kCurrentframe); + ah = 0; + _add(di, data.word(kMapadx)); + _add(bx, data.word(kMapady)); + showframe(); + si = data.word(kListpos); + es = data.word(kBuffers); + al = data.byte(kSavex); + ah = data.byte(kSavey); + es.word(si) = ax; + cx = ax; + ax = data.word(kSavesize); + _add(al, cl); + _add(ah, ch); + es.word(si+2) = ax; + ax = pop(); + cx = pop(); + push(cx); + push(ax); + es.byte(si+4) = cl; + _add(si, 5); + data.word(kListpos) = si; +over138: + _inc(data.byte(kCurrentfree)); + si = pop(); + cx = pop(); + _add(si, 16); + _inc(cx); + _cmp(cx, 80); + if (flags.z()) + return /* (finfree) */; + goto loop127; +} + +void DreamGenContext::showallex() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)); + data.word(kListpos) = bx; + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)); + cx = 100*5; + al = 255; + _stosb(cx, true); + es = data.word(kExtras); + data.word(kFrsegment) = es; + ax = (0); + data.word(kDataad) = ax; + ax = (0+2080); + data.word(kFramesad) = ax; + data.byte(kCurrentex) = 0; + si = (0+2080+30000)+2; + cx = 0; +exloop: + push(cx); + push(si); + es = data.word(kExtras); + push(si); + ch = 0; + _cmp(es.byte(si), 255); + if (flags.z()) + goto notinroom; + al = es.byte(si-2); + _cmp(al, data.byte(kReallocation)); + if (!flags.z()) + goto notinroom; + getmapad(); +notinroom: + si = pop(); + _cmp(ch, 0); + if (flags.z()) + goto blankex; + al = data.byte(kCurrentex); + ah = 0; + dx = ax; + _add(ax, ax); + _add(ax, dx); + data.word(kCurrentframe) = ax; + push(es); + push(si); + calcfrframe(); + es = data.word(kMapstore); + ds = data.word(kFrsegment); + finalframe(); + si = pop(); + es = pop(); + _cmp(cx, 0); + if (flags.z()) + goto blankex; + ax = data.word(kCurrentframe); + ah = 0; + _add(di, data.word(kMapadx)); + _add(bx, data.word(kMapady)); + showframe(); + si = data.word(kListpos); + es = data.word(kBuffers); + al = data.byte(kSavex); + ah = data.byte(kSavey); + es.word(si) = ax; + cx = ax; + ax = data.word(kSavesize); + _add(al, cl); + _add(ah, ch); + es.word(si+2) = ax; + ax = pop(); + cx = pop(); + push(cx); + push(ax); + es.byte(si+4) = cl; + _add(si, 5); + data.word(kListpos) = si; +blankex: + _inc(data.byte(kCurrentex)); + si = pop(); + cx = pop(); + _add(si, 16); + _inc(cx); + _cmp(cx, 100); + if (flags.z()) + return /* (finex) */; + goto exloop; +} + +void DreamGenContext::calcfrframe() { + STACK_CHECK; + dx = data.word(kFrsegment); + ax = data.word(kFramesad); + push(ax); + cx = data.word(kDataad); + ax = data.word(kCurrentframe); + ds = dx; + bx = 6; + _mul(bx); + _add(ax, cx); + bx = ax; + cx = ds.word(bx); + ax = ds.word(bx+2); + dx = ds.word(bx+4); + bx = pop(); + push(dx); + _add(ax, bx); + data.word(kSavesource) = ax; + data.word(kSavesize) = cx; + ax = pop(); + push(ax); + ah = 0; + data.word(kOffsetx) = ax; + ax = pop(); + al = ah; + ah = 0; + data.word(kOffsety) = ax; + return; + ax = pop(); + cx = 0; + data.word(kSavesize) = cx; +} + +void DreamGenContext::finalframe() { + STACK_CHECK; + ax = data.word(kObjecty); + _add(ax, data.word(kOffsety)); + bx = data.word(kObjectx); + _add(bx, data.word(kOffsetx)); + data.byte(kSavex) = bl; + data.byte(kSavey) = al; + di = data.word(kObjectx); + bx = data.word(kObjecty); +} + +void DreamGenContext::adjustlen() { + STACK_CHECK; + ah = al; + _add(al, ch); + _cmp(al, 100); + if (flags.c()) + return /* (over242) */; + al = 224; + _sub(al, ch); + ch = al; +} + +void DreamGenContext::getmapad() { + STACK_CHECK; + getxad(); + _cmp(ch, 0); + if (flags.z()) + return /* (over146) */; + data.word(kObjectx) = ax; + getyad(); + _cmp(ch, 0); + if (flags.z()) + return /* (over146) */; + data.word(kObjecty) = ax; + ch = 1; +} + +void DreamGenContext::getxad() { + STACK_CHECK; + cl = es.byte(si); + _inc(si); + al = es.byte(si); + _inc(si); + ah = es.byte(si); + _inc(si); + _cmp(cl, 0); + if (!flags.z()) + goto over148; + _sub(al, data.byte(kMapx)); + if (flags.c()) + goto over148; + _cmp(al, 11); + if (!flags.c()) + goto over148; + cl = 4; + _shl(al, cl); + _or(al, ah); + ah = 0; + ch = 1; + return; +over148: + ch = 0; +} + +void DreamGenContext::getyad() { + STACK_CHECK; + al = es.byte(si); + _inc(si); + ah = es.byte(si); + _inc(si); + _sub(al, data.byte(kMapy)); + if (flags.c()) + goto over147; + _cmp(al, 10); + if (!flags.c()) + goto over147; + cl = 4; + _shl(al, cl); + _or(al, ah); + ah = 0; + ch = 1; + return; +over147: + ch = 0; +} + +void DreamGenContext::autolook() { + STACK_CHECK; + ax = data.word(kMousex); + _cmp(ax, data.word(kOldx)); + if (!flags.z()) + goto diffmouse; + ax = data.word(kMousey); + _cmp(ax, data.word(kOldy)); + if (!flags.z()) + goto diffmouse; + _dec(data.word(kLookcounter)); + _cmp(data.word(kLookcounter), 0); + if (!flags.z()) + return /* (noautolook) */; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + return /* (noautolook) */; + dolook(); + return; +diffmouse: + data.word(kLookcounter) = 1000; +} + +void DreamGenContext::look() { + STACK_CHECK; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kPointermode), 2); + if (flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 241); + if (flags.z()) + goto alreadylook; + data.byte(kCommandtype) = 241; + al = 25; + commandonly(); +alreadylook: + _cmp(data.word(kMousebutton), 1); + if (!flags.z()) + return /* (nolook) */; + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nolook) */; + dolook(); +} + +void DreamGenContext::dolook() { + STACK_CHECK; + createpanel(); + showicon(); + undertextline(); + worktoscreenm(); + data.byte(kCommandtype) = 255; + dumptextline(); + bl = data.byte(kRoomnum); + _and(bl, 31); + bh = 0; + _add(bx, bx); + es = data.word(kRoomdesc); + _add(bx, (0)); + si = es.word(bx); + _add(si, (0+(38*2))); + findnextcolon(); + di = 66; + _cmp(data.byte(kReallocation), 50); + if (flags.c()) + goto notdream3; + di = 40; +notdream3: + bx = 80; + dl = 241; + printslow(); + _cmp(al, 1); + if (flags.z()) + goto afterlook; + cx = 400; + hangonp(); +afterlook: + data.byte(kPointermode) = 0; + data.byte(kCommandtype) = 0; + redrawmainscrn(); + worktoscreenm(); +} + +void DreamGenContext::redrawmainscrn() { + STACK_CHECK; + data.word(kTimecount) = 0; + createpanel(); + data.byte(kNewobs) = 0; + drawfloor(); + printsprites(); + reelsonscreen(); + showicon(); + getunderzoom(); + undertextline(); + readmouse(); + data.byte(kCommandtype) = 255; +} + +void DreamGenContext::getback1() { + STACK_CHECK; + _cmp(data.byte(kPickup), 0); + if (flags.z()) + goto notgotobject; + blank(); + return; +notgotobject: + _cmp(data.byte(kCommandtype), 202); + if (flags.z()) + goto alreadyget; + data.byte(kCommandtype) = 202; + al = 26; + commandonly(); +alreadyget: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nogetback) */; + _and(ax, 1); + if (!flags.z()) + goto dogetback; + return; +dogetback: + data.byte(kGetback) = 1; + data.byte(kPickup) = 0; +} + +void DreamGenContext::talk() { + STACK_CHECK; + data.byte(kTalkpos) = 0; + data.byte(kInmaparea) = 0; + al = data.byte(kCommand); + data.byte(kCharacter) = al; + createpanel(); + showpanel(); + showman(); + showexit(); + undertextline(); + convicons(); + starttalk(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); +waittalk: + delpointer(); + readmouse(); + animpointer(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + data.byte(kGetback) = 0; + bx = 2660; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto waittalk; + bx = data.word(kPersondata); + es = cs; + _cmp(data.byte(kTalkpos), 4); + if (flags.c()) + goto notnexttalk; + al = es.byte(bx+7); + _or(al, 128); + es.byte(bx+7) = al; +notnexttalk: + redrawmainscrn(); + worktoscreenm(); + _cmp(data.byte(kSpeechloaded), 1); + if (!flags.z()) + return /* (nospeech) */; + cancelch1(); + data.byte(kVolumedirection) = -1; + data.byte(kVolumeto) = 0; +} + +void DreamGenContext::convicons() { + STACK_CHECK; + al = data.byte(kCharacter); + _and(al, 127); + getpersframe(); + di = 234; + bx = 2; + data.word(kCurrentframe) = ax; + findsource(); + ax = data.word(kCurrentframe); + _sub(ax, data.word(kTakeoff)); + ah = 0; + showframe(); +} + +void DreamGenContext::getpersframe() { + STACK_CHECK; + ah = 0; + _add(ax, ax); + bx = ax; + es = data.word(kPeople); + _add(bx, (0)); + ax = es.word(bx); +} + +void DreamGenContext::starttalk() { + STACK_CHECK; + data.byte(kTalkmode) = 0; + al = data.byte(kCharacter); + _and(al, 127); + getpersontext(); + data.word(kCharshift) = 91+91; + di = 66; + bx = 64; + dl = 241; + al = 0; + ah = 79; + printdirect(); + data.word(kCharshift) = 0; + di = 66; + bx = 80; + dl = 241; + al = 0; + ah = 0; + printdirect(); + data.byte(kSpeechloaded) = 0; + al = data.byte(kCharacter); + _and(al, 127); + ah = 0; + cx = 64; + _mul(cx); + cl = 'C'; + dl = 'R'; + dh = data.byte(kReallocation); + loadspeech(); + _cmp(data.byte(kSpeechloaded), 1); + if (!flags.z()) + return /* (nospeech1) */; + data.byte(kVolumedirection) = 1; + data.byte(kVolumeto) = 6; + al = 50+12; + playchannel1(); +} + +void DreamGenContext::getpersontext() { + STACK_CHECK; + ah = 0; + cx = 64*2; + _mul(cx); + si = ax; + es = data.word(kPeople); + _add(si, (0+24)); + cx = (0+24+(1026*2)); + ax = es.word(si); + _add(ax, cx); + si = ax; +} + +void DreamGenContext::moretalk() { + STACK_CHECK; + _cmp(data.byte(kTalkmode), 0); + if (flags.z()) + goto canmore; + redes(); + return; +canmore: + _cmp(data.byte(kCommandtype), 215); + if (flags.z()) + goto alreadymore; + data.byte(kCommandtype) = 215; + al = 49; + commandonly(); +alreadymore: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nomore) */; + _and(ax, 1); + if (!flags.z()) + goto domoretalk; + return; +domoretalk: + data.byte(kTalkmode) = 2; + data.byte(kTalkpos) = 4; + _cmp(data.byte(kCharacter), 100); + if (flags.c()) + goto notsecondpart; + data.byte(kTalkpos) = 48; +notsecondpart: + dosometalk(); +} + +void DreamGenContext::dosometalk() { + STACK_CHECK; +dospeech: + al = data.byte(kTalkpos); + al = data.byte(kCharacter); + _and(al, 127); + ah = 0; + cx = 64; + _mul(cx); + cx = ax; + al = data.byte(kTalkpos); + ah = 0; + _add(ax, cx); + _add(ax, ax); + si = ax; + es = data.word(kPeople); + _add(si, (0+24)); + cx = (0+24+(1026*2)); + ax = es.word(si); + _add(ax, cx); + si = ax; + _cmp(es.byte(si), 0); + if (flags.z()) + goto endheartalk; + push(es); + push(si); + createpanel(); + showpanel(); + showman(); + showexit(); + convicons(); + si = pop(); + es = pop(); + di = 164; + bx = 64; + dl = 144; + al = 0; + ah = 0; + printdirect(); + al = data.byte(kCharacter); + _and(al, 127); + ah = 0; + cx = 64; + _mul(cx); + cl = data.byte(kTalkpos); + ch = 0; + _add(ax, cx); + cl = 'C'; + dl = 'R'; + dh = data.byte(kReallocation); + loadspeech(); + _cmp(data.byte(kSpeechloaded), 0); + if (flags.z()) + goto noplay1; + al = 62; + playchannel1(); +noplay1: + data.byte(kPointermode) = 3; + worktoscreenm(); + cx = 180; + hangonpq(); + if (!flags.c()) + goto _tmp1; + return; +_tmp1: + _inc(data.byte(kTalkpos)); + al = data.byte(kTalkpos); + al = data.byte(kCharacter); + _and(al, 127); + ah = 0; + cx = 64; + _mul(cx); + cx = ax; + al = data.byte(kTalkpos); + ah = 0; + _add(ax, cx); + _add(ax, ax); + si = ax; + es = data.word(kPeople); + _add(si, (0+24)); + cx = (0+24+(1026*2)); + ax = es.word(si); + _add(ax, cx); + si = ax; + _cmp(es.byte(si), 0); + if (flags.z()) + goto endheartalk; + _cmp(es.byte(si), ':'); + if (flags.z()) + goto skiptalk2; + _cmp(es.byte(si), 32); + if (flags.z()) + goto skiptalk2; + push(es); + push(si); + createpanel(); + showpanel(); + showman(); + showexit(); + convicons(); + si = pop(); + es = pop(); + di = 48; + bx = 128; + dl = 144; + al = 0; + ah = 0; + printdirect(); + al = data.byte(kCharacter); + _and(al, 127); + ah = 0; + cx = 64; + _mul(cx); + cl = data.byte(kTalkpos); + ch = 0; + _add(ax, cx); + cl = 'C'; + dl = 'R'; + dh = data.byte(kReallocation); + loadspeech(); + _cmp(data.byte(kSpeechloaded), 0); + if (flags.z()) + goto noplay2; + al = 62; + playchannel1(); +noplay2: + data.byte(kPointermode) = 3; + worktoscreenm(); + cx = 180; + hangonpq(); + if (!flags.c()) + goto skiptalk2; + return; +skiptalk2: + _inc(data.byte(kTalkpos)); + goto dospeech; +endheartalk: + data.byte(kPointermode) = 0; +} + +void DreamGenContext::hangonpq() { + STACK_CHECK; + data.byte(kGetback) = 0; + bx = 0; +hangloopq: + push(cx); + push(bx); + delpointer(); + readmouse(); + animpointer(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + bx = 2692; + checkcoords(); + bx = pop(); + cx = pop(); + _cmp(data.byte(kGetback), 1); + if (flags.z()) + goto quitconv; + _cmp(data.byte(kSpeechloaded), 1); + if (!flags.z()) + goto notspeaking; + _cmp(data.byte(kCh1playing), 255); + if (!flags.z()) + goto notspeaking; + _inc(bx); + _cmp(bx, 40); + if (flags.z()) + goto finishconv; +notspeaking: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + goto hangloopq; + _cmp(data.word(kOldbutton), 0); + if (!flags.z()) + goto hangloopq; +finishconv: + delpointer(); + data.byte(kPointermode) = 0; + flags._c = false; + return; +quitconv: + delpointer(); + data.byte(kPointermode) = 0; + cancelch1(); + flags._c = true; + } + +void DreamGenContext::redes() { + STACK_CHECK; + _cmp(data.byte(kCh1playing), 255); + if (!flags.z()) + goto cantredes; + _cmp(data.byte(kTalkmode), 2); + if (flags.z()) + goto canredes; +cantredes: + blank(); + return; +canredes: + _cmp(data.byte(kCommandtype), 217); + if (flags.z()) + goto alreadyreds; + data.byte(kCommandtype) = 217; + al = 50; + commandonly(); +alreadyreds: + ax = data.word(kMousebutton); + _and(ax, 1); + if (!flags.z()) + goto doredes; + return; +doredes: + delpointer(); + createpanel(); + showpanel(); + showman(); + showexit(); + convicons(); + starttalk(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::newplace() { + STACK_CHECK; + _cmp(data.byte(kNeedtotravel), 1); + if (flags.z()) + goto istravel; + _cmp(data.byte(kAutolocation), -1); + if (!flags.z()) + goto isautoloc; + return; +isautoloc: + al = data.byte(kAutolocation); + data.byte(kNewlocation) = al; + data.byte(kAutolocation) = -1; + return; +istravel: + data.byte(kNeedtotravel) = 0; + selectlocation(); +} + +void DreamGenContext::selectlocation() { + STACK_CHECK; + data.byte(kInmaparea) = 0; + clearbeforeload(); + data.byte(kGetback) = 0; + data.byte(kPointerframe) = 22; + readcitypic(); + showcity(); + getridoftemp(); + readdesticon(); + loadtraveltext(); + showpanel(); + showman(); + showarrows(); + showexit(); + locationpic(); + undertextline(); + data.byte(kCommandtype) = 255; + readmouse(); + data.byte(kPointerframe) = 0; + showpointer(); + worktoscreen(); + al = 9; + ah = 255; + playchannel0(); + data.byte(kNewlocation) = 255; +select: + delpointer(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + _cmp(data.byte(kGetback), 1); + if (flags.z()) + goto quittravel; + bx = 2714; + checkcoords(); + _cmp(data.byte(kNewlocation), 255); + if (flags.z()) + goto select; + al = data.byte(kNewlocation); + _cmp(al, data.byte(kLocation)); + if (flags.z()) + goto quittravel; + getridoftemp(); + getridoftemp2(); + getridoftemp3(); + es = data.word(kTraveltext); + deallocatemem(); + return; +quittravel: + al = data.byte(kReallocation); + data.byte(kNewlocation) = al; + data.byte(kGetback) = 0; + getridoftemp(); + getridoftemp2(); + getridoftemp3(); + es = data.word(kTraveltext); + deallocatemem(); +} + +void DreamGenContext::showcity() { + STACK_CHECK; + clearwork(); + ds = data.word(kTempgraphics); + di = 57; + bx = 32; + al = 0; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = 120+57; + bx = 32; + al = 1; + ah = 0; + showframe(); +} + +void DreamGenContext::lookatplace() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 224); + if (flags.z()) + goto alreadyinfo; + data.byte(kCommandtype) = 224; + al = 27; + commandonly(); +alreadyinfo: + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return /* (noinfo) */; + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (noinfo) */; + bl = data.byte(kDestpos); + _cmp(bl, 15); + if (!flags.c()) + return /* (noinfo) */; + push(bx); + delpointer(); + deltextline(); + getundercentre(); + ds = data.word(kTempgraphics3); + al = 0; + ah = 0; + di = 60; + bx = 72; + showframe(); + al = 4; + ah = 0; + di = 60; + bx = 72+55; + showframe(); + bx = pop(); + bh = 0; + _add(bx, bx); + es = data.word(kTraveltext); + si = es.word(bx); + _add(si, (66*2)); + findnextcolon(); + di = 63; + bx = 84; + dl = 191; + al = 0; + ah = 0; + printdirect(); + worktoscreenm(); + cx = 500; + hangonp(); + data.byte(kPointermode) = 0; + data.byte(kPointerframe) = 0; + putundercentre(); + worktoscreenm(); +} + +void DreamGenContext::getundercentre() { + STACK_CHECK; + di = 58; + bx = 72; + ds = data.word(kMapstore); + si = 0; + cl = 254; + ch = 110; + multiget(); +} + +void DreamGenContext::putundercentre() { + STACK_CHECK; + di = 58; + bx = 72; + ds = data.word(kMapstore); + si = 0; + cl = 254; + ch = 110; + multiput(); +} + +void DreamGenContext::locationpic() { + STACK_CHECK; + getdestinfo(); + al = es.byte(si); + push(es); + push(si); + di = 0; + _cmp(al, 6); + if (!flags.c()) + goto secondlot; + ds = data.word(kTempgraphics); + _add(al, 4); + goto gotgraphic; +secondlot: + _sub(al, 6); + ds = data.word(kTempgraphics2); +gotgraphic: + _add(di, 104); + bx = 138+14; + ah = 0; + showframe(); + si = pop(); + es = pop(); + al = data.byte(kDestpos); + _cmp(al, data.byte(kReallocation)); + if (!flags.z()) + goto notinthisone; + al = 3; + di = 104; + bx = 140+14; + ds = data.word(kTempgraphics); + ah = 0; + showframe(); +notinthisone: + bl = data.byte(kDestpos); + bh = 0; + _add(bx, bx); + es = data.word(kTraveltext); + si = es.word(bx); + _add(si, (66*2)); + di = 50; + bx = 20; + dl = 241; + al = 0; + ah = 0; + printdirect(); +} + +void DreamGenContext::getdestinfo() { + STACK_CHECK; + al = data.byte(kDestpos); + ah = 0; + push(ax); + dx = data; + es = dx; + si = 8011; + _add(si, ax); + cl = es.byte(si); + ax = pop(); + push(cx); + dx = data; + es = dx; + si = 8027; + _add(si, ax); + ax = pop(); +} + +void DreamGenContext::showarrows() { + STACK_CHECK; + di = 116-12; + bx = 16; + ds = data.word(kTempgraphics); + al = 0; + ah = 0; + showframe(); + di = 226+12; + bx = 16; + ds = data.word(kTempgraphics); + al = 1; + ah = 0; + showframe(); + di = 280; + bx = 14; + ds = data.word(kTempgraphics); + al = 2; + ah = 0; + showframe(); +} + +void DreamGenContext::nextdest() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 218); + if (flags.z()) + goto alreadydu; + data.byte(kCommandtype) = 218; + al = 28; + commandonly(); +alreadydu: + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return /* (nodu) */; + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nodu) */; +searchdestup: + _inc(data.byte(kDestpos)); + _cmp(data.byte(kDestpos), 15); + if (!flags.z()) + goto notlastdest; + data.byte(kDestpos) = 0; +notlastdest: + getdestinfo(); + _cmp(al, 0); + if (flags.z()) + goto searchdestup; + data.byte(kNewtextline) = 1; + deltextline(); + delpointer(); + showpanel(); + showman(); + showarrows(); + locationpic(); + undertextline(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::lastdest() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 219); + if (flags.z()) + goto alreadydd; + data.byte(kCommandtype) = 219; + al = 29; + commandonly(); +alreadydd: + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return /* (nodd) */; + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nodd) */; +searchdestdown: + _dec(data.byte(kDestpos)); + _cmp(data.byte(kDestpos), -1); + if (!flags.z()) + goto notfirstdest; + data.byte(kDestpos) = 15; +notfirstdest: + getdestinfo(); + _cmp(al, 0); + if (flags.z()) + goto searchdestdown; + data.byte(kNewtextline) = 1; + deltextline(); + delpointer(); + showpanel(); + showman(); + showarrows(); + locationpic(); + undertextline(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::destselect() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 222); + if (flags.z()) + goto alreadytrav; + data.byte(kCommandtype) = 222; + al = 30; + commandonly(); +alreadytrav: + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return /* (notrav) */; + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notrav) */; + getdestinfo(); + al = data.byte(kDestpos); + data.byte(kNewlocation) = al; +} + +void DreamGenContext::getlocation() { + STACK_CHECK; + ah = 0; + bx = ax; + dx = data; + es = dx; + _add(bx, 8011); + al = es.byte(bx); +} + +void DreamGenContext::setlocation() { + STACK_CHECK; + ah = 0; + bx = ax; + dx = data; + es = dx; + _add(bx, 8011); + es.byte(bx) = 1; +} + +void DreamGenContext::resetlocation() { + STACK_CHECK; + push(ax); + _cmp(al, 5); + if (!flags.z()) + goto notdelhotel; + purgealocation(); + al = 21; + purgealocation(); + al = 22; + purgealocation(); + al = 27; + purgealocation(); + goto clearedlocations; +notdelhotel: + _cmp(al, 8); + if (!flags.z()) + goto notdeltvstud; + purgealocation(); + al = 28; + purgealocation(); + goto clearedlocations; +notdeltvstud: + _cmp(al, 6); + if (!flags.z()) + goto notdelsarters; + purgealocation(); + al = 20; + purgealocation(); + al = 25; + purgealocation(); + goto clearedlocations; +notdelsarters: + _cmp(al, 13); + if (!flags.z()) + goto notdelboathouse; + purgealocation(); + al = 29; + purgealocation(); + goto clearedlocations; +notdelboathouse: +clearedlocations: + ax = pop(); + ah = 0; + bx = ax; + dx = data; + es = dx; + _add(bx, 8011); + es.byte(bx) = 0; +} + +void DreamGenContext::readdesticon() { + STACK_CHECK; + dx = 2013; + loadintotemp(); + dx = 2026; + loadintotemp2(); + dx = 1961; + loadintotemp3(); +} + +void DreamGenContext::readcitypic() { + STACK_CHECK; + dx = 2000; + loadintotemp(); +} + +void DreamGenContext::usemon() { + STACK_CHECK; + data.byte(kLasttrigger) = 0; + es = cs; + di = 2970+1; + cx = 12; + al = 32; + _stosb(cx, true); + es = cs; + di = 2942+1; + cx = 12; + al = 32; + _stosb(cx, true); + es = cs; + di = 2836; + es.byte(di) = 1; + _add(di, 26); + cx = 3; +keyloop: + es.byte(di) = 0; + _add(di, 26); + if (--cx) + goto keyloop; + createpanel(); + showpanel(); + showicon(); + drawfloor(); + getridofall(); + dx = 1974; + loadintotemp(); + loadpersonal(); + loadnews(); + loadcart(); + dx = 1870; + loadtempcharset(); + printoutermon(); + initialmoncols(); + printlogo(); + worktoscreen(); + turnonpower(); + fadeupyellows(); + fadeupmonfirst(); + data.word(kMonadx) = 76; + data.word(kMonady) = 141; + al = 1; + monmessage(); + cx = 120; + hangoncurs(); + al = 2; + monmessage(); + cx = 60; + randomaccess(); + al = 3; + monmessage(); + cx = 100; + hangoncurs(); + printlogo(); + scrollmonitor(); + data.word(kBufferin) = 0; + data.word(kBufferout) = 0; +moreinput: + di = data.word(kMonadx); + bx = data.word(kMonady); + push(di); + push(bx); + input(); + bx = pop(); + di = pop(); + data.word(kMonadx) = di; + data.word(kMonady) = bx; + execcommand(); + _cmp(al, 0); + if (flags.z()) + goto moreinput; + getridoftemp(); + getridoftempcharset(); + es = data.word(kTextfile1); + deallocatemem(); + es = data.word(kTextfile2); + deallocatemem(); + es = data.word(kTextfile3); + deallocatemem(); + data.byte(kGetback) = 1; + al = 26; + playchannel1(); + data.byte(kManisoffscreen) = 0; + restoreall(); + redrawmainscrn(); + worktoscreenm(); +} + +void DreamGenContext::printoutermon() { + STACK_CHECK; + di = 40; + bx = 32; + ds = data.word(kTempgraphics); + al = 1; + ah = 0; + showframe(); + di = 264; + bx = 32; + ds = data.word(kTempgraphics); + al = 2; + ah = 0; + showframe(); + di = 40; + bx = 12; + ds = data.word(kTempgraphics); + al = 3; + ah = 0; + showframe(); + di = 40; + bx = 164; + ds = data.word(kTempgraphics); + al = 4; + ah = 0; + showframe(); +} + +void DreamGenContext::loadpersonal() { + STACK_CHECK; + al = data.byte(kLocation); + dx = 2052; + _cmp(al, 0); + if (flags.z()) + goto foundpersonal; + _cmp(al, 42); + if (flags.z()) + goto foundpersonal; + dx = 2065; + _cmp(al, 2); + if (flags.z()) + goto foundpersonal; +foundpersonal: + openfile(); + readheader(); + bx = es.word(di); + push(bx); + cl = 4; + _shr(bx, cl); + allocatemem(); + data.word(kTextfile1) = ax; + ds = ax; + cx = pop(); + dx = 0; + readfromfile(); + closefile(); +} + +void DreamGenContext::loadnews() { + STACK_CHECK; + al = data.byte(kNewsitem); + dx = 2078; + _cmp(al, 0); + if (flags.z()) + goto foundnews; + dx = 2091; + _cmp(al, 1); + if (flags.z()) + goto foundnews; + dx = 2104; + _cmp(al, 2); + if (flags.z()) + goto foundnews; + dx = 2117; +foundnews: + openfile(); + readheader(); + bx = es.word(di); + push(bx); + cl = 4; + _shr(bx, cl); + allocatemem(); + data.word(kTextfile2) = ax; + ds = ax; + cx = pop(); + dx = 0; + readfromfile(); + closefile(); +} + +void DreamGenContext::loadcart() { + STACK_CHECK; + lookininterface(); + dx = 2130; + _cmp(al, 0); + if (flags.z()) + goto gotcart; + dx = 2143; + _cmp(al, 1); + if (flags.z()) + goto gotcart; + dx = 2156; + _cmp(al, 2); + if (flags.z()) + goto gotcart; + dx = 2169; + _cmp(al, 3); + if (flags.z()) + goto gotcart; + dx = 2182; +gotcart: + openfile(); + readheader(); + bx = es.word(di); + push(bx); + cl = 4; + _shr(bx, cl); + allocatemem(); + data.word(kTextfile3) = ax; + ds = ax; + cx = pop(); + dx = 0; + readfromfile(); + closefile(); +} + +void DreamGenContext::lookininterface() { + STACK_CHECK; + al = 'I'; + ah = 'N'; + cl = 'T'; + ch = 'F'; + findsetobject(); + ah = 1; + checkinside(); + _cmp(cl, (114)); + if (flags.z()) + goto emptyinterface; + al = es.byte(bx+15); + _inc(al); + return; +emptyinterface: + al = 0; +} + +void DreamGenContext::turnonpower() { + STACK_CHECK; + cx = 3; +powerloop: + push(cx); + powerlighton(); + cx = 30; + hangon(); + powerlightoff(); + cx = 30; + hangon(); + cx = pop(); + if (--cx) + goto powerloop; + powerlighton(); +} + +void DreamGenContext::randomaccess() { + STACK_CHECK; +accessloop: + push(cx); + vsync(); + vsync(); + randomnum1(); + _and(al, 15); + _cmp(al, 10); + if (flags.c()) + goto off; + accesslighton(); + goto chosenaccess; +off: + accesslightoff(); +chosenaccess: + cx = pop(); + if (--cx) + goto accessloop; + accesslightoff(); +} + +void DreamGenContext::powerlighton() { + STACK_CHECK; + di = 257+4; + bx = 182; + ds = data.word(kTempgraphics); + al = 6; + ah = 0; + push(di); + push(bx); + showframe(); + bx = pop(); + di = pop(); + cl = 12; + ch = 8; + multidump(); +} + +void DreamGenContext::powerlightoff() { + STACK_CHECK; + di = 257+4; + bx = 182; + ds = data.word(kTempgraphics); + al = 5; + ah = 0; + push(di); + push(bx); + showframe(); + bx = pop(); + di = pop(); + cl = 12; + ch = 8; + multidump(); +} + +void DreamGenContext::accesslighton() { + STACK_CHECK; + di = 74; + bx = 182; + ds = data.word(kTempgraphics); + al = 8; + ah = 0; + push(di); + push(bx); + showframe(); + bx = pop(); + di = pop(); + cl = 12; + ch = 8; + multidump(); +} + +void DreamGenContext::accesslightoff() { + STACK_CHECK; + di = 74; + bx = 182; + ds = data.word(kTempgraphics); + al = 7; + ah = 0; + push(di); + push(bx); + showframe(); + bx = pop(); + di = pop(); + cl = 12; + ch = 8; + multidump(); +} + +void DreamGenContext::locklighton() { + STACK_CHECK; + di = 56; + bx = 182; + ds = data.word(kTempgraphics); + al = 10; + ah = 0; + push(di); + push(bx); + showframe(); + bx = pop(); + di = pop(); + cl = 12; + ch = 8; + multidump(); +} + +void DreamGenContext::locklightoff() { + STACK_CHECK; + di = 56; + bx = 182; + ds = data.word(kTempgraphics); + al = 9; + ah = 0; + push(di); + push(bx); + showframe(); + bx = pop(); + di = pop(); + cl = 12; + ch = 8; + multidump(); +} + +void DreamGenContext::input() { + STACK_CHECK; + es = cs; + di = 8045; + cx = 64; + al = 0; + _stosb(cx, true); + data.word(kCurpos) = 0; + al = '>'; + di = data.word(kMonadx); + bx = data.word(kMonady); + ds = data.word(kTempcharset); + ah = 0; + printchar(); + di = data.word(kMonadx); + bx = data.word(kMonady); + cl = 6; + ch = 8; + multidump(); + _add(data.word(kMonadx), 6); + ax = data.word(kMonadx); + data.word(kCurslocx) = ax; + ax = data.word(kMonady); + data.word(kCurslocy) = ax; +waitkey: + printcurs(); + vsync(); + delcurs(); + readkey(); + al = data.byte(kCurrentkey); + _cmp(al, 0); + if (flags.z()) + goto waitkey; + _cmp(al, 13); + if (flags.z()) + return /* (endofinput) */; + _cmp(al, 8); + if (!flags.z()) + goto notdel; + _cmp(data.word(kCurpos), 0); + if (flags.z()) + goto waitkey; + delchar(); + goto waitkey; +notdel: + _cmp(data.word(kCurpos), 28); + if (flags.z()) + goto waitkey; + _cmp(data.byte(kCurrentkey), 32); + if (!flags.z()) + goto notleadingspace; + _cmp(data.word(kCurpos), 0); + if (flags.z()) + goto waitkey; +notleadingspace: + makecaps(); + es = cs; + si = data.word(kCurpos); + _add(si, si); + _add(si, 8045); + es.byte(si) = al; + _cmp(al, 'Z'+1); + if (!flags.c()) + goto waitkey; + push(ax); + push(es); + push(si); + di = data.word(kMonadx); + bx = data.word(kMonady); + ds = data.word(kMapstore); + ax = data.word(kCurpos); + _xchg(al, ah); + si = ax; + cl = 8; + ch = 8; + multiget(); + si = pop(); + es = pop(); + ax = pop(); + push(es); + push(si); + di = data.word(kMonadx); + bx = data.word(kMonady); + ds = data.word(kTempcharset); + ah = 0; + printchar(); + si = pop(); + es = pop(); + es.byte(si+1) = cl; + ch = 0; + _add(data.word(kMonadx), cx); + _inc(data.word(kCurpos)); + _add(data.word(kCurslocx), cx); + goto waitkey; +} + +void DreamGenContext::makecaps() { + STACK_CHECK; + _cmp(al, 'a'); + if (flags.c()) + return /* (notupperc) */; + _sub(al, 32); +} + +void DreamGenContext::delchar() { + STACK_CHECK; + _dec(data.word(kCurpos)); + si = data.word(kCurpos); + _add(si, si); + es = cs; + _add(si, 8045); + es.byte(si) = 0; + al = es.byte(si+1); + ah = 0; + _sub(data.word(kMonadx), ax); + _sub(data.word(kCurslocx), ax); + di = data.word(kMonadx); + bx = data.word(kMonady); + ds = data.word(kMapstore); + ax = data.word(kCurpos); + _xchg(al, ah); + si = ax; + cl = 8; + ch = 8; + multiput(); + di = data.word(kMonadx); + bx = data.word(kMonady); + cl = al; + ch = 8; + multidump(); +} + +void DreamGenContext::execcommand() { + STACK_CHECK; + es = cs; + bx = 2776; + ds = cs; + si = 8045; + al = ds.byte(si); + _cmp(al, 0); + if (!flags.z()) + goto notblankinp; + scrollmonitor(); + return; +notblankinp: + cl = 0; +comloop: + push(bx); + push(si); +comloop2: + al = ds.byte(si); + _add(si, 2); + ah = es.byte(bx); + _inc(bx); + _cmp(ah, 32); + if (flags.z()) + goto foundcom; + _cmp(al, ah); + if (flags.z()) + goto comloop2; + si = pop(); + bx = pop(); + _add(bx, 10); + _inc(cl); + _cmp(cl, 6); + if (!flags.z()) + goto comloop; + neterror(); + al = 0; + return; +foundcom: + si = pop(); + bx = pop(); + _cmp(cl, 1); + if (flags.z()) + goto testcom; + _cmp(cl, 2); + if (flags.z()) + goto directory; + _cmp(cl, 3); + if (flags.z()) + goto accesscom; + _cmp(cl, 4); + if (flags.z()) + goto signoncom; + _cmp(cl, 5); + if (flags.z()) + goto keyscom; + goto quitcom; +directory: + dircom(); + al = 0; + return; +signoncom: + signon(); + al = 0; + return; +accesscom: + read(); + al = 0; + return; +keyscom: + showkeys(); + al = 0; + return; +testcom: + al = 6; + monmessage(); + al = 0; + return; +quitcom: + al = 1; +} + +void DreamGenContext::neterror() { + STACK_CHECK; + al = 5; + monmessage(); + scrollmonitor(); +} + +void DreamGenContext::dircom() { + STACK_CHECK; + cx = 30; + randomaccess(); + parser(); + _cmp(es.byte(di+1), 0); + if (flags.z()) + goto dirroot; + dirfile(); + return; +dirroot: + data.byte(kLogonum) = 0; + ds = cs; + si = 2956; + _inc(si); + es = cs; + di = 2970; + _inc(di); + cx = 12; + _movsb(cx, true); + monitorlogo(); + scrollmonitor(); + al = 9; + monmessage(); + es = data.word(kTextfile1); + searchforfiles(); + es = data.word(kTextfile2); + searchforfiles(); + es = data.word(kTextfile3); + searchforfiles(); + scrollmonitor(); +} + +void DreamGenContext::searchforfiles() { + STACK_CHECK; + bx = (66*2); +directloop1: + al = es.byte(bx); + _inc(bx); + _cmp(al, '*'); + if (flags.z()) + return /* (endofdir) */; + _cmp(al, 34); + if (!flags.z()) + goto directloop1; + monprint(); + goto directloop1; +} + +void DreamGenContext::signon() { + STACK_CHECK; + parser(); + _inc(di); + ds = cs; + si = 2836; + cx = 4; +signonloop: + push(cx); + push(si); + push(di); + _add(si, 14); + cx = 11; +signonloop2: + _lodsb(); + _cmp(al, 32); + if (flags.z()) + goto foundsign; + makecaps(); + ah = es.byte(di); + _inc(di); + _cmp(al, ah); + if (!flags.z()) + goto nomatch; + if (--cx) + goto signonloop2; +nomatch: + di = pop(); + si = pop(); + cx = pop(); + _add(si, 26); + if (--cx) + goto signonloop; + al = 13; + monmessage(); + return; +foundsign: + di = pop(); + si = pop(); + cx = pop(); + bx = si; + es = ds; + _cmp(es.byte(bx), 0); + if (flags.z()) + goto notyetassigned; + al = 17; + monmessage(); + return; +notyetassigned: + push(es); + push(bx); + scrollmonitor(); + al = 15; + monmessage(); + di = data.word(kMonadx); + bx = data.word(kMonady); + push(di); + push(bx); + input(); + bx = pop(); + di = pop(); + data.word(kMonadx) = di; + data.word(kMonady) = bx; + bx = pop(); + es = pop(); + push(es); + push(bx); + _add(bx, 2); + ds = cs; + si = 8045; +checkpass: + _lodsw(); + ah = es.byte(bx); + _inc(bx); + _cmp(ah, 32); + if (flags.z()) + goto passpassed; + _cmp(al, ah); + if (flags.z()) + goto checkpass; + bx = pop(); + es = pop(); + scrollmonitor(); + al = 16; + monmessage(); + return; +passpassed: + al = 14; + monmessage(); + bx = pop(); + es = pop(); + push(es); + push(bx); + _add(bx, 14); + monprint(); + scrollmonitor(); + bx = pop(); + es = pop(); + es.byte(bx) = 1; +} + +void DreamGenContext::showkeys() { + STACK_CHECK; + cx = 10; + randomaccess(); + scrollmonitor(); + al = 18; + monmessage(); + es = cs; + bx = 2836; + cx = 4; +keysloop: + push(cx); + push(bx); + _cmp(es.byte(bx), 0); + if (flags.z()) + goto notheld; + _add(bx, 14); + monprint(); +notheld: + bx = pop(); + cx = pop(); + _add(bx, 26); + if (--cx) + goto keysloop; + scrollmonitor(); +} + +void DreamGenContext::read() { + STACK_CHECK; + cx = 40; + randomaccess(); + parser(); + _cmp(es.byte(di+1), 0); + if (!flags.z()) + goto okcom; + neterror(); + return; +okcom: + es = cs; + di = 2970; + ax = data.word(kTextfile1); + data.word(kMonsource) = ax; + ds = ax; + si = (66*2); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto foundfile2; + ax = data.word(kTextfile2); + data.word(kMonsource) = ax; + ds = ax; + si = (66*2); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto foundfile2; + ax = data.word(kTextfile3); + data.word(kMonsource) = ax; + ds = ax; + si = (66*2); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto foundfile2; + al = 7; + monmessage(); + return; +foundfile2: + getkeyandlogo(); + _cmp(al, 0); + if (flags.z()) + goto keyok1; + return; +keyok1: + es = cs; + di = 2942; + ds = data.word(kMonsource); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto findtopictext; + al = data.byte(kOldlogonum); + data.byte(kLogonum) = al; + al = 11; + monmessage(); + return; +findtopictext: + _inc(bx); + push(es); + push(bx); + monitorlogo(); + scrollmonitor(); + bx = pop(); + es = pop(); +moretopic: + monprint(); + al = es.byte(bx); + _cmp(al, 34); + if (flags.z()) + goto endoftopic; + _cmp(al, '='); + if (flags.z()) + goto endoftopic; + _cmp(al, '*'); + if (flags.z()) + goto endoftopic; + push(es); + push(bx); + processtrigger(); + cx = 24; + randomaccess(); + bx = pop(); + es = pop(); + goto moretopic; +endoftopic: + scrollmonitor(); +} + +void DreamGenContext::dirfile() { + STACK_CHECK; + al = 34; + es.byte(di) = al; + push(es); + push(di); + ds = data.word(kTextfile1); + si = (66*2); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto foundfile; + di = pop(); + es = pop(); + push(es); + push(di); + ds = data.word(kTextfile2); + si = (66*2); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto foundfile; + di = pop(); + es = pop(); + push(es); + push(di); + ds = data.word(kTextfile3); + si = (66*2); + searchforstring(); + _cmp(al, 0); + if (flags.z()) + goto foundfile; + di = pop(); + es = pop(); + al = 7; + monmessage(); + return; +foundfile: + ax = pop(); + ax = pop(); + getkeyandlogo(); + _cmp(al, 0); + if (flags.z()) + goto keyok2; + return; +keyok2: + push(es); + push(bx); + ds = cs; + si = 2942+1; + es = cs; + di = 2970+1; + cx = 12; + _movsb(cx, true); + monitorlogo(); + scrollmonitor(); + al = 10; + monmessage(); + bx = pop(); + es = pop(); +directloop2: + al = es.byte(bx); + _inc(bx); + _cmp(al, 34); + if (flags.z()) + goto endofdir2; + _cmp(al, '*'); + if (flags.z()) + goto endofdir2; + _cmp(al, '='); + if (!flags.z()) + goto directloop2; + monprint(); + goto directloop2; +endofdir2: + scrollmonitor(); +} + +void DreamGenContext::getkeyandlogo() { + STACK_CHECK; + _inc(bx); + al = es.byte(bx); + _sub(al, 48); + data.byte(kNewlogonum) = al; + _add(bx, 2); + al = es.byte(bx); + _sub(al, 48); + data.byte(kKeynum) = al; + _inc(bx); + push(es); + push(bx); + al = data.byte(kKeynum); + ah = 0; + cx = 26; + _mul(cx); + es = cs; + bx = 2836; + _add(bx, ax); + al = es.byte(bx); + _cmp(al, 1); + if (flags.z()) + goto keyok; + push(bx); + push(es); + al = 12; + monmessage(); + es = pop(); + bx = pop(); + _add(bx, 14); + monprint(); + scrollmonitor(); + bx = pop(); + es = pop(); + al = 1; + return; +keyok: + bx = pop(); + es = pop(); + al = data.byte(kNewlogonum); + data.byte(kLogonum) = al; + al = 0; +} + +void DreamGenContext::searchforstring() { + STACK_CHECK; + dl = es.byte(di); + cx = di; +restartlook: + di = cx; + bx = si; + dh = 0; +keeplooking: + _lodsb(); + makecaps(); + _cmp(al, '*'); + if (flags.z()) + goto notfound; + _cmp(dl, '='); + if (!flags.z()) + goto nofindingtopic; + _cmp(al, 34); + if (flags.z()) + goto notfound; +nofindingtopic: + ah = es.byte(di); + _cmp(al, dl); + if (!flags.z()) + goto notbracket; + _inc(dh); + _cmp(dh, 2); + if (flags.z()) + goto complete; +notbracket: + _cmp(al, ah); + if (!flags.z()) + goto restartlook; + _inc(di); + goto keeplooking; +complete: + es = ds; + al = 0; + bx = si; + return; +notfound: + al = 1; +} + +void DreamGenContext::parser() { + STACK_CHECK; + es = cs; + di = 2942; + cx = 13; + al = 0; + _stosb(cx, true); + di = 2942; + al = '='; + _stosb(); + ds = cs; + si = 8045; +notspace1: + _lodsw(); + _cmp(al, 32); + if (flags.z()) + goto stillspace1; + _cmp(al, 0); + if (!flags.z()) + goto notspace1; + goto finishpars; +stillspace1: + _lodsw(); + _cmp(al, 32); + if (flags.z()) + goto stillspace1; +copyin1: + _stosb(); + _lodsw(); + _cmp(al, 0); + if (flags.z()) + goto finishpars; + _cmp(al, 32); + if (!flags.z()) + goto copyin1; +finishpars: + di = 2942; +} + +void DreamGenContext::scrollmonitor() { + STACK_CHECK; + push(ax); + push(bx); + push(cx); + push(dx); + push(di); + push(si); + push(es); + push(ds); + printlogo(); + di = data.word(kMonadx); + bx = data.word(kMonady); + printundermon(); + ax = data.word(kMonady); + worktoscreen(); + al = 25; + playchannel1(); + ds = pop(); + es = pop(); + si = pop(); + di = pop(); + dx = pop(); + cx = pop(); + bx = pop(); + ax = pop(); +} + +void DreamGenContext::lockmon() { + STACK_CHECK; + _cmp(data.byte(kLasthardkey), 57); + if (!flags.z()) + return /* (notlock) */; + locklighton(); +lockloop: + _cmp(data.byte(kLasthardkey), 57); + if (flags.z()) + goto lockloop; + locklightoff(); +} + +void DreamGenContext::monitorlogo() { + STACK_CHECK; + al = data.byte(kLogonum); + _cmp(al, data.byte(kOldlogonum)); + if (flags.z()) + goto notnewlogo; + data.byte(kOldlogonum) = al; + printlogo(); + printundermon(); + worktoscreen(); + printlogo(); + printlogo(); + al = 26; + playchannel1(); + cx = 20; + randomaccess(); + return; +notnewlogo: + printlogo(); +} + +void DreamGenContext::printlogo() { + STACK_CHECK; + di = 56; + bx = 32; + ds = data.word(kTempgraphics); + al = 0; + ah = 0; + showframe(); + showcurrentfile(); +} + +void DreamGenContext::showcurrentfile() { + STACK_CHECK; + di = 178; + bx = 37; + si = 2970+1; +curfileloop: + al = cs.byte(si); + _cmp(al, 0); + if (flags.z()) + return /* (finishfile) */; + _inc(si); + push(si); + ds = data.word(kTempcharset); + ah = 0; + printchar(); + si = pop(); + goto curfileloop; +} + +void DreamGenContext::monmessage() { + STACK_CHECK; + es = data.word(kTextfile1); + bx = (66*2); + cl = al; + ch = 0; +monmessageloop: + al = es.byte(bx); + _inc(bx); + _cmp(al, '+'); + if (!flags.z()) + goto monmessageloop; + if (--cx) + goto monmessageloop; + monprint(); +} + +void DreamGenContext::processtrigger() { + STACK_CHECK; + _cmp(data.byte(kLasttrigger), '1'); + if (!flags.z()) + goto notfirsttrigger; + al = 8; + setlocation(); + al = 45; + triggermessage(); + return; +notfirsttrigger: + _cmp(data.byte(kLasttrigger), '2'); + if (!flags.z()) + goto notsecondtrigger; + al = 9; + setlocation(); + al = 55; + triggermessage(); + return; +notsecondtrigger: + _cmp(data.byte(kLasttrigger), '3'); + if (!flags.z()) + return /* (notthirdtrigger) */; + al = 2; + setlocation(); + al = 59; + triggermessage(); +} + +void DreamGenContext::triggermessage() { + STACK_CHECK; + push(ax); + di = 174; + bx = 153; + cl = 200; + ch = 63; + ds = data.word(kMapstore); + si = 0; + multiget(); + ax = pop(); + findpuztext(); + di = 174; + bx = 156; + dl = 141; + ah = 16; + printdirect(); + cx = 140; + hangon(); + worktoscreen(); + cx = 340; + hangon(); + di = 174; + bx = 153; + cl = 200; + ch = 63; + ds = data.word(kMapstore); + si = 0; + multiput(); + worktoscreen(); + data.byte(kLasttrigger) = 0; +} + +void DreamGenContext::printcurs() { + STACK_CHECK; + push(si); + push(di); + push(ds); + push(dx); + push(bx); + push(es); + di = data.word(kCurslocx); + bx = data.word(kCurslocy); + cl = 6; + ch = 8; + ds = data.word(kBuffers); + si = (0); + push(di); + push(bx); + multiget(); + bx = pop(); + di = pop(); + push(bx); + push(di); + _inc(data.word(kMaintimer)); + ax = data.word(kMaintimer); + _and(al, 16); + if (!flags.z()) + goto flashcurs; + al = '/'; + _sub(al, 32); + ah = 0; + ds = data.word(kTempcharset); + showframe(); +flashcurs: + di = pop(); + bx = pop(); + _sub(di, 6); + cl = 12; + ch = 8; + multidump(); + es = pop(); + bx = pop(); + dx = pop(); + ds = pop(); + di = pop(); + si = pop(); +} + +void DreamGenContext::delcurs() { + STACK_CHECK; + push(es); + push(bx); + push(di); + push(ds); + push(dx); + push(si); + di = data.word(kCurslocx); + bx = data.word(kCurslocy); + cl = 6; + ch = 8; + push(di); + push(bx); + push(cx); + ds = data.word(kBuffers); + si = (0); + multiput(); + cx = pop(); + bx = pop(); + di = pop(); + multidump(); + si = pop(); + dx = pop(); + ds = pop(); + di = pop(); + bx = pop(); + es = pop(); +} + +void DreamGenContext::useobject() { + STACK_CHECK; + data.byte(kWithobject) = 255; + _cmp(data.byte(kCommandtype), 229); + if (flags.z()) + goto alreadyuse; + data.byte(kCommandtype) = 229; + bl = data.byte(kCommand); + bh = data.byte(kObjecttype); + al = 51; + commandwithob(); +alreadyuse: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nouse) */; + _and(ax, 1); + if (!flags.z()) + goto douse; + return; +douse: + useroutine(); +} + +void DreamGenContext::useroutine() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 50); + if (flags.c()) + goto nodream7; + _cmp(data.byte(kPointerpower), 0); + if (!flags.z()) + goto powerok; + return; +powerok: + data.byte(kPointerpower) = 0; +nodream7: + getanyad(); + dx = data; + ds = dx; + si = 2984; +checkuselist: + push(si); + _lodsb(); + _sub(al, 'A'); + _cmp(al, es.byte(bx+12)); + if (!flags.z()) + goto failed; + _lodsb(); + _sub(al, 'A'); + _cmp(al, es.byte(bx+13)); + if (!flags.z()) + goto failed; + _lodsb(); + _sub(al, 'A'); + _cmp(al, es.byte(bx+14)); + if (!flags.z()) + goto failed; + _lodsb(); + _sub(al, 'A'); + _cmp(al, es.byte(bx+15)); + if (!flags.z()) + goto failed; + _lodsw(); + si = pop(); + __dispatch_call(ax); + return; +failed: + si = pop(); + _add(si, 6); + _cmp(ds.byte(si), 140); + if (!flags.z()) + goto checkuselist; + delpointer(); + getobtextstart(); + findnextcolon(); + _cmp(al, 0); + if (flags.z()) + goto cantuse2; + findnextcolon(); + _cmp(al, 0); + if (flags.z()) + goto cantuse2; + al = es.byte(si); + _cmp(al, 0); + if (flags.z()) + goto cantuse2; + usetext(); + cx = 400; + hangonp(); + putbackobstuff(); + return; +cantuse2: + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + di = 33; + bx = 100; + al = 63; + dl = 241; + printmessage(); + worktoscreenm(); + cx = 50; + hangonp(); + putbackobstuff(); + data.byte(kCommandtype) = 255; +} + +void DreamGenContext::wheelsound() { + STACK_CHECK; + al = 17; + playchannel1(); + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::runtap() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto tapwith; + withwhat(); + return; +tapwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'E'; + compare(); + if (flags.z()) + goto fillcupfromtap; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'F'; + compare(); + if (flags.z()) + goto cupfromtapfull; + cx = 300; + al = 56; + showpuztext(); + putbackobstuff(); + return; +fillcupfromtap: + al = data.byte(kWithobject); + getexad(); + es.byte(bx+15) = 'F'-'A'; + al = 8; + playchannel1(); + cx = 300; + al = 57; + showpuztext(); + putbackobstuff(); + return; +cupfromtapfull: + cx = 300; + al = 58; + showpuztext(); + putbackobstuff(); +} + +void DreamGenContext::playguitar() { + STACK_CHECK; + al = 14; + playchannel1(); + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::hotelcontrol() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 21); + if (!flags.z()) + goto notrightcont; + _cmp(data.byte(kMapx), 33); + if (!flags.z()) + goto notrightcont; + showfirstuse(); + putbackobstuff(); + return; +notrightcont: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::hotelbell() { + STACK_CHECK; + al = 12; + playchannel1(); + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::opentomb() { + STACK_CHECK; + _inc(data.byte(kProgresspoints)); + showfirstuse(); + data.word(kWatchingtime) = 35*2; + data.word(kReeltowatch) = 1; + data.word(kEndwatchreel) = 33; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usetrainer() { + STACK_CHECK; + getanyad(); + _cmp(es.byte(bx+2), 4); + if (!flags.z()) + goto notheldtrainer; + _inc(data.byte(kProgresspoints)); + makeworn(); + showseconduse(); + putbackobstuff(); + return; +notheldtrainer: + nothelderror(); +} + +void DreamGenContext::nothelderror() { + STACK_CHECK; + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + di = 64; + bx = 100; + al = 63; + ah = 1; + dl = 201; + printmessage2(); + worktoscreenm(); + cx = 50; + hangonp(); + putbackobstuff(); +} + +void DreamGenContext::usepipe() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto pipewith; + withwhat(); + return; +pipewith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'E'; + compare(); + if (flags.z()) + goto fillcup; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'F'; + compare(); + if (flags.z()) + goto alreadyfull; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +fillcup: + cx = 300; + al = 36; + showpuztext(); + putbackobstuff(); + al = data.byte(kWithobject); + getexad(); + es.byte(bx+15) = 'F'-'A'; + return; +alreadyfull: + cx = 300; + al = 35; + showpuztext(); + putbackobstuff(); +} + +void DreamGenContext::usefullcart() { + STACK_CHECK; + _inc(data.byte(kProgresspoints)); + al = 2; + ah = data.byte(kRoomnum); + _add(ah, 6); + turnanypathon(); + data.byte(kManspath) = 4; + data.byte(kFacing) = 4; + data.byte(kTurntoface) = 4; + data.byte(kFinaldest) = 4; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + showfirstuse(); + data.word(kWatchingtime) = 72*2; + data.word(kReeltowatch) = 58; + data.word(kEndwatchreel) = 142; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useplinth() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto plinthwith; + withwhat(); + return; +plinthwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'D'; + ch = 'K'; + dl = 'E'; + dh = 'Y'; + compare(); + if (flags.z()) + goto isrightkey; + showfirstuse(); + putbackobstuff(); + return; +isrightkey: + _inc(data.byte(kProgresspoints)); + showseconduse(); + data.word(kWatchingtime) = 220; + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 104; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + al = data.byte(kRoomafterdream); + data.byte(kNewlocation) = al; +} + +void DreamGenContext::chewy() { + STACK_CHECK; + showfirstuse(); + getanyad(); + es.byte(bx+2) = 255; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useladder() { + STACK_CHECK; + showfirstuse(); + _sub(data.byte(kMapx), 11); + findroominloc(); + data.byte(kFacing) = 6; + data.byte(kTurntoface) = 6; + data.byte(kManspath) = 0; + data.byte(kDestination) = 0; + data.byte(kFinaldest) = 0; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useladderb() { + STACK_CHECK; + showfirstuse(); + _add(data.byte(kMapx), 11); + findroominloc(); + data.byte(kFacing) = 2; + data.byte(kTurntoface) = 2; + data.byte(kManspath) = 1; + data.byte(kDestination) = 1; + data.byte(kFinaldest) = 1; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::slabdoora() { + STACK_CHECK; + showfirstuse(); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 13; + _cmp(data.byte(kDreamnumber), 3); + if (!flags.z()) + goto slabawrong; + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 60; + data.word(kEndwatchreel) = 42; + data.byte(kNewlocation) = 47; + return; +slabawrong: + data.word(kWatchingtime) = 40; + data.word(kEndwatchreel) = 34; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::slabdoorb() { + STACK_CHECK; + _cmp(data.byte(kDreamnumber), 1); + if (!flags.z()) + goto slabbwrong; + al = 'S'; + ah = 'H'; + cl = 'L'; + ch = 'D'; + isryanholding(); + if (!flags.z()) + goto gotcrystal; + al = 44; + cx = 200; + showpuztext(); + putbackobstuff(); + return; +gotcrystal: + showfirstuse(); + _inc(data.byte(kProgresspoints)); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 44; + data.word(kWatchingtime) = 60; + data.word(kEndwatchreel) = 71; + data.byte(kNewlocation) = 47; + return; +slabbwrong: + showfirstuse(); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 44; + data.word(kWatchingtime) = 40; + data.word(kEndwatchreel) = 63; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::slabdoord() { + STACK_CHECK; + showfirstuse(); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 75; + _cmp(data.byte(kDreamnumber), 0); + if (!flags.z()) + goto slabcwrong; + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 60; + data.word(kEndwatchreel) = 102; + data.byte(kNewlocation) = 47; + return; +slabcwrong: + data.word(kWatchingtime) = 40; + data.word(kEndwatchreel) = 94; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::slabdoorc() { + STACK_CHECK; + showfirstuse(); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 108; + _cmp(data.byte(kDreamnumber), 4); + if (!flags.z()) + goto slabdwrong; + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 60; + data.word(kEndwatchreel) = 135; + data.byte(kNewlocation) = 47; + return; +slabdwrong: + data.word(kWatchingtime) = 40; + data.word(kEndwatchreel) = 127; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::slabdoore() { + STACK_CHECK; + showfirstuse(); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 141; + _cmp(data.byte(kDreamnumber), 5); + if (!flags.z()) + goto slabewrong; + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 60; + data.word(kEndwatchreel) = 168; + data.byte(kNewlocation) = 47; + return; +slabewrong: + data.word(kWatchingtime) = 40; + data.word(kEndwatchreel) = 160; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::slabdoorf() { + STACK_CHECK; + showfirstuse(); + data.byte(kGetback) = 1; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kReeltowatch) = 171; + _cmp(data.byte(kDreamnumber), 2); + if (!flags.z()) + goto slabfwrong; + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 60; + data.word(kEndwatchreel) = 197; + data.byte(kNewlocation) = 47; + return; +slabfwrong: + data.word(kWatchingtime) = 40; + data.word(kEndwatchreel) = 189; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::useslab() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto slabwith; + withwhat(); + return; +slabwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'J'; + ch = 'E'; + dl = 'W'; + dh = 'L'; + compare(); + if (flags.z()) + goto nextslab; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +nextslab: + al = data.byte(kWithobject); + getexad(); + es.byte(bx+2) = 0; + al = data.byte(kCommand); + push(ax); + removesetobject(); + ax = pop(); + _inc(al); + push(ax); + placesetobject(); + ax = pop(); + _cmp(al, 54); + if (!flags.z()) + goto notlastslab; + al = 0; + turnpathon(); + data.word(kWatchingtime) = 22; + data.word(kReeltowatch) = 35; + data.word(kEndwatchreel) = 48; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +notlastslab: + _inc(data.byte(kProgresspoints)); + showfirstuse(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::usecart() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto cartwith; + withwhat(); + return; +cartwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'R'; + ch = 'O'; + dl = 'C'; + dh = 'K'; + compare(); + if (flags.z()) + goto nextcart; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +nextcart: + al = data.byte(kWithobject); + getexad(); + es.byte(bx+2) = 0; + al = data.byte(kCommand); + push(ax); + removesetobject(); + ax = pop(); + _inc(al); + placesetobject(); + _inc(data.byte(kProgresspoints)); + al = 17; + playchannel1(); + showfirstuse(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::useclearbox() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto clearboxwith; + withwhat(); + return; +clearboxwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'R'; + ch = 'A'; + dl = 'I'; + dh = 'L'; + compare(); + if (flags.z()) + goto openbox; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +openbox: + _inc(data.byte(kProgresspoints)); + showfirstuse(); + data.word(kWatchingtime) = 80; + data.word(kReeltowatch) = 67; + data.word(kEndwatchreel) = 105; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usecoveredbox() { + STACK_CHECK; + _inc(data.byte(kProgresspoints)); + showfirstuse(); + data.word(kWatchingtime) = 50; + data.word(kReeltowatch) = 41; + data.word(kEndwatchreel) = 66; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::userailing() { + STACK_CHECK; + showfirstuse(); + data.word(kWatchingtime) = 80; + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 30; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + data.byte(kMandead) = 4; +} + +void DreamGenContext::useopenbox() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto openboxwith; + withwhat(); + return; +openboxwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'F'; + compare(); + if (flags.z()) + goto destoryopenbox; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'P'; + dh = 'E'; + compare(); + if (flags.z()) + goto openboxwrong; + showfirstuse(); + return; +destoryopenbox: + _inc(data.byte(kProgresspoints)); + cx = 300; + al = 37; + showpuztext(); + al = data.byte(kWithobject); + getexad(); + es.byte(bx+15) = 'E'-'A'; + data.word(kWatchingtime) = 140; + data.word(kReeltowatch) = 105; + data.word(kEndwatchreel) = 181; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + al = 4; + turnpathon(); + data.byte(kGetback) = 1; + return; +openboxwrong: + cx = 300; + al = 38; + showpuztext(); + putbackobstuff(); +} + +void DreamGenContext::wearwatch() { + STACK_CHECK; + _cmp(data.byte(kWatchon), 1); + if (flags.z()) + goto wearingwatch; + showfirstuse(); + data.byte(kWatchon) = 1; + data.byte(kGetback) = 1; + getanyad(); + makeworn(); + return; +wearingwatch: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::wearshades() { + STACK_CHECK; + _cmp(data.byte(kShadeson), 1); + if (flags.z()) + goto wearingshades; + data.byte(kShadeson) = 1; + showfirstuse(); + data.byte(kGetback) = 1; + getanyad(); + makeworn(); + return; +wearingshades: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::sitdowninbar() { + STACK_CHECK; + _cmp(data.byte(kWatchmode), -1); + if (!flags.z()) + goto satdown; + showfirstuse(); + data.word(kWatchingtime) = 50; + data.word(kReeltowatch) = 55; + data.word(kEndwatchreel) = 71; + data.word(kReeltohold) = 73; + data.word(kEndofholdreel) = 83; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + return; +satdown: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::usechurchhole() { + STACK_CHECK; + showfirstuse(); + data.byte(kGetback) = 1; + data.word(kWatchingtime) = 28; + data.word(kReeltowatch) = 13; + data.word(kEndwatchreel) = 26; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; +} + +void DreamGenContext::usehole() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto holewith; + withwhat(); + return; +holewith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'H'; + ch = 'N'; + dl = 'D'; + dh = 'A'; + compare(); + if (flags.z()) + goto righthand; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +righthand: + showfirstuse(); + al = 86; + removesetobject(); + al = data.byte(kWithobject); + getexad(); + es.byte(bx+2) = 255; + data.byte(kCanmovealtar) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usealtar() { + STACK_CHECK; + al = 'C'; + ah = 'N'; + cl = 'D'; + ch = 'A'; + findexobject(); + _cmp(al, (114)); + if (flags.z()) + goto thingsonaltar; + al = 'C'; + ah = 'N'; + cl = 'D'; + ch = 'B'; + findexobject(); + _cmp(al, (114)); + if (flags.z()) + goto thingsonaltar; + _cmp(data.byte(kCanmovealtar), 1); + if (flags.z()) + goto movealtar; + cx = 300; + al = 23; + showpuztext(); + data.byte(kGetback) = 1; + return; +movealtar: + _inc(data.byte(kProgresspoints)); + showseconduse(); + data.word(kWatchingtime) = 160; + data.word(kReeltowatch) = 81; + data.word(kEndwatchreel) = 174; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + al = 47; + bl = 52; + bh = 76; + cx = 32; + dx = 98; + setuptimeduse(); + data.byte(kGetback) = 1; + return; +thingsonaltar: + showfirstuse(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::opentvdoor() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto tvdoorwith; + withwhat(); + return; +tvdoorwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'U'; + ch = 'L'; + dl = 'O'; + dh = 'K'; + compare(); + if (flags.z()) + goto keyontv; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +keyontv: + showfirstuse(); + data.byte(kLockstatus) = 0; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usedryer() { + STACK_CHECK; + al = 12; + playchannel1(); + showfirstuse(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::openlouis() { + STACK_CHECK; + al = 5; + ah = 2; + cl = 3; + ch = 8; + entercode(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::nextcolon() { + STACK_CHECK; +lookcolon: + al = es.byte(si); + _inc(si); + _cmp(al, ':'); + if (!flags.z()) + goto lookcolon; +} + +void DreamGenContext::openyourneighbour() { + STACK_CHECK; + al = 255; + ah = 255; + cl = 255; + ch = 255; + entercode(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::usewindow() { + STACK_CHECK; + _cmp(data.byte(kManspath), 6); + if (!flags.z()) + goto notonbalc; + _inc(data.byte(kProgresspoints)); + showfirstuse(); + data.byte(kNewlocation) = 29; + data.byte(kGetback) = 1; + return; +notonbalc: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::usebalcony() { + STACK_CHECK; + showfirstuse(); + al = 6; + turnpathon(); + al = 0; + turnpathoff(); + al = 1; + turnpathoff(); + al = 2; + turnpathoff(); + al = 3; + turnpathoff(); + al = 4; + turnpathoff(); + al = 5; + turnpathoff(); + _inc(data.byte(kProgresspoints)); + data.byte(kManspath) = 6; + data.byte(kDestination) = 6; + data.byte(kFinaldest) = 6; + findxyfrompath(); + switchryanoff(); + data.byte(kResetmanxy) = 1; + data.word(kWatchingtime) = 30*2; + data.word(kReeltowatch) = 183; + data.word(kEndwatchreel) = 212; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::openryan() { + STACK_CHECK; + al = 5; + ah = 1; + cl = 0; + ch = 6; + entercode(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::openpoolboss() { + STACK_CHECK; + al = 5; + ah = 2; + cl = 2; + ch = 2; + entercode(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::openeden() { + STACK_CHECK; + al = 2; + ah = 8; + cl = 6; + ch = 5; + entercode(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::opensarters() { + STACK_CHECK; + al = 7; + ah = 8; + cl = 3; + ch = 3; + entercode(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::isitright() { + STACK_CHECK; + bx = data; + es = bx; + bx = 8573; + _cmp(es.byte(bx+0), al); + if (!flags.z()) + return /* (notright) */; + _cmp(es.byte(bx+1), ah); + if (!flags.z()) + return /* (notright) */; + _cmp(es.byte(bx+2), cl); + if (!flags.z()) + return /* (notright) */; + _cmp(es.byte(bx+3), ch); +} + +void DreamGenContext::drawitall() { + STACK_CHECK; + createpanel(); + drawfloor(); + printsprites(); + showicon(); +} + +void DreamGenContext::openhoteldoor() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto hoteldoorwith; + withwhat(); + return; +hoteldoorwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'K'; + ch = 'E'; + dl = 'Y'; + dh = 'A'; + compare(); + if (flags.z()) + goto keyonhotel1; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +keyonhotel1: + al = 16; + playchannel1(); + showfirstuse(); + data.byte(kLockstatus) = 0; + data.byte(kGetback) = 1; +} + +void DreamGenContext::openhoteldoor2() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto hoteldoorwith2; + withwhat(); + return; +hoteldoorwith2: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'K'; + ch = 'E'; + dl = 'Y'; + dh = 'A'; + compare(); + if (flags.z()) + goto keyonhotel2; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +keyonhotel2: + al = 16; + playchannel1(); + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::grafittidoor() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto grafwith; + withwhat(); + return; +grafwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'A'; + ch = 'P'; + dl = 'E'; + dh = 'N'; + compare(); + if (flags.z()) + goto dograf; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +dograf: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::trapdoor() { + STACK_CHECK; + _inc(data.byte(kProgresspoints)); + showfirstuse(); + switchryanoff(); + data.word(kWatchingtime) = 20*2; + data.word(kReeltowatch) = 181; + data.word(kEndwatchreel) = 197; + data.byte(kNewlocation) = 26; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::callhotellift() { + STACK_CHECK; + al = 12; + playchannel1(); + showfirstuse(); + data.byte(kCounttoopen) = 8; + data.byte(kGetback) = 1; + data.byte(kDestination) = 5; + data.byte(kFinaldest) = 5; + autosetwalk(); + al = 4; + turnpathon(); +} + +void DreamGenContext::calledenslift() { + STACK_CHECK; + showfirstuse(); + data.byte(kCounttoopen) = 8; + data.byte(kGetback) = 1; + al = 2; + turnpathon(); +} + +void DreamGenContext::calledensdlift() { + STACK_CHECK; + _cmp(data.byte(kLiftflag), 1); + if (flags.z()) + goto edensdhere; + showfirstuse(); + data.byte(kCounttoopen) = 8; + data.byte(kGetback) = 1; + al = 2; + turnpathon(); + return; +edensdhere: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::usepoolreader() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto poolwith; + withwhat(); + return; +poolwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'M'; + ch = 'E'; + dl = 'M'; + dh = 'B'; + compare(); + if (flags.z()) + goto openpool; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +openpool: + _cmp(data.byte(kTalkedtoattendant), 1); + if (flags.z()) + goto canopenpool; + showseconduse(); + putbackobstuff(); + return; +canopenpool: + al = 17; + playchannel1(); + showfirstuse(); + data.byte(kCounttoopen) = 6; + data.byte(kGetback) = 1; +} + +void DreamGenContext::uselighter() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotlighterwith; + withwhat(); + return; +gotlighterwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'S'; + ch = 'M'; + dl = 'K'; + dh = 'E'; + compare(); + if (flags.z()) + goto cigarette; + showfirstuse(); + putbackobstuff(); + return; +cigarette: + cx = 300; + al = 9; + showpuztext(); + al = data.byte(kWithobject); + getexad(); + es.byte(bx+2) = 255; + data.byte(kGetback) = 1; +} + +void DreamGenContext::showseconduse() { + STACK_CHECK; + getobtextstart(); + nextcolon(); + nextcolon(); + nextcolon(); + usetext(); + cx = 400; + hangonp(); +} + +void DreamGenContext::usecardreader1() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotreader1with; + withwhat(); + return; +gotreader1with: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'S'; + dl = 'H'; + dh = 'R'; + compare(); + if (flags.z()) + goto correctcard; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +correctcard: + _cmp(data.byte(kTalkedtosparky), 0); + if (flags.z()) + goto notyet; + _cmp(data.word(kCard1money), 0); + if (flags.z()) + goto getscash; + cx = 300; + al = 17; + showpuztext(); + putbackobstuff(); + return; +getscash: + al = 16; + playchannel1(); + cx = 300; + al = 18; + showpuztext(); + _inc(data.byte(kProgresspoints)); + data.word(kCard1money) = 12432; + data.byte(kGetback) = 1; + return; +notyet: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::usecardreader2() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotreader2with; + withwhat(); + return; +gotreader2with: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'S'; + dl = 'H'; + dh = 'R'; + compare(); + if (flags.z()) + goto correctcard2; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +correctcard2: + _cmp(data.byte(kTalkedtoboss), 0); + if (flags.z()) + goto notyetboss; + _cmp(data.word(kCard1money), 0); + if (flags.z()) + goto nocash; + _cmp(data.byte(kGunpassflag), 2); + if (flags.z()) + goto alreadygotnew; + al = 18; + playchannel1(); + cx = 300; + al = 19; + showpuztext(); + al = 94; + placesetobject(); + data.byte(kGunpassflag) = 1; + _sub(data.word(kCard1money), 2000); + _inc(data.byte(kProgresspoints)); + data.byte(kGetback) = 1; + return; +nocash: + cx = 300; + al = 20; + showpuztext(); + putbackobstuff(); + return; +alreadygotnew: + cx = 300; + al = 22; + showpuztext(); + putbackobstuff(); + return; +notyetboss: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::usecardreader3() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotreader3with; + withwhat(); + return; +gotreader3with: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'S'; + dl = 'H'; + dh = 'R'; + compare(); + if (flags.z()) + goto rightcard; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +rightcard: + _cmp(data.byte(kTalkedtorecep), 0); + if (flags.z()) + goto notyetrecep; + _cmp(data.byte(kCardpassflag), 0); + if (!flags.z()) + goto alreadyusedit; + al = 16; + playchannel1(); + cx = 300; + al = 25; + showpuztext(); + _inc(data.byte(kProgresspoints)); + _sub(data.word(kCard1money), 8300); + data.byte(kCardpassflag) = 1; + data.byte(kGetback) = 1; + return; +alreadyusedit: + cx = 300; + al = 26; + showpuztext(); + putbackobstuff(); + return; +notyetrecep: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::usecashcard() { + STACK_CHECK; + getridofreels(); + loadkeypad(); + createpanel(); + showpanel(); + showexit(); + showman(); + di = 114; + bx = 120; + ds = data.word(kTempgraphics); + al = 39; + ah = 0; + showframe(); + ax = data.word(kCard1money); + moneypoke(); + getobtextstart(); + nextcolon(); + nextcolon(); + di = 36; + bx = 98; + dl = 241; + al = 0; + ah = 0; + printdirect(); + di = 160; + bx = 155; + es = cs; + si = 3474; + data.word(kCharshift) = 91*2+75; + al = 0; + ah = 0; + dl = 240; + printdirect(); + di = 187; + bx = 155; + es = cs; + si = 3479; + data.word(kCharshift) = 91*2+85; + al = 0; + ah = 0; + dl = 240; + printdirect(); + data.word(kCharshift) = 0; + worktoscreenm(); + cx = 400; + hangonp(); + getridoftemp(); + restorereels(); + putbackobstuff(); +} + +void DreamGenContext::lookatcard() { + STACK_CHECK; + data.byte(kManisoffscreen) = 1; + getridofreels(); + loadkeypad(); + createpanel2(); + di = 160; + bx = 80; + ds = data.word(kTempgraphics); + al = 42; + ah = 128; + showframe(); + getobtextstart(); + findnextcolon(); + findnextcolon(); + findnextcolon(); + di = 36; + bx = 124; + dl = 241; + al = 0; + ah = 0; + printdirect(); + push(es); + push(si); + worktoscreenm(); + cx = 280; + hangonw(); + createpanel2(); + di = 160; + bx = 80; + ds = data.word(kTempgraphics); + al = 42; + ah = 128; + showframe(); + si = pop(); + es = pop(); + di = 36; + bx = 130; + dl = 241; + al = 0; + ah = 0; + printdirect(); + worktoscreenm(); + cx = 200; + hangonw(); + data.byte(kManisoffscreen) = 0; + getridoftemp(); + restorereels(); + putbackobstuff(); +} + +void DreamGenContext::moneypoke() { + STACK_CHECK; + bx = 3474; + cl = 48-1; +numberpoke0: + _inc(cl); + _sub(ax, 10000); + if (!flags.c()) + goto numberpoke0; + _add(ax, 10000); + cs.byte(bx) = cl; + _inc(bx); + cl = 48-1; +numberpoke1: + _inc(cl); + _sub(ax, 1000); + if (!flags.c()) + goto numberpoke1; + _add(ax, 1000); + cs.byte(bx) = cl; + _inc(bx); + cl = 48-1; +numberpoke2: + _inc(cl); + _sub(ax, 100); + if (!flags.c()) + goto numberpoke2; + _add(ax, 100); + cs.byte(bx) = cl; + _inc(bx); + cl = 48-1; +numberpoke3: + _inc(cl); + _sub(ax, 10); + if (!flags.c()) + goto numberpoke3; + _add(ax, 10); + cs.byte(bx) = cl; + bx = 3479; + _add(al, 48); + cs.byte(bx) = al; +} + +void DreamGenContext::usecontrol() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotcontrolwith; + withwhat(); + return; +gotcontrolwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'K'; + ch = 'E'; + dl = 'Y'; + dh = 'A'; + compare(); + if (flags.z()) + goto rightkey; + _cmp(data.byte(kReallocation), 21); + if (!flags.z()) + goto balls; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'K'; + ch = 'N'; + dl = 'F'; + dh = 'E'; + compare(); + if (flags.z()) + goto jimmycontrols; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'A'; + ch = 'X'; + dl = 'E'; + dh = 'D'; + compare(); + if (flags.z()) + goto axeoncontrols; +balls: + showfirstuse(); + putbackobstuff(); + return; +rightkey: + al = 16; + playchannel1(); + _cmp(data.byte(kLocation), 21); + if (flags.z()) + goto goingdown; + cx = 300; + al = 0; + showpuztext(); + data.byte(kNewlocation) = 21; + data.byte(kCounttoclose) = 8; + data.byte(kCounttoopen) = 0; + data.word(kWatchingtime) = 80; + data.byte(kGetback) = 1; + return; +goingdown: + cx = 300; + al = 3; + showpuztext(); + data.byte(kNewlocation) = 30; + data.byte(kCounttoclose) = 8; + data.byte(kCounttoopen) = 0; + data.word(kWatchingtime) = 80; + data.byte(kGetback) = 1; + return; +jimmycontrols: + al = 50; + placesetobject(); + al = 51; + placesetobject(); + al = 26; + placesetobject(); + al = 30; + placesetobject(); + al = 16; + removesetobject(); + al = 17; + removesetobject(); + al = 14; + playchannel1(); + cx = 300; + al = 10; + showpuztext(); + _inc(data.byte(kProgresspoints)); + data.byte(kGetback) = 1; + return; +axeoncontrols: + cx = 300; + al = 16; + showpuztext(); + _inc(data.byte(kProgresspoints)); + putbackobstuff(); +} + +void DreamGenContext::usehatch() { + STACK_CHECK; + showfirstuse(); + data.byte(kNewlocation) = 40; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usewire() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotwirewith; + withwhat(); + return; +gotwirewith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'K'; + ch = 'N'; + dl = 'F'; + dh = 'E'; + compare(); + if (flags.z()) + goto wireknife; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'A'; + ch = 'X'; + dl = 'E'; + dh = 'D'; + compare(); + if (flags.z()) + goto wireaxe; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +wireaxe: + cx = 300; + al = 16; + showpuztext(); + putbackobstuff(); + return; +wireknife: + al = 51; + removesetobject(); + al = 52; + placesetobject(); + cx = 300; + al = 11; + showpuztext(); + _inc(data.byte(kProgresspoints)); + data.byte(kGetback) = 1; +} + +void DreamGenContext::usehandle() { + STACK_CHECK; + al = 'C'; + ah = 'U'; + cl = 'T'; + ch = 'W'; + findsetobject(); + al = es.byte(bx+58); + _cmp(al, 255); + if (!flags.z()) + goto havecutwire; + cx = 300; + al = 12; + showpuztext(); + data.byte(kGetback) = 1; + return; +havecutwire: + cx = 300; + al = 13; + showpuztext(); + data.byte(kNewlocation) = 22; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useelevator1() { + STACK_CHECK; + showfirstuse(); + selectlocation(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::showfirstuse() { + STACK_CHECK; + getobtextstart(); + findnextcolon(); + findnextcolon(); + usetext(); + cx = 400; + hangonp(); +} + +void DreamGenContext::useelevator3() { + STACK_CHECK; + showfirstuse(); + data.byte(kCounttoclose) = 20; + data.byte(kNewlocation) = 34; + data.word(kReeltowatch) = 46; + data.word(kEndwatchreel) = 63; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.word(kWatchingtime) = 80; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useelevator4() { + STACK_CHECK; + showfirstuse(); + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 11; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kCounttoclose) = 20; + data.word(kWatchingtime) = 80; + data.byte(kGetback) = 1; + data.byte(kNewlocation) = 24; +} + +void DreamGenContext::useelevator2() { + STACK_CHECK; + _cmp(data.byte(kLocation), 23); + if (flags.z()) + goto inpoolhall; + showfirstuse(); + data.byte(kNewlocation) = 23; + data.byte(kCounttoclose) = 20; + data.byte(kCounttoopen) = 0; + data.word(kWatchingtime) = 80; + data.byte(kGetback) = 1; + return; +inpoolhall: + showfirstuse(); + data.byte(kNewlocation) = 31; + data.byte(kCounttoclose) = 20; + data.byte(kCounttoopen) = 0; + data.word(kWatchingtime) = 80; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useelevator5() { + STACK_CHECK; + al = 4; + placesetobject(); + al = 0; + removesetobject(); + data.byte(kNewlocation) = 20; + data.word(kWatchingtime) = 80; + data.byte(kLiftflag) = 1; + data.byte(kCounttoclose) = 8; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usekey() { + STACK_CHECK; + _cmp(data.byte(kLocation), 5); + if (flags.z()) + goto usekey1; + _cmp(data.byte(kLocation), 30); + if (flags.z()) + goto usekey1; + _cmp(data.byte(kLocation), 21); + if (flags.z()) + goto usekey2; + cx = 200; + al = 1; + showpuztext(); + putbackobstuff(); + return; +usekey1: + _cmp(data.byte(kMapx), 22); + if (!flags.z()) + goto wrongroom1; + _cmp(data.byte(kMapy), 10); + if (!flags.z()) + goto wrongroom1; + cx = 300; + al = 0; + showpuztext(); + data.byte(kCounttoclose) = 100; + data.byte(kGetback) = 1; + return; +usekey2: + _cmp(data.byte(kMapx), 11); + if (!flags.z()) + goto wrongroom1; + _cmp(data.byte(kMapy), 10); + if (!flags.z()) + goto wrongroom1; + cx = 300; + al = 3; + showpuztext(); + data.byte(kNewlocation) = 30; + al = 2; + fadescreendown(); + showfirstuse(); + putbackobstuff(); + return; +wrongroom1: + cx = 200; + al = 2; + showpuztext(); + putbackobstuff(); +} + +void DreamGenContext::usestereo() { + STACK_CHECK; + _cmp(data.byte(kLocation), 0); + if (flags.z()) + goto stereook; + cx = 400; + al = 4; + showpuztext(); + putbackobstuff(); + return; +stereook: + _cmp(data.byte(kMapx), 11); + if (!flags.z()) + goto stereonotok; + _cmp(data.byte(kMapy), 0); + if (flags.z()) + goto stereook2; +stereonotok: + cx = 400; + al = 5; + showpuztext(); + putbackobstuff(); + return; +stereook2: + al = 'C'; + ah = 'D'; + cl = 'P'; + ch = 'L'; + findsetobject(); + ah = 1; + checkinside(); + _cmp(cl, (114)); + if (!flags.z()) + goto cdinside; + al = 6; + cx = 400; + showpuztext(); + putbackobstuff(); + getanyad(); + al = 255; + es.byte(bx+10) = al; + return; +cdinside: + getanyad(); + al = es.byte(bx+10); + _xor(al, 1); + es.byte(bx+10) = al; + _cmp(al, 255); + if (flags.z()) + goto stereoon; + al = 7; + cx = 400; + showpuztext(); + putbackobstuff(); + return; +stereoon: + al = 8; + cx = 400; + showpuztext(); + putbackobstuff(); +} + +void DreamGenContext::usecooker() { + STACK_CHECK; + al = data.byte(kCommand); + ah = data.byte(kObjecttype); + checkinside(); + _cmp(cl, (114)); + if (!flags.z()) + goto foodinside; + showfirstuse(); + putbackobstuff(); + return; +foodinside: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::useaxe() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 22); + if (!flags.z()) + goto notinpool; + _cmp(data.byte(kMapy), 10); + if (flags.z()) + goto axeondoor; + showseconduse(); + _inc(data.byte(kProgresspoints)); + data.byte(kLastweapon) = 2; + data.byte(kGetback) = 1; + removeobfrominv(); + return; +notinpool: + showfirstuse(); +/*continuing to unbounded code: axeondoor from useelvdoor:19-29*/ +axeondoor: + al = 15; + cx = 300; + showpuztext(); + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 46*2; + data.word(kReeltowatch) = 31; + data.word(kEndwatchreel) = 77; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::useelvdoor() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gotdoorwith; + withwhat(); + return; +gotdoorwith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'A'; + ch = 'X'; + dl = 'E'; + dh = 'D'; + compare(); + if (flags.z()) + goto axeondoor; + al = 14; + cx = 300; + showpuztext(); + putbackobstuff(); + return; +axeondoor: + al = 15; + cx = 300; + showpuztext(); + _inc(data.byte(kProgresspoints)); + data.word(kWatchingtime) = 46*2; + data.word(kReeltowatch) = 31; + data.word(kEndwatchreel) = 77; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::withwhat() { + STACK_CHECK; + createpanel(); + showpanel(); + showman(); + showexit(); + al = data.byte(kCommand); + ah = data.byte(kObjecttype); + es = cs; + di = 5847; + copyname(); + di = 100; + bx = 21; + dl = 200; + al = 63; + ah = 2; + printmessage2(); + di = data.word(kLastxpos); + _add(di, 5); + bx = 21; + es = cs; + si = 5847; + dl = 220; + al = 0; + ah = 0; + printdirect(); + di = data.word(kLastxpos); + _add(di, 5); + bx = 21; + dl = 200; + al = 63; + ah = 3; + printmessage2(); + fillryan(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + data.byte(kInvopen) = 2; +} + +void DreamGenContext::selectob() { + STACK_CHECK; + findinvpos(); + ax = es.word(bx); + _cmp(al, 255); + if (!flags.z()) + goto canselectob; + blank(); + return; +canselectob: + data.byte(kWithobject) = al; + data.byte(kWithtype) = ah; + _cmp(ax, data.word(kOldsubject)); + if (!flags.z()) + goto diffsub3; + _cmp(data.byte(kCommandtype), 221); + if (flags.z()) + goto alreadyselob; + data.byte(kCommandtype) = 221; +diffsub3: + data.word(kOldsubject) = ax; + bx = ax; + al = 0; + commandwithob(); +alreadyselob: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notselob) */; + _and(ax, 1); + if (!flags.z()) + goto doselob; + return; +doselob: + delpointer(); + data.byte(kInvopen) = 0; + useroutine(); +} + +void DreamGenContext::compare() { + STACK_CHECK; + _sub(dl, 'A'); + _sub(dh, 'A'); + _sub(cl, 'A'); + _sub(ch, 'A'); + push(cx); + push(dx); + getanyaddir(); + dx = pop(); + cx = pop(); + _cmp(es.word(bx+12), cx); + if (!flags.z()) + return /* (comparefin) */; + _cmp(es.word(bx+14), dx); +} + +void DreamGenContext::findsetobject() { + STACK_CHECK; + _sub(al, 'A'); + _sub(ah, 'A'); + _sub(cl, 'A'); + _sub(ch, 'A'); + es = data.word(kSetdat); + bx = 0; + dl = 0; +findsetloop: + _cmp(al, es.byte(bx+12)); + if (!flags.z()) + goto nofind; + _cmp(ah, es.byte(bx+13)); + if (!flags.z()) + goto nofind; + _cmp(cl, es.byte(bx+14)); + if (!flags.z()) + goto nofind; + _cmp(ch, es.byte(bx+15)); + if (!flags.z()) + goto nofind; + al = dl; + return; +nofind: + _add(bx, 64); + _inc(dl); + _cmp(dl, 128); + if (!flags.z()) + goto findsetloop; + al = dl; +} + +void DreamGenContext::findexobject() { + STACK_CHECK; + _sub(al, 'A'); + _sub(ah, 'A'); + _sub(cl, 'A'); + _sub(ch, 'A'); + es = data.word(kExtras); + bx = (0+2080+30000); + dl = 0; +findexloop: + _cmp(al, es.byte(bx+12)); + if (!flags.z()) + goto nofindex; + _cmp(ah, es.byte(bx+13)); + if (!flags.z()) + goto nofindex; + _cmp(cl, es.byte(bx+14)); + if (!flags.z()) + goto nofindex; + _cmp(ch, es.byte(bx+15)); + if (!flags.z()) + goto nofindex; + al = dl; + return; +nofindex: + _add(bx, 16); + _inc(dl); + _cmp(dl, (114)); + if (!flags.z()) + goto findexloop; + al = dl; +} + +void DreamGenContext::isryanholding() { + STACK_CHECK; + _sub(al, 'A'); + _sub(ah, 'A'); + _sub(cl, 'A'); + _sub(ch, 'A'); + es = data.word(kExtras); + bx = (0+2080+30000); + dl = 0; +searchinv: + _cmp(es.byte(bx+2), 4); + if (!flags.z()) + goto nofindininv; + _cmp(al, es.byte(bx+12)); + if (!flags.z()) + goto nofindininv; + _cmp(ah, es.byte(bx+13)); + if (!flags.z()) + goto nofindininv; + _cmp(cl, es.byte(bx+14)); + if (!flags.z()) + goto nofindininv; + _cmp(ch, es.byte(bx+15)); + if (!flags.z()) + goto nofindininv; + al = dl; + _cmp(al, (114)); + return; +nofindininv: + _add(bx, 16); + _inc(dl); + _cmp(dl, (114)); + if (!flags.z()) + goto searchinv; + al = dl; + _cmp(al, (114)); +} + +void DreamGenContext::checkinside() { + STACK_CHECK; + es = data.word(kExtras); + bx = (0+2080+30000); + cl = 0; +insideloop: + _cmp(al, es.byte(bx+3)); + if (!flags.z()) + goto notfoundinside; + _cmp(ah, es.byte(bx+2)); + if (!flags.z()) + goto notfoundinside; + return; +notfoundinside: + _add(bx, 16); + _inc(cl); + _cmp(cl, (114)); + if (!flags.z()) + goto insideloop; +} + +void DreamGenContext::usetext() { + STACK_CHECK; + push(es); + push(si); + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + si = pop(); + es = pop(); + di = 36; + bx = 104; + dl = 241; + al = 0; + ah = 0; + printdirect(); + worktoscreenm(); +} + +void DreamGenContext::putbackobstuff() { + STACK_CHECK; + createpanel(); + showpanel(); + showman(); + obicons(); + showexit(); + obpicture(); + describeob(); + undertextline(); + data.byte(kCommandtype) = 255; + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::showpuztext() { + STACK_CHECK; + push(cx); + findpuztext(); + push(es); + push(si); + createpanel(); + showpanel(); + showman(); + showexit(); + obicons(); + si = pop(); + es = pop(); + di = 36; + bx = 104; + dl = 241; + ah = 0; + printdirect(); + worktoscreenm(); + cx = pop(); + hangonp(); +} + +void DreamGenContext::findpuztext() { + STACK_CHECK; + ah = 0; + si = ax; + _add(si, si); + es = data.word(kPuzzletext); + ax = es.word(si); + _add(ax, (66*2)); + si = ax; +} + +void DreamGenContext::placesetobject() { + STACK_CHECK; + push(es); + push(bx); + cl = 0; + ch = 0; + findormake(); + getsetad(); + es.byte(bx+58) = 0; + bx = pop(); + es = pop(); +} + +void DreamGenContext::removesetobject() { + STACK_CHECK; + push(es); + push(bx); + cl = 255; + ch = 0; + findormake(); + getsetad(); + es.byte(bx+58) = 255; + bx = pop(); + es = pop(); +} + +void DreamGenContext::issetobonmap() { + STACK_CHECK; + push(es); + push(bx); + getsetad(); + al = es.byte(bx+58); + bx = pop(); + es = pop(); + _cmp(al, 0); +} + +void DreamGenContext::placefreeobject() { + STACK_CHECK; + push(es); + push(bx); + cl = 0; + ch = 1; + findormake(); + getfreead(); + es.byte(bx+2) = 0; + bx = pop(); + es = pop(); +} + +void DreamGenContext::removefreeobject() { + STACK_CHECK; + push(es); + push(bx); + getfreead(); + es.byte(bx+2) = 255; + bx = pop(); + es = pop(); +} + +void DreamGenContext::findormake() { + STACK_CHECK; + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)); + push(ax); + es = data.word(kBuffers); + ah = data.byte(kReallocation); +changeloop: + _cmp(es.byte(bx), 255); + if (flags.z()) + goto haventfound; + _cmp(ax, es.word(bx)); + if (!flags.z()) + goto nofoundchange; + _cmp(ch, es.byte(bx+3)); + if (flags.z()) + goto foundchange; +nofoundchange: + _add(bx, 4); + goto changeloop; +foundchange: + ax = pop(); + es.byte(bx+2) = cl; + return; +haventfound: + es.word(bx) = ax; + es.word(bx+2) = cx; + ax = pop(); +} + +void DreamGenContext::switchryanon() { + STACK_CHECK; + data.byte(kRyanon) = 255; +} + +void DreamGenContext::switchryanoff() { + STACK_CHECK; + data.byte(kRyanon) = 1; +} + +void DreamGenContext::setallchanges() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)); +setallloop: + ax = es.word(bx); + _cmp(al, 255); + if (flags.z()) + return /* (endsetloop) */; + cx = es.word(bx+2); + _add(bx, 4); + _cmp(ah, data.byte(kReallocation)); + if (!flags.z()) + goto setallloop; + push(es); + push(bx); + dochange(); + bx = pop(); + es = pop(); + goto setallloop; +} + +void DreamGenContext::dochange() { + STACK_CHECK; + _cmp(ch, 0); + if (flags.z()) + goto object; + _cmp(ch, 1); + if (flags.z()) + goto freeobject; + push(cx); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + push(ax); + al = ch; + _sub(al, 100); + ah = 0; + cx = 144; + _mul(cx); + bx = pop(); + _add(bx, ax); + _add(bx, (0)); + es = data.word(kReels); + cx = pop(); + es.byte(bx+6) = cl; + return; +object: + push(cx); + getsetad(); + cx = pop(); + es.byte(bx+58) = cl; + return; +freeobject: + push(cx); + getfreead(); + cx = pop(); + _cmp(es.byte(bx+2), 255); + if (!flags.z()) + return /* (beenpickedup) */; + es.byte(bx+2) = cl; +} + +void DreamGenContext::autoappear() { + STACK_CHECK; + _cmp(data.byte(kLocation), 32); + if (!flags.z()) + goto notinalley; + al = 5; + resetlocation(); + al = 10; + setlocation(); + data.byte(kDestpos) = 10; + return; +notinalley: + _cmp(data.byte(kReallocation), 24); + if (!flags.z()) + goto notinedens; + _cmp(data.byte(kGeneraldead), 1); + if (!flags.z()) + goto edenspart2; + _inc(data.byte(kGeneraldead)); + al = 44; + placesetobject(); + al = 18; + placesetobject(); + al = 93; + placesetobject(); + al = 92; + removesetobject(); + al = 55; + removesetobject(); + al = 75; + removesetobject(); + al = 84; + removesetobject(); + al = 85; + removesetobject(); + return; +edenspart2: + _cmp(data.byte(kSartaindead), 1); + if (!flags.z()) + return /* (notedens2) */; + al = 44; + removesetobject(); + al = 93; + removesetobject(); + al = 55; + placesetobject(); + _inc(data.byte(kSartaindead)); + return; +notinedens: + _cmp(data.byte(kReallocation), 25); + if (!flags.z()) + goto notonsartroof; + data.byte(kNewsitem) = 3; + al = 6; + resetlocation(); + al = 11; + setlocation(); + data.byte(kDestpos) = 11; + return; +notonsartroof: + _cmp(data.byte(kReallocation), 2); + if (!flags.z()) + return /* (notinlouiss) */; + _cmp(data.byte(kRockstardead), 0); + if (flags.z()) + return /* (notinlouiss) */; + al = 23; + placesetobject(); +} + +void DreamGenContext::getundertimed() { + STACK_CHECK; + al = data.byte(kTimedy); + ah = 0; + bx = ax; + al = data.byte(kTimedx); + ah = 0; + di = ax; + ch = (24); + cl = 240; + ds = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)); + multiget(); +} + +void DreamGenContext::putundertimed() { + STACK_CHECK; + al = data.byte(kTimedy); + ah = 0; + bx = ax; + al = data.byte(kTimedx); + ah = 0; + di = ax; + ch = (24); + cl = 240; + ds = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)); + multiput(); +} + +void DreamGenContext::dumptimedtext() { + STACK_CHECK; + _cmp(data.byte(kNeedtodumptimed), 1); + if (!flags.z()) + return /* (nodumptimed) */; + al = data.byte(kTimedy); + ah = 0; + bx = ax; + al = data.byte(kTimedx); + ah = 0; + di = ax; + cl = 240; + ch = (24); + multidump(); + data.byte(kNeedtodumptimed) = 0; +} + +void DreamGenContext::setuptimeduse() { + STACK_CHECK; + _cmp(data.word(kTimecount), 0); + if (!flags.z()) + return /* (cantsetup) */; + data.byte(kTimedy) = bh; + data.byte(kTimedx) = bl; + data.word(kCounttotimed) = cx; + _add(dx, cx); + data.word(kTimecount) = dx; + bl = al; + bh = 0; + _add(bx, bx); + es = data.word(kPuzzletext); + cx = (66*2); + ax = es.word(bx); + _add(ax, cx); + bx = ax; + data.word(kTimedseg) = es; + data.word(kTimedoffset) = bx; +} + +void DreamGenContext::setuptimedtemp() { + STACK_CHECK; + _cmp(ah, 0); + if (flags.z()) + goto notloadspeech3; + dl = 'T'; + dh = ah; + cl = 'T'; + ah = 0; + loadspeech(); + _cmp(data.byte(kSpeechloaded), 1); + if (!flags.z()) + goto notloadspeech3; + al = 50+12; + playchannel1(); + return; +notloadspeech3: + _cmp(data.word(kTimecount), 0); + if (!flags.z()) + return /* (cantsetup2) */; + data.byte(kTimedy) = bh; + data.byte(kTimedx) = bl; + data.word(kCounttotimed) = cx; + _add(dx, cx); + data.word(kTimecount) = dx; + bl = al; + bh = 0; + _add(bx, bx); + es = data.word(kTextfile1); + cx = (66*2); + ax = es.word(bx); + _add(ax, cx); + bx = ax; + data.word(kTimedseg) = es; + data.word(kTimedoffset) = bx; +} + +void DreamGenContext::usetimedtext() { + STACK_CHECK; + _cmp(data.word(kTimecount), 0); + if (flags.z()) + return /* (notext) */; + _dec(data.word(kTimecount)); + _cmp(data.word(kTimecount), 0); + if (flags.z()) + goto deltimedtext; + ax = data.word(kTimecount); + _cmp(ax, data.word(kCounttotimed)); + if (flags.z()) + goto firsttimed; + if (!flags.c()) + return /* (notext) */; + goto notfirsttimed; +firsttimed: + getundertimed(); +notfirsttimed: + bl = data.byte(kTimedy); + bh = 0; + al = data.byte(kTimedx); + ah = 0; + di = ax; + es = data.word(kTimedseg); + si = data.word(kTimedoffset); + dl = 237; + ah = 0; + printdirect(); + data.byte(kNeedtodumptimed) = 1; + return; +deltimedtext: + putundertimed(); + data.byte(kNeedtodumptimed) = 1; +} + +void DreamGenContext::edenscdplayer() { + STACK_CHECK; + showfirstuse(); + data.word(kWatchingtime) = 18*2; + data.word(kReeltowatch) = 25; + data.word(kEndwatchreel) = 42; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; +} + +void DreamGenContext::usewall() { + STACK_CHECK; + showfirstuse(); + _cmp(data.byte(kManspath), 3); + if (flags.z()) + goto gobackover; + data.word(kWatchingtime) = 30*2; + data.word(kReeltowatch) = 2; + data.word(kEndwatchreel) = 31; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + al = 3; + turnpathon(); + al = 4; + turnpathon(); + al = 0; + turnpathoff(); + al = 1; + turnpathoff(); + al = 2; + turnpathoff(); + al = 5; + turnpathoff(); + data.byte(kManspath) = 3; + data.byte(kFinaldest) = 3; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + switchryanoff(); + return; +gobackover: + data.word(kWatchingtime) = 30*2; + data.word(kReeltowatch) = 34; + data.word(kEndwatchreel) = 60; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + al = 3; + turnpathoff(); + al = 4; + turnpathoff(); + al = 0; + turnpathon(); + al = 1; + turnpathon(); + al = 2; + turnpathon(); + al = 5; + turnpathon(); + data.byte(kManspath) = 5; + data.byte(kFinaldest) = 5; + findxyfrompath(); + data.byte(kResetmanxy) = 1; + switchryanoff(); +} + +void DreamGenContext::usechurchgate() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto gatewith; + withwhat(); + return; +gatewith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'C'; + ch = 'U'; + dl = 'T'; + dh = 'T'; + compare(); + if (flags.z()) + goto cutgate; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +cutgate: + showfirstuse(); + data.word(kWatchingtime) = 64*2; + data.word(kReeltowatch) = 4; + data.word(kEndwatchreel) = 70; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + al = 3; + turnpathon(); + _cmp(data.byte(kAidedead), 0); + if (flags.z()) + return /* (notopenchurch) */; + al = 2; + turnpathon(); +} + +void DreamGenContext::usegun() { + STACK_CHECK; + _cmp(data.byte(kObjecttype), 4); + if (flags.z()) + goto istakengun; + showseconduse(); + putbackobstuff(); + return; +istakengun: + _cmp(data.byte(kReallocation), 22); + if (!flags.z()) + goto notinpoolroom; + cx = 300; + al = 34; + showpuztext(); + data.byte(kLastweapon) = 1; + data.byte(kCombatcount) = 39; + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + return; +notinpoolroom: + _cmp(data.byte(kReallocation), 25); + if (!flags.z()) + goto nothelicopter; + cx = 300; + al = 34; + showpuztext(); + data.byte(kLastweapon) = 1; + data.byte(kCombatcount) = 19; + data.byte(kGetback) = 1; + data.byte(kDreamnumber) = 2; + data.byte(kRoomafterdream) = 38; + data.byte(kSartaindead) = 1; + _inc(data.byte(kProgresspoints)); + return; +nothelicopter: + _cmp(data.byte(kReallocation), 27); + if (!flags.z()) + goto notinrockroom; + cx = 300; + al = 46; + showpuztext(); + data.byte(kPointermode) = 2; + data.byte(kRockstardead) = 1; + data.byte(kLastweapon) = 1; + data.byte(kNewsitem) = 1; + data.byte(kGetback) = 1; + data.byte(kRoomafterdream) = 32; + data.byte(kDreamnumber) = 0; + _inc(data.byte(kProgresspoints)); + return; +notinrockroom: + _cmp(data.byte(kReallocation), 8); + if (!flags.z()) + goto notbystudio; + _cmp(data.byte(kMapx), 22); + if (!flags.z()) + goto notbystudio; + _cmp(data.byte(kMapy), 40); + if (!flags.z()) + goto notbystudio; + al = 92; + issetobonmap(); + if (flags.z()) + goto notbystudio; + _cmp(data.byte(kManspath), 9); + if (flags.z()) + goto notbystudio; + data.byte(kDestination) = 9; + data.byte(kFinaldest) = 9; + autosetwalk(); + data.byte(kLastweapon) = 1; + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + return; +notbystudio: + _cmp(data.byte(kReallocation), 6); + if (!flags.z()) + goto notsarters; + _cmp(data.byte(kMapx), 11); + if (!flags.z()) + goto notsarters; + _cmp(data.byte(kMapy), 20); + if (!flags.z()) + goto notsarters; + al = 5; + issetobonmap(); + if (!flags.z()) + goto notsarters; + data.byte(kDestination) = 1; + data.byte(kFinaldest) = 1; + autosetwalk(); + al = 5; + removesetobject(); + al = 6; + placesetobject(); + al = 1; + ah = data.byte(kRoomnum); + _dec(ah); + turnanypathon(); + data.byte(kLiftflag) = 1; + data.word(kWatchingtime) = 40*2; + data.word(kReeltowatch) = 4; + data.word(kEndwatchreel) = 43; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + return; +notsarters: + _cmp(data.byte(kReallocation), 29); + if (!flags.z()) + goto notaide; + data.byte(kGetback) = 1; + al = 13; + resetlocation(); + al = 12; + setlocation(); + data.byte(kDestpos) = 12; + data.byte(kDestination) = 2; + data.byte(kFinaldest) = 2; + autosetwalk(); + data.word(kWatchingtime) = 164*2; + data.word(kReeltowatch) = 3; + data.word(kEndwatchreel) = 164; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kAidedead) = 1; + data.byte(kDreamnumber) = 3; + data.byte(kRoomafterdream) = 33; + _inc(data.byte(kProgresspoints)); + return; +notaide: + _cmp(data.byte(kReallocation), 23); + if (!flags.z()) + goto notwithboss; + _cmp(data.byte(kMapx), 0); + if (!flags.z()) + goto notwithboss; + _cmp(data.byte(kMapy), 50); + if (!flags.z()) + goto notwithboss; + _cmp(data.byte(kManspath), 5); + if (flags.z()) + goto pathokboss; + data.byte(kDestination) = 5; + data.byte(kFinaldest) = 5; + autosetwalk(); +pathokboss: + data.byte(kLastweapon) = 1; + data.byte(kGetback) = 1; + return; +notwithboss: + _cmp(data.byte(kReallocation), 8); + if (!flags.z()) + goto nottvsoldier; + _cmp(data.byte(kMapx), 11); + if (!flags.z()) + goto nottvsoldier; + _cmp(data.byte(kMapy), 10); + if (!flags.z()) + goto nottvsoldier; + _cmp(data.byte(kManspath), 2); + if (flags.z()) + goto pathoktv; + data.byte(kDestination) = 2; + data.byte(kFinaldest) = 2; + autosetwalk(); +pathoktv: + data.byte(kLastweapon) = 1; + data.byte(kGetback) = 1; + return; +nottvsoldier: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::useshield() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 20); + if (!flags.z()) + goto notinsartroom; + _cmp(data.byte(kCombatcount), 0); + if (flags.z()) + goto notinsartroom; + data.byte(kLastweapon) = 3; + showseconduse(); + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + removeobfrominv(); + return; +notinsartroom: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::usebuttona() { + STACK_CHECK; + al = 95; + issetobonmap(); + if (flags.z()) + goto donethisbit; + showfirstuse(); + al = 0; + ah = data.byte(kRoomnum); + _dec(ah); + turnanypathon(); + al = 9; + removesetobject(); + al = 95; + placesetobject(); + data.word(kWatchingtime) = 15*2; + data.word(kReeltowatch) = 71; + data.word(kEndwatchreel) = 85; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + return; +donethisbit: + showseconduse(); + putbackobstuff(); +} + +void DreamGenContext::useplate() { + STACK_CHECK; + _cmp(data.byte(kWithobject), 255); + if (!flags.z()) + goto platewith; + withwhat(); + return; +platewith: + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'S'; + ch = 'C'; + dl = 'R'; + dh = 'W'; + compare(); + if (flags.z()) + goto unscrewplate; + al = data.byte(kWithobject); + ah = data.byte(kWithtype); + cl = 'K'; + ch = 'N'; + dl = 'F'; + dh = 'E'; + compare(); + if (flags.z()) + goto triedknife; + cx = 300; + al = 14; + showpuztext(); + putbackobstuff(); + return; +unscrewplate: + al = 20; + playchannel1(); + showfirstuse(); + al = 28; + placesetobject(); + al = 24; + placesetobject(); + al = 25; + removesetobject(); + al = 0; + placefreeobject(); + _inc(data.byte(kProgresspoints)); + data.byte(kGetback) = 1; + return; +triedknife: + cx = 300; + al = 54; + showpuztext(); + putbackobstuff(); +} + +void DreamGenContext::usewinch() { + STACK_CHECK; + al = 40; + ah = 1; + checkinside(); + _cmp(cl, (114)); + if (flags.z()) + goto nowinch; + al = cl; + ah = 4; + cl = 'F'; + ch = 'U'; + dl = 'S'; + dh = 'E'; + compare(); + if (!flags.z()) + goto nowinch; + data.word(kWatchingtime) = 217*2; + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 217; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + data.byte(kDestpos) = 1; + data.byte(kNewlocation) = 45; + data.byte(kDreamnumber) = 1; + data.byte(kRoomafterdream) = 44; + data.byte(kGeneraldead) = 1; + data.byte(kNewsitem) = 2; + data.byte(kGetback) = 1; + _inc(data.byte(kProgresspoints)); + return; +nowinch: + showfirstuse(); + putbackobstuff(); +} + +void DreamGenContext::entercode() { + STACK_CHECK; + data.word(kKeypadax) = ax; + data.word(kKeypadcx) = cx; + getridofreels(); + loadkeypad(); + createpanel(); + showicon(); + showouterpad(); + showkeypad(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + data.word(kPresspointer) = 0; + data.byte(kGetback) = 0; +keypadloop: + delpointer(); + readmouse(); + showkeypad(); + showpointer(); + _cmp(data.byte(kPresscount), 0); + if (flags.z()) + goto nopresses; + _dec(data.byte(kPresscount)); + goto afterpress; +nopresses: + data.byte(kPressed) = 255; + data.byte(kGraphicpress) = 255; + vsync(); +afterpress: + dumppointer(); + dumpkeypad(); + dumptextline(); + bx = 3482; + checkcoords(); + _cmp(data.byte(kGetback), 1); + if (flags.z()) + goto numberright; + _cmp(data.byte(kLightcount), 1); + if (!flags.z()) + goto notendkey; + _cmp(data.byte(kLockstatus), 0); + if (flags.z()) + goto numberright; + goto keypadloop; +notendkey: + _cmp(data.byte(kPresscount), 40); + if (!flags.z()) + goto keypadloop; + addtopresslist(); + _cmp(data.byte(kPressed), 11); + if (!flags.z()) + goto keypadloop; + ax = data.word(kKeypadax); + cx = data.word(kKeypadcx); + isitright(); + if (!flags.z()) + goto incorrect; + data.byte(kLockstatus) = 0; + al = 11; + playchannel1(); + data.byte(kLightcount) = 120; + data.word(kPresspointer) = 0; + goto keypadloop; +incorrect: + al = 11; + playchannel1(); + data.byte(kLightcount) = 120; + data.word(kPresspointer) = 0; + goto keypadloop; +numberright: + data.byte(kManisoffscreen) = 0; + getridoftemp(); + restorereels(); + redrawmainscrn(); + worktoscreenm(); +} + +void DreamGenContext::loadkeypad() { + STACK_CHECK; + dx = 1948; + loadintotemp(); +} + +void DreamGenContext::quitkey() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 222); + if (flags.z()) + goto alreadyqk; + data.byte(kCommandtype) = 222; + al = 4; + commandonly(); +alreadyqk: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notqk) */; + _and(ax, 1); + if (!flags.z()) + goto doqk; + return; +doqk: + data.byte(kGetback) = 1; +} + +void DreamGenContext::addtopresslist() { + STACK_CHECK; + _cmp(data.word(kPresspointer), 5); + if (flags.z()) + return /* (nomorekeys) */; + al = data.byte(kPressed); + _cmp(al, 10); + if (!flags.z()) + goto not10; + al = 0; +not10: + bx = data.word(kPresspointer); + dx = data; + es = dx; + _add(bx, 8573); + es.byte(bx) = al; + _inc(data.word(kPresspointer)); +} + +void DreamGenContext::buttonone() { + STACK_CHECK; + cl = 1; + buttonpress(); +} + +void DreamGenContext::buttontwo() { + STACK_CHECK; + cl = 2; + buttonpress(); +} + +void DreamGenContext::buttonthree() { + STACK_CHECK; + cl = 3; + buttonpress(); +} + +void DreamGenContext::buttonfour() { + STACK_CHECK; + cl = 4; + buttonpress(); +} + +void DreamGenContext::buttonfive() { + STACK_CHECK; + cl = 5; + buttonpress(); +} + +void DreamGenContext::buttonsix() { + STACK_CHECK; + cl = 6; + buttonpress(); +} + +void DreamGenContext::buttonseven() { + STACK_CHECK; + cl = 7; + buttonpress(); +} + +void DreamGenContext::buttoneight() { + STACK_CHECK; + cl = 8; + buttonpress(); +} + +void DreamGenContext::buttonnine() { + STACK_CHECK; + cl = 9; + buttonpress(); +} + +void DreamGenContext::buttonnought() { + STACK_CHECK; + cl = 10; + buttonpress(); +} + +void DreamGenContext::buttonenter() { + STACK_CHECK; + cl = 11; + buttonpress(); +} + +void DreamGenContext::buttonpress() { + STACK_CHECK; + ch = cl; + _add(ch, 100); + _cmp(data.byte(kCommandtype), ch); + if (flags.z()) + goto alreadyb; + data.byte(kCommandtype) = ch; + al = cl; + _add(al, 4); + push(cx); + commandonly(); + cx = pop(); +alreadyb: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notb) */; + _and(ax, 1); + if (!flags.z()) + goto dob; + return; +dob: + data.byte(kPressed) = cl; + _add(cl, 21); + data.byte(kGraphicpress) = cl; + data.byte(kPresscount) = 40; + _cmp(cl, 32); + if (flags.z()) + return /* (nonoise) */; + al = 10; + playchannel1(); +} + +void DreamGenContext::showouterpad() { + STACK_CHECK; + di = (36+112)-3; + bx = (72)-4; + ds = data.word(kTempgraphics); + al = 1; + ah = 0; + showframe(); + di = (36+112)+74; + bx = (72)+76; + ds = data.word(kTempgraphics); + al = 37; + ah = 0; + showframe(); +} + +void DreamGenContext::showkeypad() { + STACK_CHECK; + al = 22; + di = (36+112)+9; + bx = (72)+5; + singlekey(); + al = 23; + di = (36+112)+31; + bx = (72)+5; + singlekey(); + al = 24; + di = (36+112)+53; + bx = (72)+5; + singlekey(); + al = 25; + di = (36+112)+9; + bx = (72)+23; + singlekey(); + al = 26; + di = (36+112)+31; + bx = (72)+23; + singlekey(); + al = 27; + di = (36+112)+53; + bx = (72)+23; + singlekey(); + al = 28; + di = (36+112)+9; + bx = (72)+41; + singlekey(); + al = 29; + di = (36+112)+31; + bx = (72)+41; + singlekey(); + al = 30; + di = (36+112)+53; + bx = (72)+41; + singlekey(); + al = 31; + di = (36+112)+9; + bx = (72)+59; + singlekey(); + al = 32; + di = (36+112)+31; + bx = (72)+59; + singlekey(); + _cmp(data.byte(kLightcount), 0); + if (flags.z()) + return /* (notenter) */; + _dec(data.byte(kLightcount)); + al = 36; + bx = (72)-1+63; + _cmp(data.byte(kLockstatus), 0); + if (!flags.z()) + goto changelight; + al = 41; + bx = (72)+4+63; +changelight: + _cmp(data.byte(kLightcount), 60); + if (flags.c()) + goto gotlight; + _cmp(data.byte(kLightcount), 100); + if (!flags.c()) + goto gotlight; + _dec(al); +gotlight: + ds = data.word(kTempgraphics); + ah = 0; + di = (36+112)+60; + showframe(); +} + +void DreamGenContext::singlekey() { + STACK_CHECK; + _cmp(data.byte(kGraphicpress), al); + if (!flags.z()) + goto gotkey; + _add(al, 11); + _cmp(data.byte(kPresscount), 8); + if (!flags.c()) + goto gotkey; + _sub(al, 11); +gotkey: + ds = data.word(kTempgraphics); + _sub(al, 20); + ah = 0; + showframe(); +} + +void DreamGenContext::dumpkeypad() { + STACK_CHECK; + di = (36+112)-3; + bx = (72)-4; + cl = 120; + ch = 90; + multidump(); +} + +void DreamGenContext::usemenu() { + STACK_CHECK; + getridofreels(); + loadmenu(); + createpanel(); + showpanel(); + showicon(); + data.byte(kNewobs) = 0; + drawfloor(); + printsprites(); + al = 4; + ah = 0; + di = (80+40)-48; + bx = (60)-4; + ds = data.word(kTempgraphics2); + showframe(); + getundermenu(); + al = 5; + ah = 0; + di = (80+40)+54; + bx = (60)+72; + ds = data.word(kTempgraphics2); + showframe(); + worktoscreenm(); + data.byte(kGetback) = 0; +menuloop: + delpointer(); + putundermenu(); + showmenu(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumpmenu(); + dumptextline(); + bx = 3614; + checkcoords(); + _cmp(data.byte(kGetback), 1); + if (!flags.z()) + goto menuloop; + data.byte(kManisoffscreen) = 0; + redrawmainscrn(); + getridoftemp(); + getridoftemp2(); + restorereels(); + worktoscreenm(); +} + +void DreamGenContext::dumpmenu() { + STACK_CHECK; + di = (80+40); + bx = (60); + cl = 48; + ch = 48; + multidump(); +} + +void DreamGenContext::getundermenu() { + STACK_CHECK; + di = (80+40); + bx = (60); + cl = 48; + ch = 48; + ds = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)); + multiget(); +} + +void DreamGenContext::putundermenu() { + STACK_CHECK; + di = (80+40); + bx = (60); + cl = 48; + ch = 48; + ds = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)); + multiput(); +} + +void DreamGenContext::showoutermenu() { + STACK_CHECK; + al = 40; + ah = 0; + di = (80+40)-34; + bx = (60)-40; + ds = data.word(kTempgraphics); + showframe(); + al = 41; + ah = 0; + di = (80+40)+64-34; + bx = (60)-40; + ds = data.word(kTempgraphics); + showframe(); + al = 42; + ah = 0; + di = (80+40)-26; + bx = (60)+57-40; + ds = data.word(kTempgraphics); + showframe(); + al = 43; + ah = 0; + di = (80+40)+64-26; + bx = (60)+57-40; + ds = data.word(kTempgraphics); + showframe(); +} + +void DreamGenContext::showmenu() { + STACK_CHECK; + _inc(data.byte(kMenucount)); + _cmp(data.byte(kMenucount), 37*2); + if (!flags.z()) + goto menuframeok; + data.byte(kMenucount) = 0; +menuframeok: + al = data.byte(kMenucount); + _shr(al, 1); + ah = 0; + di = (80+40); + bx = (60); + ds = data.word(kTempgraphics); + showframe(); +} + +void DreamGenContext::loadmenu() { + STACK_CHECK; + dx = 1832; + loadintotemp(); + dx = 1987; + loadintotemp2(); +} + +void DreamGenContext::viewfolder() { + STACK_CHECK; + data.byte(kManisoffscreen) = 1; + getridofall(); + loadfolder(); + data.byte(kFolderpage) = 0; + showfolder(); + worktoscreenm(); + data.byte(kGetback) = 0; +folderloop: + delpointer(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + bx = 3636; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto folderloop; + data.byte(kManisoffscreen) = 0; + getridoftemp(); + getridoftemp2(); + getridoftemp3(); + getridoftempcharset(); + restoreall(); + redrawmainscrn(); + worktoscreenm(); +} + +void DreamGenContext::nextfolder() { + STACK_CHECK; + _cmp(data.byte(kFolderpage), 12); + if (!flags.z()) + goto cannextf; + blank(); + return; +cannextf: + _cmp(data.byte(kCommandtype), 201); + if (flags.z()) + goto alreadynextf; + data.byte(kCommandtype) = 201; + al = 16; + commandonly(); +alreadynextf: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notnextf) */; + _cmp(ax, 1); + if (flags.z()) + goto donextf; + return; +donextf: + _inc(data.byte(kFolderpage)); + folderhints(); + delpointer(); + showfolder(); + data.word(kMousebutton) = 0; + bx = 3636; + checkcoords(); + worktoscreenm(); +} + +void DreamGenContext::folderhints() { + STACK_CHECK; + _cmp(data.byte(kFolderpage), 5); + if (!flags.z()) + goto notaideadd; + _cmp(data.byte(kAidedead), 1); + if (flags.z()) + goto notaideadd; + al = 13; + getlocation(); + _cmp(al, 1); + if (flags.z()) + goto notaideadd; + al = 13; + setlocation(); + showfolder(); + al = 30; + findtext1(); + di = 0; + bx = 86; + dl = 141; + ah = 16; + printdirect(); + worktoscreenm(); + cx = 200; + hangonp(); + return; +notaideadd: + _cmp(data.byte(kFolderpage), 9); + if (!flags.z()) + return /* (notaristoadd) */; + al = 7; + getlocation(); + _cmp(al, 1); + if (flags.z()) + return /* (notaristoadd) */; + al = 7; + setlocation(); + showfolder(); + al = 31; + findtext1(); + di = 0; + bx = 86; + dl = 141; + ah = 16; + printdirect(); + worktoscreenm(); + cx = 200; + hangonp(); +} + +void DreamGenContext::lastfolder() { + STACK_CHECK; + _cmp(data.byte(kFolderpage), 0); + if (!flags.z()) + goto canlastf; + blank(); + return; +canlastf: + _cmp(data.byte(kCommandtype), 202); + if (flags.z()) + goto alreadylastf; + data.byte(kCommandtype) = 202; + al = 17; + commandonly(); +alreadylastf: + _cmp(data.byte(kFolderpage), 0); + if (flags.z()) + return /* (notlastf) */; + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notlastf) */; + _cmp(ax, 1); + if (flags.z()) + goto dolastf; + return; +dolastf: + _dec(data.byte(kFolderpage)); + delpointer(); + showfolder(); + data.word(kMousebutton) = 0; + bx = 3636; + checkcoords(); + worktoscreenm(); +} + +void DreamGenContext::loadfolder() { + STACK_CHECK; + dx = 2299; + loadintotemp(); + dx = 2312; + loadintotemp2(); + dx = 2325; + loadintotemp3(); + dx = 1883; + loadtempcharset(); + dx = 2195; + loadtemptext(); +} + +void DreamGenContext::showfolder() { + STACK_CHECK; + data.byte(kCommandtype) = 255; + _cmp(data.byte(kFolderpage), 0); + if (flags.z()) + goto closedfolder; + usetempcharset(); + createpanel2(); + ds = data.word(kTempgraphics); + di = 0; + bx = 0; + al = 0; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = 143; + bx = 0; + al = 1; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = 0; + bx = 92; + al = 2; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = 143; + bx = 92; + al = 3; + ah = 0; + showframe(); + folderexit(); + _cmp(data.byte(kFolderpage), 1); + if (flags.z()) + goto noleftpage; + showleftpage(); +noleftpage: + _cmp(data.byte(kFolderpage), 12); + if (flags.z()) + goto norightpage; + showrightpage(); +norightpage: + usecharset1(); + undertextline(); + return; +closedfolder: + createpanel2(); + ds = data.word(kTempgraphics3); + di = 143-28; + bx = 0; + al = 0; + ah = 0; + showframe(); + ds = data.word(kTempgraphics3); + di = 143-28; + bx = 92; + al = 1; + ah = 0; + showframe(); + folderexit(); + undertextline(); +} + +void DreamGenContext::folderexit() { + STACK_CHECK; + ds = data.word(kTempgraphics2); + di = 296; + bx = 178; + al = 6; + ah = 0; + showframe(); +} + +void DreamGenContext::showleftpage() { + STACK_CHECK; + ds = data.word(kTempgraphics2); + di = 0; + bx = 12; + al = 3; + ah = 0; + showframe(); + bx = 12+5; + cx = 9; +leftpageloop: + push(cx); + push(bx); + ds = data.word(kTempgraphics2); + di = 0; + al = 4; + ah = 0; + showframe(); + bx = pop(); + cx = pop(); + _add(bx, 16); + if (--cx) + goto leftpageloop; + ds = data.word(kTempgraphics2); + di = 0; + al = 5; + ah = 0; + showframe(); + data.word(kLinespacing) = 8; + data.word(kCharshift) = 91; + data.byte(kKerning) = 1; + bl = data.byte(kFolderpage); + _dec(bl); + _dec(bl); + _add(bl, bl); + bh = 0; + _add(bx, bx); + es = data.word(kTextfile1); + si = es.word(bx); + _add(si, 66*2); + di = 2; + bx = 48; + dl = 140; + cx = 2; +twolotsleft: + push(cx); +contleftpage: + printdirect(); + _add(bx, data.word(kLinespacing)); + _cmp(al, 0); + if (!flags.z()) + goto contleftpage; + cx = pop(); + if (--cx) + goto twolotsleft; + data.byte(kKerning) = 0; + data.word(kCharshift) = 0; + data.word(kLinespacing) = 10; + es = data.word(kWorkspace); + ds = data.word(kWorkspace); + di = (48*320)+2; + si = (48*320)+2+130; + cx = 120; +flipfolder: + push(cx); + push(di); + push(si); + cx = 65; +flipfolderline: + al = es.byte(di); + ah = es.byte(si); + es.byte(di) = ah; + es.byte(si) = al; + _dec(si); + _inc(di); + if (--cx) + goto flipfolderline; + si = pop(); + di = pop(); + cx = pop(); + _add(si, 320); + _add(di, 320); + if (--cx) + goto flipfolder; +} + +void DreamGenContext::showrightpage() { + STACK_CHECK; + ds = data.word(kTempgraphics2); + di = 143; + bx = 12; + al = 0; + ah = 0; + showframe(); + bx = 12+37; + cx = 7; +rightpageloop: + push(cx); + push(bx); + ds = data.word(kTempgraphics2); + di = 143; + al = 1; + ah = 0; + showframe(); + bx = pop(); + cx = pop(); + _add(bx, 16); + if (--cx) + goto rightpageloop; + ds = data.word(kTempgraphics2); + di = 143; + al = 2; + ah = 0; + showframe(); + data.word(kLinespacing) = 8; + data.byte(kKerning) = 1; + bl = data.byte(kFolderpage); + _dec(bl); + _add(bl, bl); + bh = 0; + _add(bx, bx); + es = data.word(kTextfile1); + si = es.word(bx); + _add(si, 66*2); + di = 152; + bx = 48; + dl = 140; + cx = 2; +twolotsright: + push(cx); +contrightpage: + printdirect(); + _add(bx, data.word(kLinespacing)); + _cmp(al, 0); + if (!flags.z()) + goto contrightpage; + cx = pop(); + if (--cx) + goto twolotsright; + data.byte(kKerning) = 0; + data.word(kLinespacing) = 10; +} + +void DreamGenContext::entersymbol() { + STACK_CHECK; + data.byte(kManisoffscreen) = 1; + getridofreels(); + dx = 2338; + loadintotemp(); + data.byte(kSymboltopx) = 24; + data.byte(kSymboltopdir) = 0; + data.byte(kSymbolbotx) = 24; + data.byte(kSymbolbotdir) = 0; + redrawmainscrn(); + showsymbol(); + undertextline(); + worktoscreenm(); + data.byte(kGetback) = 0; +symbolloop: + delpointer(); + updatesymboltop(); + updatesymbolbot(); + showsymbol(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + dumpsymbol(); + bx = 3678; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto symbolloop; + _cmp(data.byte(kSymbolbotnum), 3); + if (!flags.z()) + goto symbolwrong; + _cmp(data.byte(kSymboltopnum), 5); + if (!flags.z()) + goto symbolwrong; + al = 43; + removesetobject(); + al = 46; + placesetobject(); + ah = data.byte(kRoomnum); + _add(ah, 12); + al = 0; + turnanypathon(); + data.byte(kManisoffscreen) = 0; + redrawmainscrn(); + getridoftemp(); + restorereels(); + worktoscreenm(); + al = 13; + playchannel1(); + return; +symbolwrong: + al = 46; + removesetobject(); + al = 43; + placesetobject(); + ah = data.byte(kRoomnum); + _add(ah, 12); + al = 0; + turnanypathoff(); + data.byte(kManisoffscreen) = 0; + redrawmainscrn(); + getridoftemp(); + restorereels(); + worktoscreenm(); +} + +void DreamGenContext::quitsymbol() { + STACK_CHECK; + _cmp(data.byte(kSymboltopx), 24); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kSymbolbotx), 24); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 222); + if (flags.z()) + goto alreadyqs; + data.byte(kCommandtype) = 222; + al = 18; + commandonly(); +alreadyqs: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notqs) */; + _and(ax, 1); + if (!flags.z()) + goto doqs; + return; +doqs: + data.byte(kGetback) = 1; +} + +void DreamGenContext::settopleft() { + STACK_CHECK; + _cmp(data.byte(kSymboltopdir), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 210); + if (flags.z()) + goto alreadytopl; + data.byte(kCommandtype) = 210; + al = 19; + commandonly(); +alreadytopl: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (notopleft) */; + data.byte(kSymboltopdir) = -1; +} + +void DreamGenContext::settopright() { + STACK_CHECK; + _cmp(data.byte(kSymboltopdir), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 211); + if (flags.z()) + goto alreadytopr; + data.byte(kCommandtype) = 211; + al = 20; + commandonly(); +alreadytopr: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (notopright) */; + data.byte(kSymboltopdir) = 1; +} + +void DreamGenContext::setbotleft() { + STACK_CHECK; + _cmp(data.byte(kSymbolbotdir), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 212); + if (flags.z()) + goto alreadybotl; + data.byte(kCommandtype) = 212; + al = 21; + commandonly(); +alreadybotl: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (nobotleft) */; + data.byte(kSymbolbotdir) = -1; +} + +void DreamGenContext::setbotright() { + STACK_CHECK; + _cmp(data.byte(kSymbolbotdir), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 213); + if (flags.z()) + goto alreadybotr; + data.byte(kCommandtype) = 213; + al = 22; + commandonly(); +alreadybotr: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (nobotright) */; + data.byte(kSymbolbotdir) = 1; +} + +void DreamGenContext::dumpsymbol() { + STACK_CHECK; + data.byte(kNewtextline) = 0; + di = (64); + bx = (56)+20; + cl = 104; + ch = 60; + multidump(); +} + +void DreamGenContext::showsymbol() { + STACK_CHECK; + al = 12; + ah = 0; + di = (64); + bx = (56); + ds = data.word(kTempgraphics); + showframe(); + al = data.byte(kSymboltopx); + ah = 0; + di = ax; + _add(di, (64)-44); + al = data.byte(kSymboltopnum); + bx = (56)+20; + ds = data.word(kTempgraphics); + ah = 32; + push(ax); + push(di); + push(bx); + push(ds); + showframe(); + ds = pop(); + bx = pop(); + di = pop(); + ax = pop(); + nextsymbol(); + _add(di, 49); + push(ax); + push(di); + push(bx); + push(ds); + showframe(); + ds = pop(); + bx = pop(); + di = pop(); + ax = pop(); + nextsymbol(); + _add(di, 49); + showframe(); + al = data.byte(kSymbolbotx); + ah = 0; + di = ax; + _add(di, (64)-44); + al = data.byte(kSymbolbotnum); + _add(al, 6); + bx = (56)+49; + ds = data.word(kTempgraphics); + ah = 32; + push(ax); + push(di); + push(bx); + push(ds); + showframe(); + ds = pop(); + bx = pop(); + di = pop(); + ax = pop(); + nextsymbol(); + _add(di, 49); + push(ax); + push(di); + push(bx); + push(ds); + showframe(); + ds = pop(); + bx = pop(); + di = pop(); + ax = pop(); + nextsymbol(); + _add(di, 49); + showframe(); +} + +void DreamGenContext::nextsymbol() { + STACK_CHECK; + _inc(al); + _cmp(al, 6); + if (flags.z()) + goto topwrap; + _cmp(al, 12); + if (flags.z()) + goto botwrap; + return; +topwrap: + al = 0; + return; +botwrap: + al = 6; +} + +void DreamGenContext::updatesymboltop() { + STACK_CHECK; + _cmp(data.byte(kSymboltopdir), 0); + if (flags.z()) + return /* (topfinished) */; + _cmp(data.byte(kSymboltopdir), -1); + if (flags.z()) + goto backwards; + _inc(data.byte(kSymboltopx)); + _cmp(data.byte(kSymboltopx), 49); + if (!flags.z()) + goto notwrapfor; + data.byte(kSymboltopx) = 0; + _dec(data.byte(kSymboltopnum)); + _cmp(data.byte(kSymboltopnum), -1); + if (!flags.z()) + return /* (topfinished) */; + data.byte(kSymboltopnum) = 5; + return; +notwrapfor: + _cmp(data.byte(kSymboltopx), 24); + if (!flags.z()) + return /* (topfinished) */; + data.byte(kSymboltopdir) = 0; + return; +backwards: + _dec(data.byte(kSymboltopx)); + _cmp(data.byte(kSymboltopx), -1); + if (!flags.z()) + goto notwrapback; + data.byte(kSymboltopx) = 48; + _inc(data.byte(kSymboltopnum)); + _cmp(data.byte(kSymboltopnum), 6); + if (!flags.z()) + return /* (topfinished) */; + data.byte(kSymboltopnum) = 0; + return; +notwrapback: + _cmp(data.byte(kSymboltopx), 24); + if (!flags.z()) + return /* (topfinished) */; + data.byte(kSymboltopdir) = 0; +} + +void DreamGenContext::updatesymbolbot() { + STACK_CHECK; + _cmp(data.byte(kSymbolbotdir), 0); + if (flags.z()) + return /* (botfinished) */; + _cmp(data.byte(kSymbolbotdir), -1); + if (flags.z()) + goto backwardsbot; + _inc(data.byte(kSymbolbotx)); + _cmp(data.byte(kSymbolbotx), 49); + if (!flags.z()) + goto notwrapforb; + data.byte(kSymbolbotx) = 0; + _dec(data.byte(kSymbolbotnum)); + _cmp(data.byte(kSymbolbotnum), -1); + if (!flags.z()) + return /* (botfinished) */; + data.byte(kSymbolbotnum) = 5; + return; +notwrapforb: + _cmp(data.byte(kSymbolbotx), 24); + if (!flags.z()) + return /* (botfinished) */; + data.byte(kSymbolbotdir) = 0; + return; +backwardsbot: + _dec(data.byte(kSymbolbotx)); + _cmp(data.byte(kSymbolbotx), -1); + if (!flags.z()) + goto notwrapbackb; + data.byte(kSymbolbotx) = 48; + _inc(data.byte(kSymbolbotnum)); + _cmp(data.byte(kSymbolbotnum), 6); + if (!flags.z()) + return /* (botfinished) */; + data.byte(kSymbolbotnum) = 0; + return; +notwrapbackb: + _cmp(data.byte(kSymbolbotx), 24); + if (!flags.z()) + return /* (botfinished) */; + data.byte(kSymbolbotdir) = 0; +} + +void DreamGenContext::dumpsymbox() { + STACK_CHECK; + _cmp(data.word(kDumpx), -1); + if (flags.z()) + return /* (nodumpsym) */; + di = data.word(kDumpx); + bx = data.word(kDumpy); + cl = 30; + ch = 77; + multidump(); + data.word(kDumpx) = -1; +} + +void DreamGenContext::usediary() { + STACK_CHECK; + getridofreels(); + dx = 2039; + loadintotemp(); + dx = 2208; + loadtemptext(); + dx = 1883; + loadtempcharset(); + createpanel(); + showicon(); + showdiary(); + undertextline(); + showdiarypage(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + data.byte(kGetback) = 0; +diaryloop: + delpointer(); + readmouse(); + showdiarykeys(); + showpointer(); + vsync(); + dumppointer(); + dumpdiarykeys(); + dumptextline(); + bx = 3740; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto diaryloop; + getridoftemp(); + getridoftemptext(); + getridoftempcharset(); + restorereels(); + data.byte(kManisoffscreen) = 0; + redrawmainscrn(); + worktoscreenm(); +} + +void DreamGenContext::showdiary() { + STACK_CHECK; + al = 1; + ah = 0; + di = (68+24); + bx = (48+12)+37; + ds = data.word(kTempgraphics); + showframe(); + al = 2; + ah = 0; + di = (68+24)+176; + bx = (48+12)+108; + ds = data.word(kTempgraphics); + showframe(); +} + +void DreamGenContext::showdiarykeys() { + STACK_CHECK; + _cmp(data.byte(kPresscount), 0); + if (flags.z()) + return /* (nokeyatall) */; + _dec(data.byte(kPresscount)); + _cmp(data.byte(kPresscount), 0); + if (flags.z()) + return /* (nokeyatall) */; + _cmp(data.byte(kPressed), 'N'); + if (!flags.z()) + goto nokeyn; + al = 3; + _cmp(data.byte(kPresscount), 1); + if (flags.z()) + goto gotkeyn; + al = 4; +gotkeyn: + ah = 0; + di = (68+24)+94; + bx = (48+12)+97; + ds = data.word(kTempgraphics); + showframe(); + _cmp(data.byte(kPresscount), 1); + if (!flags.z()) + return /* (notshown) */; + showdiarypage(); + return; +nokeyn: + al = 5; + _cmp(data.byte(kPresscount), 1); + if (flags.z()) + goto gotkeyp; + al = 6; +gotkeyp: + ah = 0; + di = (68+24)+151; + bx = (48+12)+71; + ds = data.word(kTempgraphics); + showframe(); + _cmp(data.byte(kPresscount), 1); + if (!flags.z()) + return /* (notshowp) */; + showdiarypage(); +} + +void DreamGenContext::dumpdiarykeys() { + STACK_CHECK; + _cmp(data.byte(kPresscount), 1); + if (!flags.z()) + goto notdumpdiary; + _cmp(data.byte(kSartaindead), 1); + if (flags.z()) + goto notsartadd; + _cmp(data.byte(kDiarypage), 5); + if (!flags.z()) + goto notsartadd; + _cmp(data.byte(kDiarypage), 5); + if (!flags.z()) + goto notsartadd; + al = 6; + getlocation(); + _cmp(al, 1); + if (flags.z()) + goto notsartadd; + al = 6; + setlocation(); + delpointer(); + al = 12; + findtext1(); + di = 70; + bx = 106; + dl = 241; + ah = 16; + printdirect(); + worktoscreenm(); + cx = 200; + hangonp(); + createpanel(); + showicon(); + showdiary(); + showdiarypage(); + worktoscreenm(); + showpointer(); + return; +notsartadd: + di = (68+24)+48; + bx = (48+12)+15; + cl = 200; + ch = 16; + multidump(); +notdumpdiary: + di = (68+24)+94; + bx = (48+12)+97; + cl = 16; + ch = 16; + multidump(); + di = (68+24)+151; + bx = (48+12)+71; + cl = 16; + ch = 16; + multidump(); +} + +void DreamGenContext::diarykeyp() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 214); + if (flags.z()) + goto alreadykeyp; + data.byte(kCommandtype) = 214; + al = 23; + commandonly(); +alreadykeyp: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (notkeyp) */; + ax = data.word(kOldbutton); + _cmp(ax, data.word(kMousebutton)); + if (flags.z()) + return /* (notkeyp) */; + _cmp(data.byte(kPresscount), 0); + if (!flags.z()) + return /* (notkeyp) */; + al = 16; + playchannel1(); + data.byte(kPresscount) = 12; + data.byte(kPressed) = 'P'; + _dec(data.byte(kDiarypage)); + _cmp(data.byte(kDiarypage), -1); + if (!flags.z()) + return /* (notkeyp) */; + data.byte(kDiarypage) = 11; +} + +void DreamGenContext::diarykeyn() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 213); + if (flags.z()) + goto alreadykeyn; + data.byte(kCommandtype) = 213; + al = 23; + commandonly(); +alreadykeyn: + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (notkeyn) */; + ax = data.word(kOldbutton); + _cmp(ax, data.word(kMousebutton)); + if (flags.z()) + return /* (notkeyn) */; + _cmp(data.byte(kPresscount), 0); + if (!flags.z()) + return /* (notkeyn) */; + al = 16; + playchannel1(); + data.byte(kPresscount) = 12; + data.byte(kPressed) = 'N'; + _inc(data.byte(kDiarypage)); + _cmp(data.byte(kDiarypage), 12); + if (!flags.z()) + return /* (notkeyn) */; + data.byte(kDiarypage) = 0; +} + +void DreamGenContext::showdiarypage() { + STACK_CHECK; + al = 0; + ah = 0; + di = (68+24); + bx = (48+12); + ds = data.word(kTempgraphics); + showframe(); + al = data.byte(kDiarypage); + findtext1(); + data.byte(kKerning) = 1; + usetempcharset(); + di = (68+24)+48; + bx = (48+12)+16; + dl = 240; + ah = 16; + data.word(kCharshift) = 91+91; + printdirect(); + di = (68+24)+129; + bx = (48+12)+16; + dl = 240; + ah = 16; + printdirect(); + di = (68+24)+48; + bx = (48+12)+23; + dl = 240; + ah = 16; + printdirect(); + data.byte(kKerning) = 0; + data.word(kCharshift) = 0; + usecharset1(); +} + +void DreamGenContext::findtext1() { + STACK_CHECK; + ah = 0; + si = ax; + _add(si, si); + es = data.word(kTextfile1); + ax = es.word(si); + _add(ax, (66*2)); + si = ax; +} + +void DreamGenContext::zoomonoff() { + STACK_CHECK; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kPointermode), 2); + if (flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 222); + if (flags.z()) + goto alreadyonoff; + data.byte(kCommandtype) = 222; + al = 39; + commandonly(); +alreadyonoff: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nozoomonoff) */; + _and(ax, 1); + if (!flags.z()) + goto dozoomonoff; + return; +dozoomonoff: + al = data.byte(kZoomon); + _xor(al, 1); + data.byte(kZoomon) = al; + createpanel(); + data.byte(kNewobs) = 0; + drawfloor(); + printsprites(); + reelsonscreen(); + showicon(); + getunderzoom(); + undertextline(); + al = 39; + commandonly(); + readmouse(); + worktoscreenm(); +} + +void DreamGenContext::saveload() { + STACK_CHECK; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + { blank(); return; }; + _cmp(data.byte(kPointermode), 2); + if (flags.z()) + { blank(); return; }; + _cmp(data.byte(kCommandtype), 253); + if (flags.z()) + goto alreadyops; + data.byte(kCommandtype) = 253; + al = 43; + commandonly(); +alreadyops: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (noops) */; + _and(ax, 1); + if (flags.z()) + return /* (noops) */; + dosaveload(); +} + +void DreamGenContext::dosaveload() { + STACK_CHECK; + data.byte(kPointerframe) = 0; + data.word(kTextaddressx) = 70; + data.word(kTextaddressy) = 182-8; + data.byte(kTextlen) = 181; + data.byte(kManisoffscreen) = 1; + clearwork(); + createpanel2(); + undertextline(); + getridofall(); + loadsavebox(); + showopbox(); + showmainops(); + worktoscreen(); + goto donefirstops; +restartops: + showopbox(); + showmainops(); + worktoscreenm(); +donefirstops: + data.byte(kGetback) = 0; +waitops: + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + delpointer(); + bx = 3782; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto waitops; + _cmp(data.byte(kGetback), 2); + if (flags.z()) + goto restartops; + data.word(kTextaddressx) = 13; + data.word(kTextaddressy) = 182; + data.byte(kTextlen) = 240; + _cmp(data.byte(kGetback), 4); + if (flags.z()) + goto justret; + getridoftemp(); + restoreall(); + redrawmainscrn(); + worktoscreenm(); + data.byte(kCommandtype) = 200; +justret: + data.byte(kManisoffscreen) = 0; +} + +void DreamGenContext::getbackfromops() { + STACK_CHECK; + _cmp(data.byte(kMandead), 2); + if (flags.z()) + goto opsblock1; + getback1(); + return; +opsblock1: + blank(); +} + +void DreamGenContext::showmainops() { + STACK_CHECK; + ds = data.word(kTempgraphics); + di = (60)+10; + bx = (52)+10; + al = 8; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+59; + bx = (52)+30; + al = 7; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+128+4; + bx = (52)+12; + al = 1; + ah = 0; + showframe(); +} + +void DreamGenContext::showdiscops() { + STACK_CHECK; + ds = data.word(kTempgraphics); + di = (60)+128+4; + bx = (52)+12; + al = 1; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+10; + bx = (52)+10; + al = 9; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+59; + bx = (52)+30; + al = 10; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+176+2; + bx = (52)+60-4; + al = 5; + ah = 0; + showframe(); +} + +void DreamGenContext::loadsavebox() { + STACK_CHECK; + dx = 1961; + loadintotemp(); +} + +void DreamGenContext::loadgame() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 246); + if (flags.z()) + goto alreadyload; + data.byte(kCommandtype) = 246; + al = 41; + commandonly(); +alreadyload: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (noload) */; + _cmp(ax, 1); + if (flags.z()) + goto doload; + return; +doload: + data.byte(kLoadingorsave) = 1; + showopbox(); + showloadops(); + data.byte(kCurrentslot) = 0; + showslots(); + shownames(); + data.byte(kPointerframe) = 0; + worktoscreenm(); + namestoold(); + data.byte(kGetback) = 0; +loadops: + delpointer(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + bx = 3824; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto loadops; + _cmp(data.byte(kGetback), 2); + if (flags.z()) + return /* (quitloaded) */; + getridoftemp(); + dx = data; + es = dx; + bx = 7979; + startloading(); + loadroomssample(); + data.byte(kRoomloaded) = 1; + data.byte(kNewlocation) = 255; + clearsprites(); + initman(); + initrain(); + data.word(kTextaddressx) = 13; + data.word(kTextaddressy) = 182; + data.byte(kTextlen) = 240; + startup(); + worktoscreen(); + data.byte(kGetback) = 4; +} + +void DreamGenContext::getbacktoops() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 201); + if (flags.z()) + goto alreadygetops; + data.byte(kCommandtype) = 201; + al = 42; + commandonly(); +alreadygetops: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nogetbackops) */; + _and(ax, 1); + if (!flags.z()) + goto dogetbackops; + return; +dogetbackops: + oldtonames(); + data.byte(kGetback) = 2; +} + +void DreamGenContext::discops() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 249); + if (flags.z()) + goto alreadydiscops; + data.byte(kCommandtype) = 249; + al = 43; + commandonly(); +alreadydiscops: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (nodiscops) */; + _and(ax, 1); + if (!flags.z()) + goto dodiscops; + return; +dodiscops: + scanfornames(); + data.byte(kLoadingorsave) = 2; + showopbox(); + showdiscops(); + data.byte(kCurrentslot) = 0; + worktoscreenm(); + data.byte(kGetback) = 0; +discopsloop: + delpointer(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + bx = 3866; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto discopsloop; +} + +void DreamGenContext::savegame() { + STACK_CHECK; + _cmp(data.byte(kMandead), 2); + if (!flags.z()) + goto cansaveok; + blank(); + return; +cansaveok: + _cmp(data.byte(kCommandtype), 247); + if (flags.z()) + goto alreadysave; + data.byte(kCommandtype) = 247; + al = 44; + commandonly(); +alreadysave: + ax = data.word(kMousebutton); + _and(ax, 1); + if (!flags.z()) + goto dosave; + return; +dosave: + data.byte(kLoadingorsave) = 2; + showopbox(); + showsaveops(); + data.byte(kCurrentslot) = 0; + showslots(); + shownames(); + worktoscreenm(); + namestoold(); + data.word(kBufferin) = 0; + data.word(kBufferout) = 0; + data.byte(kGetback) = 0; +saveops: + delpointer(); + checkinput(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + bx = 3908; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto saveops; +} + +void DreamGenContext::actualsave() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 222); + if (flags.z()) + goto alreadyactsave; + data.byte(kCommandtype) = 222; + al = 44; + commandonly(); +alreadyactsave: + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return /* (noactsave) */; + dx = data; + ds = dx; + si = 8579; + al = data.byte(kCurrentslot); + ah = 0; + cx = 17; + _mul(cx); + _add(si, ax); + _inc(si); + _cmp(ds.byte(si), 0); + if (flags.z()) + return /* (noactsave) */; + al = data.byte(kLocation); + ah = 0; + cx = 32; + _mul(cx); + ds = cs; + si = 6187; + _add(si, ax); + di = 7979; + bx = di; + es = cs; + cx = 16; + _movsw(cx, true); + al = data.byte(kRoomssample); + es.byte(bx+13) = al; + al = data.byte(kMapx); + es.byte(bx+15) = al; + al = data.byte(kMapy); + es.byte(bx+16) = al; + al = data.byte(kLiftflag); + es.byte(bx+20) = al; + al = data.byte(kManspath); + es.byte(bx+21) = al; + al = data.byte(kFacing); + es.byte(bx+22) = al; + al = 255; + es.byte(bx+27) = al; + saveposition(); + getridoftemp(); + restoreall(); + data.word(kTextaddressx) = 13; + data.word(kTextaddressy) = 182; + data.byte(kTextlen) = 240; + redrawmainscrn(); + worktoscreenm(); + data.byte(kGetback) = 4; +} + +void DreamGenContext::actualload() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 221); + if (flags.z()) + goto alreadyactload; + data.byte(kCommandtype) = 221; + al = 41; + commandonly(); +alreadyactload: + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (notactload) */; + _cmp(ax, 1); + if (!flags.z()) + return /* (notactload) */; + dx = data; + ds = dx; + si = 8579; + al = data.byte(kCurrentslot); + ah = 0; + cx = 17; + _mul(cx); + _add(si, ax); + _inc(si); + _cmp(ds.byte(si), 0); + if (flags.z()) + return /* (notactload) */; + loadposition(); + data.byte(kGetback) = 1; +} + +void DreamGenContext::selectslot2() { + STACK_CHECK; + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + goto noselslot2; + data.byte(kLoadingorsave) = 2; +noselslot2: + selectslot(); +} + +void DreamGenContext::checkinput() { + STACK_CHECK; + _cmp(data.byte(kLoadingorsave), 3); + if (flags.z()) + return /* (nokeypress) */; + readkey(); + al = data.byte(kCurrentkey); + _cmp(al, 0); + if (flags.z()) + return /* (nokeypress) */; + _cmp(al, 13); + if (!flags.z()) + goto notret; + data.byte(kLoadingorsave) = 3; + goto afterkey; +notret: + _cmp(al, 8); + if (!flags.z()) + goto nodel2; + _cmp(data.byte(kCursorpos), 0); + if (flags.z()) + return /* (nokeypress) */; + getnamepos(); + _dec(data.byte(kCursorpos)); + es.byte(bx) = 0; + es.byte(bx+1) = 1; + goto afterkey; +nodel2: + _cmp(data.byte(kCursorpos), 14); + if (flags.z()) + return /* (nokeypress) */; + getnamepos(); + _inc(data.byte(kCursorpos)); + al = data.byte(kCurrentkey); + es.byte(bx+1) = al; + es.byte(bx+2) = 0; + es.byte(bx+3) = 1; + goto afterkey; + return; +afterkey: + showopbox(); + shownames(); + showslots(); + showsaveops(); + worktoscreenm(); +} + +void DreamGenContext::getnamepos() { + STACK_CHECK; + al = data.byte(kCurrentslot); + ah = 0; + cx = 17; + _mul(cx); + dx = data; + es = dx; + bx = 8579; + _add(bx, ax); + al = data.byte(kCursorpos); + ah = 0; + _add(bx, ax); +} + +void DreamGenContext::showopbox() { + STACK_CHECK; + ds = data.word(kTempgraphics); + di = (60); + bx = (52); + al = 0; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60); + bx = (52)+55; + al = 4; + ah = 0; + showframe(); +} + +void DreamGenContext::showloadops() { + STACK_CHECK; + ds = data.word(kTempgraphics); + di = (60)+128+4; + bx = (52)+12; + al = 1; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+176+2; + bx = (52)+60-4; + al = 5; + ah = 0; + showframe(); + di = (60)+104; + bx = (52)+14; + al = 55; + dl = 101; + printmessage(); +} + +void DreamGenContext::showsaveops() { + STACK_CHECK; + ds = data.word(kTempgraphics); + di = (60)+128+4; + bx = (52)+12; + al = 1; + ah = 0; + showframe(); + ds = data.word(kTempgraphics); + di = (60)+176+2; + bx = (52)+60-4; + al = 5; + ah = 0; + showframe(); + di = (60)+104; + bx = (52)+14; + al = 54; + dl = 101; + printmessage(); +} + +void DreamGenContext::selectslot() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 244); + if (flags.z()) + goto alreadysel; + data.byte(kCommandtype) = 244; + al = 45; + commandonly(); +alreadysel: + ax = data.word(kMousebutton); + _cmp(ax, 1); + if (!flags.z()) + return /* (noselslot) */; + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (noselslot) */; + _cmp(data.byte(kLoadingorsave), 3); + if (!flags.z()) + goto notnocurs; + _dec(data.byte(kLoadingorsave)); +notnocurs: + oldtonames(); + ax = data.word(kMousey); + _sub(ax, (52)+4); + cl = -1; +getslotnum: + _inc(cl); + _sub(ax, 11); + if (!flags.c()) + goto getslotnum; + data.byte(kCurrentslot) = cl; + delpointer(); + showopbox(); + showslots(); + shownames(); + _cmp(data.byte(kLoadingorsave), 1); + if (flags.z()) + goto isloadmode; + showsaveops(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); + return; +isloadmode: + showloadops(); + readmouse(); + showpointer(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::showslots() { + STACK_CHECK; + di = (60)+7; + bx = (52)+8; + al = 2; + ds = data.word(kTempgraphics); + ah = 0; + showframe(); + di = (60)+10; + bx = (52)+11; + cl = 0; +slotloop: + push(cx); + push(di); + push(bx); + _cmp(cl, data.byte(kCurrentslot)); + if (!flags.z()) + goto nomatchslot; + al = 3; + ds = data.word(kTempgraphics); + ah = 0; + showframe(); +nomatchslot: + bx = pop(); + di = pop(); + cx = pop(); + _add(bx, 10); + _inc(cl); + _cmp(cl, 7); + if (!flags.z()) + goto slotloop; +} + +void DreamGenContext::shownames() { + STACK_CHECK; + dx = data; + es = dx; + si = 8579+1; + di = (60)+21; + bx = (52)+10; + cl = 0; +shownameloop: + push(cx); + push(di); + push(es); + push(bx); + push(si); + al = 4; + _cmp(cl, data.byte(kCurrentslot)); + if (!flags.z()) + goto nomatchslot2; + _cmp(data.byte(kLoadingorsave), 2); + if (!flags.z()) + goto loadmode; + dx = si; + cx = 15; + _add(si, 15); +zerostill: + _dec(si); + _dec(cl); + _cmp(es.byte(si), 1); + if (!flags.z()) + goto foundcharacter; + goto zerostill; +foundcharacter: + data.byte(kCursorpos) = cl; + es.byte(si) = '/'; + es.byte(si+1) = 0; + push(si); + si = dx; + dl = 200; + ah = 0; + printdirect(); + si = pop(); + es.byte(si) = 0; + es.byte(si+1) = 1; + goto afterprintname; +loadmode: + al = 0; + dl = 200; + ah = 0; + data.word(kCharshift) = 91; + printdirect(); + data.word(kCharshift) = 0; + goto afterprintname; +nomatchslot2: + dl = 200; + ah = 0; + printdirect(); +afterprintname: + si = pop(); + bx = pop(); + es = pop(); + di = pop(); + cx = pop(); + _add(si, 17); + _add(bx, 10); + _inc(cl); + _cmp(cl, 7); + if (!flags.z()) + goto shownameloop; +} + +void DreamGenContext::namestoold() { + STACK_CHECK; + ds = cs; + si = 8579; + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)); + es = data.word(kBuffers); + cx = 17*4; + _movsb(cx, true); +} + +void DreamGenContext::oldtonames() { + STACK_CHECK; + es = cs; + di = 8579; + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)); + ds = data.word(kBuffers); + cx = 17*4; + _movsb(cx, true); +} + +void DreamGenContext::saveposition() { + STACK_CHECK; + makeheader(); + al = data.byte(kCurrentslot); + ah = 0; + push(ax); + cx = 13; + _mul(cx); + dx = data; + ds = dx; + dx = 8698; + _add(dx, ax); + openforsave(); + dx = data; + ds = dx; + dx = 6091; + cx = (6187-6091); + savefilewrite(); + dx = data; + es = dx; + di = 6141; + ax = pop(); + cx = 17; + _mul(cx); + dx = data; + ds = dx; + dx = 8579; + _add(dx, ax); + saveseg(); + dx = data; + ds = dx; + dx = 0; + saveseg(); + ds = data.word(kExtras); + dx = (0); + saveseg(); + ds = data.word(kBuffers); + dx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)); + saveseg(); + dx = data; + ds = dx; + dx = 7979; + saveseg(); + dx = data; + ds = dx; + dx = 534; + saveseg(); + closefile(); +} + +void DreamGenContext::loadposition() { + STACK_CHECK; + data.word(kTimecount) = 0; + clearchanges(); + al = data.byte(kCurrentslot); + ah = 0; + push(ax); + cx = 13; + _mul(cx); + dx = data; + ds = dx; + dx = 8698; + _add(dx, ax); + openfilefromc(); + ds = cs; + dx = 6091; + cx = (6187-6091); + savefileread(); + es = cs; + di = 6141; + ax = pop(); + cx = 17; + _mul(cx); + dx = data; + ds = dx; + dx = 8579; + _add(dx, ax); + loadseg(); + dx = data; + ds = dx; + dx = 0; + loadseg(); + ds = data.word(kExtras); + dx = (0); + loadseg(); + ds = data.word(kBuffers); + dx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)); + loadseg(); + dx = data; + ds = dx; + dx = 7979; + loadseg(); + ds = cs; + dx = 534; + loadseg(); + closefile(); +} + +void DreamGenContext::makeheader() { + STACK_CHECK; + dx = data; + es = dx; + di = 6141; + ax = 17; + storeit(); + ax = (68-0); + storeit(); + ax = (0+2080+30000+(16*114)+((114+2)*2)+18000); + storeit(); + ax = (250)*4; + storeit(); + ax = 48; + storeit(); + ax = (991-534); + storeit(); +} + +void DreamGenContext::storeit() { + STACK_CHECK; + _cmp(ax, 0); + if (!flags.z()) + goto isntblank; + _inc(ax); +isntblank: + _stosw(); +} + +void DreamGenContext::findlen() { + STACK_CHECK; + _dec(bx); + _add(bx, ax); +nextone: + _cmp(cl, ds.byte(bx)); + if (!flags.z()) + return /* (foundlen) */; + _dec(bx); + _dec(ax); + _cmp(ax, 0); + if (!flags.z()) + goto nextone; +} + +void DreamGenContext::scanfornames() { + STACK_CHECK; + dx = data; + es = dx; + di = 8579; + dx = data; + ds = dx; + dx = 8698; + cx = 7; +scanloop: + push(es); + push(ds); + push(di); + push(dx); + push(cx); + openfilefromc(); + if (flags.c()) + goto notexist; + cx = pop(); + _inc(ch); + push(cx); + push(di); + push(es); + dx = data; + ds = dx; + dx = 6091; + cx = (6187-6091); + savefileread(); + dx = data; + es = dx; + di = 6141; + ds = pop(); + dx = pop(); + loadseg(); + bx = data.word(kHandle); + closefile(); +notexist: + cx = pop(); + dx = pop(); + di = pop(); + ds = pop(); + es = pop(); + _add(dx, 13); + _add(di, 17); + _dec(cl); + if (!flags.z()) + goto scanloop; + al = ch; +} + +void DreamGenContext::decide() { + STACK_CHECK; + setmode(); + loadpalfromiff(); + clearpalette(); + data.byte(kPointermode) = 0; + data.word(kWatchingtime) = 0; + data.byte(kPointerframe) = 0; + data.word(kTextaddressx) = 70; + data.word(kTextaddressy) = 182-8; + data.byte(kTextlen) = 181; + data.byte(kManisoffscreen) = 1; + loadsavebox(); + showdecisions(); + worktoscreen(); + fadescreenup(); + data.byte(kGetback) = 0; +waitdecide: + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + delpointer(); + bx = 5057; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto waitdecide; + _cmp(data.byte(kGetback), 4); + if (flags.z()) + goto hasloadedroom; + getridoftemp(); +hasloadedroom: + data.word(kTextaddressx) = 13; + data.word(kTextaddressy) = 182; + data.byte(kTextlen) = 240; +} + +void DreamGenContext::showdecisions() { + STACK_CHECK; + createpanel2(); + showopbox(); + ds = data.word(kTempgraphics); + di = (60)+17; + bx = (52)+13; + al = 6; + ah = 0; + showframe(); + undertextline(); +} + +void DreamGenContext::newgame() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 251); + if (flags.z()) + goto alreadynewgame; + data.byte(kCommandtype) = 251; + al = 47; + commandonly(); +alreadynewgame: + ax = data.word(kMousebutton); + _cmp(ax, 1); + if (!flags.z()) + return /* (nonewgame) */; + data.byte(kGetback) = 3; +} + +void DreamGenContext::doload() { + STACK_CHECK; + showopbox(); + showloadops(); + data.byte(kCurrentslot) = 0; + showslots(); + shownames(); + data.byte(kPointerframe) = 0; + worktoscreenm(); + namestoold(); + data.byte(kGetback) = 0; +loadops: + delpointer(); + readmouse(); + showpointer(); + vsync(); + dumppointer(); + dumptextline(); + bx = 3824; + checkcoords(); + _cmp(data.byte(kGetback), 0); + if (flags.z()) + goto loadops; + _cmp(data.byte(kGetback), 2); + if (flags.z()) + return /* (quitloaded) */; + getridoftemp(); + dx = data; + es = dx; + bx = 7979; + startloading(); + loadroomssample(); + data.byte(kRoomloaded) = 1; + data.byte(kNewlocation) = 255; + clearsprites(); + initman(); + initrain(); + data.word(kTextaddressx) = 13; + data.word(kTextaddressy) = 182; + data.byte(kTextlen) = 240; + startup(); + worktoscreen(); + data.byte(kGetback) = 4; +} + +void DreamGenContext::loadold() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 252); + if (flags.z()) + goto alreadyloadold; + data.byte(kCommandtype) = 252; + al = 48; + commandonly(); +alreadyloadold: + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return /* (noloadold) */; + doload(); + _cmp(data.byte(kGetback), 4); + if (flags.z()) + return /* (noloadold) */; + showdecisions(); + worktoscreenm(); + data.byte(kGetback) = 0; +} + +void DreamGenContext::createname() { + STACK_CHECK; + push(ax); + di = 5105; + cs.byte(di+0) = dl; + cs.byte(di+3) = cl; + al = dh; + ah = '0'-1; +findten: + _inc(ah); + _sub(al, 10); + if (!flags.c()) + goto findten; + cs.byte(di+1) = ah; + _add(al, 10+'0'); + cs.byte(di+2) = al; + ax = pop(); + cl = '0'-1; +thousandsc: + _inc(cl); + _sub(ax, 1000); + if (!flags.c()) + goto thousandsc; + _add(ax, 1000); + cs.byte(di+4) = cl; + cl = '0'-1; +hundredsc: + _inc(cl); + _sub(ax, 100); + if (!flags.c()) + goto hundredsc; + _add(ax, 100); + cs.byte(di+5) = cl; + cl = '0'-1; +tensc: + _inc(cl); + _sub(ax, 10); + if (!flags.c()) + goto tensc; + _add(ax, 10); + cs.byte(di+6) = cl; + _add(al, '0'); + cs.byte(di+7) = al; +} + +void DreamGenContext::trysoundalloc() { + STACK_CHECK; + _cmp(data.byte(kNeedsoundbuff), 1); + if (flags.z()) + return /* (gotsoundbuff) */; + _inc(data.byte(kSoundtimes)); + bx = (16384+2048)/16; + allocatemem(); + data.word(kSoundbuffer) = ax; + push(ax); + al = ah; + cl = 4; + _shr(al, cl); + data.byte(kSoundbufferpage) = al; + ax = pop(); + cl = 4; + _shl(ax, cl); + data.word(kSoundbufferad) = ax; + _cmp(ax, 0x0b7ff); + if (!flags.c()) + goto soundfail; + es = data.word(kSoundbuffer); + di = 0; + cx = 16384/2; + ax = 0x7f7f; + _stosw(cx, true); + data.byte(kNeedsoundbuff) = 1; + return; +soundfail: + es = data.word(kSoundbuffer); + deallocatemem(); +} + +void DreamGenContext::playchannel0() { + STACK_CHECK; + _cmp(data.byte(kSoundint), 255); + if (flags.z()) + return /* (dontbother4) */; + push(es); + push(ds); + push(bx); + push(cx); + push(di); + push(si); + data.byte(kCh0playing) = al; + es = data.word(kSounddata); + _cmp(al, 12); + if (flags.c()) + goto notsecondbank; + es = data.word(kSounddata2); + _sub(al, 12); +notsecondbank: + data.byte(kCh0repeat) = ah; + ah = 0; + _add(ax, ax); + bx = ax; + _add(ax, ax); + _add(bx, ax); + al = es.byte(bx); + ah = 0; + data.word(kCh0emmpage) = ax; + ax = es.word(bx+1); + data.word(kCh0offset) = ax; + ax = es.word(bx+3); + data.word(kCh0blockstocopy) = ax; + _cmp(data.byte(kCh0repeat), 0); + if (flags.z()) + goto nosetloop; + ax = data.word(kCh0emmpage); + data.word(kCh0oldemmpage) = ax; + ax = data.word(kCh0offset); + data.word(kCh0oldoffset) = ax; + ax = data.word(kCh0blockstocopy); + data.word(kCh0oldblockstocopy) = ax; +nosetloop: + si = pop(); + di = pop(); + cx = pop(); + bx = pop(); + ds = pop(); + es = pop(); +} + +void DreamGenContext::playchannel1() { + STACK_CHECK; + _cmp(data.byte(kSoundint), 255); + if (flags.z()) + return /* (dontbother5) */; + _cmp(data.byte(kCh1playing), 7); + if (flags.z()) + return /* (dontbother5) */; + push(es); + push(ds); + push(bx); + push(cx); + push(di); + push(si); + data.byte(kCh1playing) = al; + es = data.word(kSounddata); + _cmp(al, 12); + if (flags.c()) + goto notsecondbank1; + es = data.word(kSounddata2); + _sub(al, 12); +notsecondbank1: + ah = 0; + _add(ax, ax); + bx = ax; + _add(ax, ax); + _add(bx, ax); + al = es.byte(bx); + ah = 0; + data.word(kCh1emmpage) = ax; + ax = es.word(bx+1); + data.word(kCh1offset) = ax; + ax = es.word(bx+3); + data.word(kCh1blockstocopy) = ax; + si = pop(); + di = pop(); + cx = pop(); + bx = pop(); + ds = pop(); + es = pop(); +} + +void DreamGenContext::makenextblock() { + STACK_CHECK; + volumeadjust(); + loopchannel0(); + _cmp(data.word(kCh1blockstocopy), 0); + if (flags.z()) + goto mightbeonlych0; + _cmp(data.word(kCh0blockstocopy), 0); + if (flags.z()) + goto mightbeonlych1; + _dec(data.word(kCh0blockstocopy)); + _dec(data.word(kCh1blockstocopy)); + bothchannels(); + return; +mightbeonlych1: + data.byte(kCh0playing) = 255; + _cmp(data.word(kCh1blockstocopy), 0); + if (flags.z()) + return /* (notch1only) */; + _dec(data.word(kCh1blockstocopy)); + channel1only(); + return; +mightbeonlych0: + data.byte(kCh1playing) = 255; + _cmp(data.word(kCh0blockstocopy), 0); + if (flags.z()) + goto notch0only; + _dec(data.word(kCh0blockstocopy)); + channel0only(); + return; +notch0only: + es = data.word(kSoundbuffer); + di = data.word(kSoundbufferwrite); + cx = 1024; + ax = 0x7f7f; + _stosw(cx, true); + _and(di, 16384-1); + data.word(kSoundbufferwrite) = di; +} + +void DreamGenContext::volumeadjust() { + STACK_CHECK; + al = data.byte(kVolumedirection); + _cmp(al, 0); + if (flags.z()) + return /* (volok) */; + al = data.byte(kVolume); + _cmp(al, data.byte(kVolumeto)); + if (flags.z()) + goto volfinish; + _add(data.byte(kVolumecount), 64); + if (!flags.z()) + return /* (volok) */; + al = data.byte(kVolume); + _add(al, data.byte(kVolumedirection)); + data.byte(kVolume) = al; + return; +volfinish: + data.byte(kVolumedirection) = 0; +} + +void DreamGenContext::loopchannel0() { + STACK_CHECK; + _cmp(data.word(kCh0blockstocopy), 0); + if (!flags.z()) + return /* (notloop) */; + _cmp(data.byte(kCh0repeat), 0); + if (flags.z()) + return /* (notloop) */; + _cmp(data.byte(kCh0repeat), 255); + if (flags.z()) + goto endlessloop; + _dec(data.byte(kCh0repeat)); +endlessloop: + ax = data.word(kCh0oldemmpage); + data.word(kCh0emmpage) = ax; + ax = data.word(kCh0oldoffset); + data.word(kCh0offset) = ax; + ax = data.word(kCh0blockstocopy); + _add(ax, data.word(kCh0oldblockstocopy)); + data.word(kCh0blockstocopy) = ax; +} + +void DreamGenContext::cancelch0() { + STACK_CHECK; + data.byte(kCh0repeat) = 0; + data.word(kCh0blockstocopy) = 0; + data.byte(kCh0playing) = 255; +} + +void DreamGenContext::cancelch1() { + STACK_CHECK; + data.word(kCh1blockstocopy) = 0; + data.byte(kCh1playing) = 255; +} + +void DreamGenContext::channel0tran() { + STACK_CHECK; + _cmp(data.byte(kVolume), 0); + if (!flags.z()) + goto lowvolumetran; + cx = 1024; + _movsw(cx, true); + return; +lowvolumetran: + cx = 1024; + bh = data.byte(kVolume); + bl = 0; + _add(bx, 16384-256); +volloop: + _lodsw(); + bl = al; + al = es.byte(bx); + bl = ah; + ah = es.byte(bx); + _stosw(); + if (--cx) + goto volloop; +} + +void DreamGenContext::domix() { + STACK_CHECK; + _cmp(data.byte(kVolume), 0); + if (!flags.z()) + goto lowvolumemix; +slow: + _lodsb(); + ah = ds.byte(bx); + _inc(bx); + _cmp(al, dh); + if (!flags.c()) + goto toplot; + _cmp(ah, dh); + if (!flags.c()) + goto nodistort; + _add(al, ah); + if (flags.s()) + goto botok; + _xor(al, al); + _stosb(); + if (--cx) + goto slow; + return /* (doneit) */; +botok: + _xor(al, dh); + _stosb(); + if (--cx) + goto slow; + return /* (doneit) */; +toplot: + _cmp(ah, dh); + if (flags.c()) + goto nodistort; + _add(al, ah); + if (!flags.s()) + goto topok; + al = dl; + _stosb(); + if (--cx) + goto slow; + return /* (doneit) */; +topok: + _xor(al, dh); + _stosb(); + if (--cx) + goto slow; + return /* (doneit) */; +nodistort: + _add(al, ah); + _xor(al, dh); + _stosb(); + if (--cx) + goto slow; + return /* (doneit) */; +lowvolumemix: + _lodsb(); + push(bx); + bh = data.byte(kVolume); + _add(bh, 63); + bl = al; + al = es.byte(bx); + bx = pop(); + ah = ds.byte(bx); + _inc(bx); + _cmp(al, dh); + if (!flags.c()) + goto toplotv; + _cmp(ah, dh); + if (!flags.c()) + goto nodistortv; + _add(al, ah); + if (flags.s()) + goto botokv; + _xor(al, al); + _stosb(); + if (--cx) + goto lowvolumemix; + return /* (doneit) */; +botokv: + _xor(al, dh); + _stosb(); + if (--cx) + goto lowvolumemix; + return /* (doneit) */; +toplotv: + _cmp(ah, dh); + if (flags.c()) + goto nodistortv; + _add(al, ah); + if (!flags.s()) + goto topokv; + al = dl; + _stosb(); + if (--cx) + goto lowvolumemix; + return /* (doneit) */; +topokv: + _xor(al, dh); + _stosb(); + if (--cx) + goto lowvolumemix; + return /* (doneit) */; +nodistortv: + _add(al, ah); + _xor(al, dh); + _stosb(); + if (--cx) + goto lowvolumemix; +} + +void DreamGenContext::entrytexts() { + STACK_CHECK; + _cmp(data.byte(kLocation), 21); + if (!flags.z()) + goto notloc15; + al = 28; + cx = 60; + dx = 11; + bl = 68; + bh = 64; + setuptimeduse(); + return; +notloc15: + _cmp(data.byte(kLocation), 30); + if (!flags.z()) + goto notloc43; + al = 27; + cx = 60; + dx = 11; + bl = 68; + bh = 64; + setuptimeduse(); + return; +notloc43: + _cmp(data.byte(kLocation), 23); + if (!flags.z()) + goto notloc23; + al = 29; + cx = 60; + dx = 11; + bl = 68; + bh = 64; + setuptimeduse(); + return; +notloc23: + _cmp(data.byte(kLocation), 31); + if (!flags.z()) + goto notloc44; + al = 30; + cx = 60; + dx = 11; + bl = 68; + bh = 64; + setuptimeduse(); + return; +notloc44: + _cmp(data.byte(kLocation), 20); + if (!flags.z()) + goto notsarters2; + al = 31; + cx = 60; + dx = 11; + bl = 68; + bh = 64; + setuptimeduse(); + return; +notsarters2: + _cmp(data.byte(kLocation), 24); + if (!flags.z()) + goto notedenlob; + al = 32; + cx = 60; + dx = 3; + bl = 68; + bh = 64; + setuptimeduse(); + return; +notedenlob: + _cmp(data.byte(kLocation), 34); + if (!flags.z()) + return /* (noteden2) */; + al = 33; + cx = 60; + dx = 3; + bl = 68; + bh = 64; + setuptimeduse(); +} + +void DreamGenContext::entryanims() { + STACK_CHECK; + data.word(kReeltowatch) = -1; + data.byte(kWatchmode) = -1; + _cmp(data.byte(kLocation), 33); + if (!flags.z()) + goto notinthebeach; + switchryanoff(); + data.word(kWatchingtime) = 76*2; + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 76; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + return; +notinthebeach: + _cmp(data.byte(kLocation), 44); + if (!flags.z()) + goto notsparkys; + al = 8; + resetlocation(); + data.word(kWatchingtime) = 50*2; + data.word(kReeltowatch) = 247; + data.word(kEndwatchreel) = 297; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + switchryanoff(); + return; +notsparkys: + _cmp(data.byte(kLocation), 22); + if (!flags.z()) + goto notinthelift; + data.word(kWatchingtime) = 31*2; + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 30; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + switchryanoff(); + return; +notinthelift: + _cmp(data.byte(kLocation), 26); + if (!flags.z()) + goto notunderchurch; + data.byte(kSymboltopnum) = 2; + data.byte(kSymbolbotnum) = 1; + return; +notunderchurch: + _cmp(data.byte(kLocation), 45); + if (!flags.z()) + goto notenterdream; + data.byte(kKeeperflag) = 0; + data.word(kWatchingtime) = 296; + data.word(kReeltowatch) = 45; + data.word(kEndwatchreel) = 198; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + switchryanoff(); + return; +notenterdream: + _cmp(data.byte(kReallocation), 46); + if (!flags.z()) + goto notcrystal; + _cmp(data.byte(kSartaindead), 1); + if (!flags.z()) + goto notcrystal; + al = 0; + removefreeobject(); + return; +notcrystal: + _cmp(data.byte(kLocation), 9); + if (!flags.z()) + goto nottopchurch; + al = 2; + checkifpathison(); + if (flags.z()) + goto nottopchurch; + _cmp(data.byte(kAidedead), 0); + if (flags.z()) + goto nottopchurch; + al = 3; + checkifpathison(); + if (!flags.z()) + goto makedoorsopen; + al = 2; + turnpathon(); +makedoorsopen: + al = 4; + removesetobject(); + al = 5; + placesetobject(); + return; +nottopchurch: + _cmp(data.byte(kLocation), 47); + if (!flags.z()) + goto notdreamcentre; + al = 4; + placesetobject(); + al = 5; + placesetobject(); + return; +notdreamcentre: + _cmp(data.byte(kLocation), 38); + if (!flags.z()) + goto notcarpark; + data.word(kWatchingtime) = 57*2; + data.word(kReeltowatch) = 4; + data.word(kEndwatchreel) = 57; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + switchryanoff(); + return; +notcarpark: + _cmp(data.byte(kLocation), 32); + if (!flags.z()) + goto notalley; + data.word(kWatchingtime) = 66*2; + data.word(kReeltowatch) = 0; + data.word(kEndwatchreel) = 66; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + switchryanoff(); + return; +notalley: + _cmp(data.byte(kLocation), 24); + if (!flags.z()) + return /* (notedensagain) */; + al = 2; + ah = data.byte(kRoomnum); + _dec(ah); + turnanypathon(); +} + +void DreamGenContext::initialinv() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 24); + if (flags.z()) + goto isedens; + return; +isedens: + al = 11; + ah = 5; + pickupob(); + al = 12; + ah = 6; + pickupob(); + al = 13; + ah = 7; + pickupob(); + al = 14; + ah = 8; + pickupob(); + al = 18; + al = 18; + ah = 0; + pickupob(); + al = 19; + ah = 1; + pickupob(); + al = 20; + ah = 9; + pickupob(); + al = 16; + ah = 2; + pickupob(); + data.byte(kWatchmode) = 1; + data.word(kReeltohold) = 0; + data.word(kEndofholdreel) = 6; + data.byte(kWatchspeed) = 1; + data.byte(kSpeedcount) = 1; + switchryanoff(); +} + +void DreamGenContext::pickupob() { + STACK_CHECK; + data.byte(kLastinvpos) = ah; + data.byte(kObjecttype) = 2; + data.byte(kItemframe) = al; + data.byte(kCommand) = al; + getanyad(); + transfertoex(); +} + +void DreamGenContext::checkforemm() { + STACK_CHECK; +} + +void DreamGenContext::checkbasemem() { + STACK_CHECK; + bx = data.word(kHowmuchalloc); + _cmp(bx, 0x9360); + if (!flags.c()) + return /* (enoughmem) */; + data.byte(kGameerror) = 5; + { quickquit(); return; }; +} + +void DreamGenContext::allocatebuffers() { + STACK_CHECK; + bx = (0+2080+30000+(16*114)+((114+2)*2)+18000)/16; + allocatemem(); + data.word(kExtras) = ax; + trysoundalloc(); + bx = (0+(66*60))/16; + allocatemem(); + data.word(kMapdata) = ax; + trysoundalloc(); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*24)+(6*64)+991-534+68-0)/16; + allocatemem(); + data.word(kBuffers) = ax; + trysoundalloc(); + bx = (16*80)/16; + allocatemem(); + data.word(kFreedat) = ax; + trysoundalloc(); + bx = (64*128)/16; + allocatemem(); + data.word(kSetdat) = ax; + trysoundalloc(); + bx = (22*8*20*8)/16; + allocatemem(); + data.word(kMapstore) = ax; + allocatework(); + bx = 2048/16; + allocatemem(); + data.word(kSounddata) = ax; + bx = 2048/16; + allocatemem(); + data.word(kSounddata2) = ax; +} + +void DreamGenContext::clearbuffers() { + STACK_CHECK; + es = data.word(kBuffers); + cx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*24)+(6*64)+991-534+68-0)/2; + ax = 0; + di = 0; + _stosw(cx, true); + es = data.word(kExtras); + cx = (0+2080+30000+(16*114)+((114+2)*2)+18000)/2; + ax = 0x0ffff; + di = 0; + _stosw(cx, true); + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*24)+(6*64)); + ds = cs; + si = 534; + cx = (991-534); + _movsb(cx, true); + es = data.word(kBuffers); + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*24)+(6*64)+991-534); + ds = cs; + si = 0; + cx = (68-0); + _movsb(cx, true); + clearchanges(); +} + +void DreamGenContext::clearchanges() { + STACK_CHECK; + es = data.word(kBuffers); + cx = (250)*2; + ax = 0x0ffff; + di = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)); + _stosw(cx, true); + ds = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*24)+(6*64)); + es = cs; + di = 534; + cx = (991-534); + _movsb(cx, true); + ds = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*24)+(6*64)+991-534); + es = cs; + di = 0; + cx = (68-0); + _movsb(cx, true); + data.byte(kExpos) = 0; + data.word(kExframepos) = 0; + data.word(kExtextpos) = 0; + es = data.word(kExtras); + cx = (0+2080+30000+(16*114)+((114+2)*2)+18000)/2; + ax = 0x0ffff; + di = 0; + _stosw(cx, true); + es = cs; + di = 8011; + al = 1; + _stosb(2); + al = 0; + _stosb(); + al = 1; + _stosb(); + ax = 0; + cx = 6; + _stosw(cx, true); +} + +void DreamGenContext::clearbeforeload() { + STACK_CHECK; + _cmp(data.byte(kRoomloaded), 1); + if (!flags.z()) + return /* (noclear) */; + clearreels(); + clearrest(); + data.byte(kRoomloaded) = 0; +} + +void DreamGenContext::clearreels() { + STACK_CHECK; + es = data.word(kReel1); + deallocatemem(); + es = data.word(kReel2); + deallocatemem(); + es = data.word(kReel3); + deallocatemem(); +} + +void DreamGenContext::clearrest() { + STACK_CHECK; + es = data.word(kMapdata); + cx = (66*60)/2; + ax = 0; + di = (0); + _stosw(cx, true); + es = data.word(kBackdrop); + deallocatemem(); + es = data.word(kSetframes); + deallocatemem(); + es = data.word(kReels); + deallocatemem(); + es = data.word(kPeople); + deallocatemem(); + es = data.word(kSetdesc); + deallocatemem(); + es = data.word(kBlockdesc); + deallocatemem(); + es = data.word(kRoomdesc); + deallocatemem(); + es = data.word(kFreeframes); + deallocatemem(); + es = data.word(kFreedesc); + deallocatemem(); +} + +void DreamGenContext::parseblaster() { + STACK_CHECK; +lookattail: + al = es.byte(bx); + _cmp(al, 0); + if (flags.z()) + return /* (endtail) */; + _cmp(al, 13); + if (flags.z()) + return /* (endtail) */; + _cmp(al, 'i'); + if (flags.z()) + goto issoundint; + _cmp(al, 'I'); + if (flags.z()) + goto issoundint; + _cmp(al, 'b'); + if (flags.z()) + goto isbright; + _cmp(al, 'B'); + if (flags.z()) + goto isbright; + _cmp(al, 'a'); + if (flags.z()) + goto isbaseadd; + _cmp(al, 'A'); + if (flags.z()) + goto isbaseadd; + _cmp(al, 'n'); + if (flags.z()) + goto isnosound; + _cmp(al, 'N'); + if (flags.z()) + goto isnosound; + _cmp(al, 'd'); + if (flags.z()) + goto isdma; + _cmp(al, 'D'); + if (flags.z()) + goto isdma; + _inc(bx); + if (--cx) + goto lookattail; + return; +issoundint: + al = es.byte(bx+1); + _sub(al, '0'); + data.byte(kSoundint) = al; + _inc(bx); + goto lookattail; +isdma: + al = es.byte(bx+1); + _sub(al, '0'); + data.byte(kSounddmachannel) = al; + _inc(bx); + goto lookattail; +isbaseadd: + push(cx); + al = es.byte(bx+2); + _sub(al, '0'); + ah = 0; + cl = 4; + _shl(ax, cl); + _add(ax, 0x200); + data.word(kSoundbaseadd) = ax; + cx = pop(); + _inc(bx); + goto lookattail; +isbright: + data.byte(kBrightness) = 1; + _inc(bx); + goto lookattail; +isnosound: + data.byte(kSoundint) = 255; + _inc(bx); + goto lookattail; +} + +void DreamGenContext::startup() { + STACK_CHECK; + data.byte(kCurrentkey) = 0; + data.byte(kMainmode) = 0; + createpanel(); + data.byte(kNewobs) = 1; + drawfloor(); + showicon(); + getunderzoom(); + spriteupdate(); + printsprites(); + undertextline(); + reelsonscreen(); + atmospheres(); +} + +void DreamGenContext::startup1() { + STACK_CHECK; + clearpalette(); + data.byte(kThroughdoor) = 0; + data.byte(kCurrentkey) = '0'; + data.byte(kMainmode) = 0; + createpanel(); + data.byte(kNewobs) = 1; + drawfloor(); + showicon(); + getunderzoom(); + spriteupdate(); + printsprites(); + undertextline(); + reelsonscreen(); + atmospheres(); + worktoscreen(); + fadescreenup(); +} + +void DreamGenContext::screenupdate() { + STACK_CHECK; + newplace(); + mainscreen(); + animpointer(); + showpointer(); + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto iswatchingmode; + _cmp(data.byte(kNewlocation), 255); + if (!flags.z()) + return /* (finishearly) */; +iswatchingmode: + vsync(); + readmouse1(); + dumppointer(); + dumptextline(); + delpointer(); + autolook(); + spriteupdate(); + watchcount(); + zoom(); + showpointer(); + _cmp(data.byte(kWongame), 0); + if (!flags.z()) + return /* (finishearly) */; + vsync(); + readmouse2(); + dumppointer(); + dumpzoom(); + delpointer(); + deleverything(); + printsprites(); + reelsonscreen(); + afternewroom(); + showpointer(); + vsync(); + readmouse3(); + dumppointer(); + dumpmap(); + dumptimedtext(); + delpointer(); + showpointer(); + vsync(); + readmouse4(); + dumppointer(); + dumpwatch(); + delpointer(); +} + +void DreamGenContext::watchreel() { + STACK_CHECK; + _cmp(data.word(kReeltowatch), -1); + if (flags.z()) + goto notplayingreel; + al = data.byte(kManspath); + _cmp(al, data.byte(kFinaldest)); + if (!flags.z()) + return /* (waitstopwalk) */; + al = data.byte(kTurntoface); + _cmp(al, data.byte(kFacing)); + if (flags.z()) + goto notwatchpath; + return; +notwatchpath: + _dec(data.byte(kSpeedcount)); + _cmp(data.byte(kSpeedcount), -1); + if (!flags.z()) + goto showwatchreel; + al = data.byte(kWatchspeed); + data.byte(kSpeedcount) = al; + ax = data.word(kReeltowatch); + _cmp(ax, data.word(kEndwatchreel)); + if (!flags.z()) + goto ismorereel; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto showwatchreel; + data.word(kReeltowatch) = -1; + data.byte(kWatchmode) = -1; + _cmp(data.word(kReeltohold), -1); + if (flags.z()) + return /* (nomorereel) */; + data.byte(kWatchmode) = 1; + goto notplayingreel; +ismorereel: + _inc(data.word(kReeltowatch)); +showwatchreel: + ax = data.word(kReeltowatch); + data.word(kReelpointer) = ax; + plotreel(); + ax = data.word(kReelpointer); + data.word(kReeltowatch) = ax; + checkforshake(); + return; +notplayingreel: + _cmp(data.byte(kWatchmode), 1); + if (!flags.z()) + goto notholdingreel; + ax = data.word(kReeltohold); + data.word(kReelpointer) = ax; + plotreel(); + return; +notholdingreel: + _cmp(data.byte(kWatchmode), 2); + if (!flags.z()) + return /* (notreleasehold) */; + _dec(data.byte(kSpeedcount)); + _cmp(data.byte(kSpeedcount), -1); + if (!flags.z()) + goto notlastspeed2; + al = data.byte(kWatchspeed); + data.byte(kSpeedcount) = al; + _inc(data.word(kReeltohold)); +notlastspeed2: + ax = data.word(kReeltohold); + _cmp(ax, data.word(kEndofholdreel)); + if (!flags.z()) + goto ismorereel2; + data.word(kReeltohold) = -1; + data.byte(kWatchmode) = -1; + al = data.byte(kDestafterhold); + data.byte(kDestination) = al; + data.byte(kFinaldest) = al; + autosetwalk(); + return; +ismorereel2: + ax = data.word(kReeltohold); + data.word(kReelpointer) = ax; + plotreel(); +} + +void DreamGenContext::checkforshake() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 26); + if (!flags.z()) + return /* (notstartshake) */; + _cmp(ax, 104); + if (!flags.z()) + return /* (notstartshake) */; + data.byte(kShakecounter) = -1; +} + +void DreamGenContext::watchcount() { + STACK_CHECK; + _cmp(data.byte(kWatchon), 0); + if (flags.z()) + return /* (nowatchworn) */; + _inc(data.byte(kTimercount)); + _cmp(data.byte(kTimercount), 9); + if (flags.z()) + goto flashdots; + _cmp(data.byte(kTimercount), 18); + if (flags.z()) + goto uptime; + return; +flashdots: + ax = 91*3+21; + di = 268+4; + bx = 21; + ds = data.word(kCharset1); + showframe(); + goto finishwatch; +uptime: + data.byte(kTimercount) = 0; + _add(data.byte(kSecondcount), 1); + _cmp(data.byte(kSecondcount), 60); + if (!flags.z()) + goto finishtime; + data.byte(kSecondcount) = 0; + _inc(data.byte(kMinutecount)); + _cmp(data.byte(kMinutecount), 60); + if (!flags.z()) + goto finishtime; + data.byte(kMinutecount) = 0; + _inc(data.byte(kHourcount)); + _cmp(data.byte(kHourcount), 24); + if (!flags.z()) + goto finishtime; + data.byte(kHourcount) = 0; +finishtime: + showtime(); +finishwatch: + data.byte(kWatchdump) = 1; +} + +void DreamGenContext::showtime() { + STACK_CHECK; + _cmp(data.byte(kWatchon), 0); + if (flags.z()) + return /* (nowatch) */; + al = data.byte(kSecondcount); + cl = 0; + twodigitnum(); + push(ax); + al = ah; + ah = 0; + _add(ax, 91*3+10); + ds = data.word(kCharset1); + di = 282+5; + bx = 21; + showframe(); + ax = pop(); + ah = 0; + _add(ax, 91*3+10); + ds = data.word(kCharset1); + di = 282+9; + bx = 21; + showframe(); + al = data.byte(kMinutecount); + cl = 0; + twodigitnum(); + push(ax); + al = ah; + ah = 0; + _add(ax, 91*3); + ds = data.word(kCharset1); + di = 270+5; + bx = 21; + showframe(); + ax = pop(); + ah = 0; + _add(ax, 91*3); + ds = data.word(kCharset1); + di = 270+11; + bx = 21; + showframe(); + al = data.byte(kHourcount); + cl = 0; + twodigitnum(); + push(ax); + al = ah; + ah = 0; + _add(ax, 91*3); + ds = data.word(kCharset1); + di = 256+5; + bx = 21; + showframe(); + ax = pop(); + ah = 0; + _add(ax, 91*3); + ds = data.word(kCharset1); + di = 256+11; + bx = 21; + showframe(); + ax = 91*3+20; + ds = data.word(kCharset1); + di = 267+5; + bx = 21; + showframe(); +} + +void DreamGenContext::dumpwatch() { + STACK_CHECK; + _cmp(data.byte(kWatchdump), 1); + if (!flags.z()) + return /* (nodumpwatch) */; + di = 256; + bx = 21; + cl = 40; + ch = 12; + multidump(); + data.byte(kWatchdump) = 0; +} + +void DreamGenContext::showbyte() { + STACK_CHECK; + dl = al; + _shr(dl, 1); + _shr(dl, 1); + _shr(dl, 1); + _shr(dl, 1); + onedigit(); + es.byte(di) = dl; + dl = al; + _and(dl, 15); + onedigit(); + es.byte(di+1) = dl; + _add(di, 3); +} + +void DreamGenContext::onedigit() { + STACK_CHECK; + _cmp(dl, 10); + if (!flags.c()) + goto morethan10; + _add(dl, '0'); + return; +morethan10: + _sub(dl, 10); + _add(dl, 'A'); +} + +void DreamGenContext::twodigitnum() { + STACK_CHECK; + ah = cl; + _dec(ah); +numloop1: + _inc(ah); + _sub(al, 10); + if (!flags.c()) + goto numloop1; + _add(al, 10); + _add(al, cl); +} + +void DreamGenContext::showword() { + STACK_CHECK; + ch = 0; + bx = 10000; + cl = 47; +word1: + _inc(cl); + _sub(ax, bx); + if (!flags.c()) + goto word1; + _add(ax, bx); + convnum(); + cs.byte(di) = cl; + bx = 1000; + cl = 47; +word2: + _inc(cl); + _sub(ax, bx); + if (!flags.c()) + goto word2; + _add(ax, bx); + convnum(); + cs.byte(di+1) = cl; + bx = 100; + cl = 47; +word3: + _inc(cl); + _sub(ax, bx); + if (!flags.c()) + goto word3; + _add(ax, bx); + convnum(); + cs.byte(di+2) = cl; + bx = 10; + cl = 47; +word4: + _inc(cl); + _sub(ax, bx); + if (!flags.c()) + goto word4; + _add(ax, bx); + convnum(); + cs.byte(di+3) = cl; + _add(al, 48); + cl = al; + convnum(); + cs.byte(di+4) = cl; +} + +void DreamGenContext::convnum() { + STACK_CHECK; + _cmp(ch, 0); + if (!flags.z()) + return /* (noconvnum) */; + _cmp(cl, '0'); + if (!flags.z()) + goto notzeronum; + cl = 32; + return /* (noconvnum) */; +notzeronum: + ch = 1; +} + +void DreamGenContext::walkandexamine() { + STACK_CHECK; + finishedwalking(); + if (!flags.z()) + return /* (noobselect) */; + al = data.byte(kWalkexamtype); + data.byte(kCommandtype) = al; + al = data.byte(kWalkexamnum); + data.byte(kCommand) = al; + data.byte(kWalkandexam) = 0; + _cmp(data.byte(kCommandtype), 5); + if (flags.z()) + return /* (noobselect) */; + examineob(); + return; +wantstowalk: + setwalk(); + data.byte(kReasseschanges) = 1; + return; +diff: + data.byte(kCommand) = al; + data.byte(kCommandtype) = ah; + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + goto middleofwalk; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto middleofwalk; + al = data.byte(kFacing); + _cmp(al, data.byte(kTurntoface)); + if (!flags.z()) + goto middleofwalk; + _cmp(data.byte(kCommandtype), 3); + if (!flags.z()) + goto notblock; + bl = data.byte(kManspath); + _cmp(bl, data.byte(kPointerspath)); + if (!flags.z()) + goto dontcheck; + cl = data.byte(kRyanx); + _add(cl, 12); + ch = data.byte(kRyany); + _add(ch, 12); + checkone(); + _cmp(cl, 2); + if (flags.c()) + goto isblock; +dontcheck: + getflagunderp(); + _cmp(data.byte(kLastflag), 2); + if (flags.c()) + goto isblock; + _cmp(data.byte(kLastflag), 128); + if (!flags.c()) + goto isblock; + goto toofaraway; +notblock: + bl = data.byte(kManspath); + _cmp(bl, data.byte(kPointerspath)); + if (!flags.z()) + goto toofaraway; + _cmp(data.byte(kCommandtype), 3); + if (flags.z()) + goto isblock; + _cmp(data.byte(kCommandtype), 5); + if (flags.z()) + goto isaperson; + examineobtext(); + return; +middleofwalk: + blocknametext(); + return; +isblock: + blocknametext(); + return; +isaperson: + personnametext(); + return; +toofaraway: + walktotext(); +} + +void DreamGenContext::mainscreen() { + STACK_CHECK; + data.byte(kInmaparea) = 0; + bx = 5122; + _cmp(data.byte(kWatchon), 1); + if (flags.z()) + goto checkmain; + bx = 5184; +checkmain: + checkcoords(); + _cmp(data.byte(kWalkandexam), 0); + if (flags.z()) + return /* (finishmain) */; + walkandexamine(); +} + +void DreamGenContext::madmanrun() { + STACK_CHECK; + _cmp(data.byte(kLocation), 14); + if (!flags.z()) + { identifyob(); return; }; + _cmp(data.byte(kMapx), 22); + if (!flags.z()) + { identifyob(); return; }; + _cmp(data.byte(kPointermode), 2); + if (!flags.z()) + { identifyob(); return; }; + _cmp(data.byte(kMadmanflag), 0); + if (!flags.z()) + { identifyob(); return; }; + _cmp(data.byte(kCommandtype), 211); + if (flags.z()) + goto alreadyrun; + data.byte(kCommandtype) = 211; + al = 52; + commandonly(); +alreadyrun: + _cmp(data.word(kMousebutton), 1); + if (!flags.z()) + return /* (norun) */; + ax = data.word(kMousebutton); + _cmp(ax, data.word(kOldbutton)); + if (flags.z()) + return /* (norun) */; + data.byte(kLastweapon) = 8; +} + +void DreamGenContext::checkcoords() { + STACK_CHECK; + _cmp(data.byte(kNewlocation), 255); + if (flags.z()) + goto loop048; + return; +loop048: + ax = cs.word(bx); + _cmp(ax, 0x0ffff); + if (flags.z()) + return /* (nonefound) */; + push(bx); + _cmp(data.word(kMousex), ax); + if (flags.l()) + goto over045; + ax = cs.word(bx+2); + _cmp(data.word(kMousex), ax); + if (!flags.l()) + goto over045; + ax = cs.word(bx+4); + _cmp(data.word(kMousey), ax); + if (flags.l()) + goto over045; + ax = cs.word(bx+6); + _cmp(data.word(kMousey), ax); + if (!flags.l()) + goto over045; + ax = cs.word(bx+8); + __dispatch_call(ax); + ax = pop(); + return; +over045: + bx = pop(); + _add(bx, 10); + goto loop048; +} + +void DreamGenContext::identifyob() { + STACK_CHECK; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + { blank(); return; }; + ax = data.word(kMousex); + _sub(ax, data.word(kMapadx)); + _cmp(ax, 22*8); + if (flags.c()) + goto notover1; + blank(); + return; +notover1: + bx = data.word(kMousey); + _sub(bx, data.word(kMapady)); + _cmp(bx, 20*8); + if (flags.c()) + goto notover2; + blank(); + return; +notover2: + data.byte(kInmaparea) = 1; + ah = bl; + push(ax); + findpathofpoint(); + data.byte(kPointerspath) = dl; + ax = pop(); + push(ax); + findfirstpath(); + data.byte(kPointerfirstpath) = al; + ax = pop(); + checkifex(); + if (!flags.z()) + return /* (finishidentify) */; + checkiffree(); + if (!flags.z()) + return /* (finishidentify) */; + checkifperson(); + if (!flags.z()) + return /* (finishidentify) */; + checkifset(); + if (!flags.z()) + return /* (finishidentify) */; + ax = data.word(kMousex); + _sub(ax, data.word(kMapadx)); + cl = al; + ax = data.word(kMousey); + _sub(ax, data.word(kMapady)); + ch = al; + checkone(); + _cmp(al, 0); + if (flags.z()) + goto nothingund; + _cmp(data.byte(kMandead), 1); + if (flags.z()) + goto nothingund; + ah = 3; + obname(); + return; +nothingund: + blank(); +} + +void DreamGenContext::checkifperson() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)); + cx = 12; +identifyreel: + push(cx); + _cmp(es.byte(bx+4), 255); + if (flags.z()) + goto notareelid; + push(es); + push(bx); + push(ax); + ax = es.word(bx+0); + data.word(kReelpointer) = ax; + getreelstart(); + _cmp(es.word(si+2), 0x0ffff); + if (!flags.z()) + goto notblankpers; + _add(si, 5); +notblankpers: + cx = es.word(si+2); + ax = es.word(si+0); + push(cx); + getreelframeax(); + cx = pop(); + _add(cl, es.byte(bx+4)); + _add(ch, es.byte(bx+5)); + dx = cx; + _add(dl, es.byte(bx+0)); + _add(dh, es.byte(bx+1)); + ax = pop(); + bx = pop(); + es = pop(); + _cmp(al, cl); + if (flags.c()) + goto notareelid; + _cmp(ah, ch); + if (flags.c()) + goto notareelid; + _cmp(al, dl); + if (!flags.c()) + goto notareelid; + _cmp(ah, dh); + if (!flags.c()) + goto notareelid; + cx = pop(); + ax = es.word(bx+2); + data.word(kPersondata) = ax; + al = es.byte(bx+4); + ah = 5; + obname(); + al = 0; + _cmp(al, 1); + return; +notareelid: + cx = pop(); + _add(bx, 5); + _dec(cx); + if (!flags.z()) + goto identifyreel; +} + +void DreamGenContext::checkifset() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32))+(127*5); + cx = 127; +identifyset: + _cmp(es.byte(bx+4), 255); + if (flags.z()) + goto notasetid; + _cmp(al, es.byte(bx)); + if (flags.c()) + goto notasetid; + _cmp(al, es.byte(bx+2)); + if (!flags.c()) + goto notasetid; + _cmp(ah, es.byte(bx+1)); + if (flags.c()) + goto notasetid; + _cmp(ah, es.byte(bx+3)); + if (!flags.c()) + goto notasetid; + pixelcheckset(); + if (flags.z()) + goto notasetid; + isitdescribed(); + if (flags.z()) + goto notasetid; + al = es.byte(bx+4); + ah = 1; + obname(); + al = 0; + _cmp(al, 1); + return; +notasetid: + _sub(bx, 5); + _dec(cx); + _cmp(cx, -1); + if (!flags.z()) + goto identifyset; +} + +void DreamGenContext::checkifex() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5))+(99*5); + cx = 99; +identifyex: + _cmp(es.byte(bx+4), 255); + if (flags.z()) + goto notanexid; + _cmp(al, es.byte(bx)); + if (flags.c()) + goto notanexid; + _cmp(al, es.byte(bx+2)); + if (!flags.c()) + goto notanexid; + _cmp(ah, es.byte(bx+1)); + if (flags.c()) + goto notanexid; + _cmp(ah, es.byte(bx+3)); + if (!flags.c()) + goto notanexid; + al = es.byte(bx+4); + ah = 4; + obname(); + al = 1; + _cmp(al, 0); + return; +notanexid: + _sub(bx, 5); + _dec(cx); + _cmp(cx, -1); + if (!flags.z()) + goto identifyex; +} + +void DreamGenContext::checkiffree() { + STACK_CHECK; + es = data.word(kBuffers); + bx = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5))+(79*5); + cx = 79; +identifyfree: + _cmp(es.byte(bx+4), 255); + if (flags.z()) + goto notafreeid; + _cmp(al, es.byte(bx)); + if (flags.c()) + goto notafreeid; + _cmp(al, es.byte(bx+2)); + if (!flags.c()) + goto notafreeid; + _cmp(ah, es.byte(bx+1)); + if (flags.c()) + goto notafreeid; + _cmp(ah, es.byte(bx+3)); + if (!flags.c()) + goto notafreeid; + al = es.byte(bx+4); + ah = 2; + obname(); + al = 0; + _cmp(al, 1); + return; +notafreeid: + _sub(bx, 5); + _dec(cx); + _cmp(cx, -1); + if (!flags.z()) + goto identifyfree; +} + +void DreamGenContext::isitdescribed() { + STACK_CHECK; + push(ax); + push(cx); + push(es); + push(bx); + al = es.byte(bx+4); + ah = 0; + _add(ax, ax); + bx = ax; + es = data.word(kSetdesc); + _add(bx, (0)); + ax = es.word(bx); + _add(ax, (0+(130*2))); + bx = ax; + dl = es.byte(bx); + bx = pop(); + es = pop(); + cx = pop(); + ax = pop(); + _cmp(dl, 0); +} + +void DreamGenContext::findpathofpoint() { + STACK_CHECK; + push(ax); + bx = (0); + es = data.word(kReels); + al = data.byte(kRoomnum); + ah = 0; + cx = 144; + _mul(cx); + _add(bx, ax); + cx = pop(); + dl = 0; +pathloop: + al = es.byte(bx+6); + _cmp(al, 255); + if (!flags.z()) + goto flunkedit; + ax = es.word(bx+2); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto flunkedit; + _cmp(cl, al); + if (flags.c()) + goto flunkedit; + _cmp(ch, ah); + if (flags.c()) + goto flunkedit; + ax = es.word(bx+4); + _cmp(cl, al); + if (!flags.c()) + goto flunkedit; + _cmp(ch, ah); + if (!flags.c()) + goto flunkedit; + return /* (gotvalidpath) */; +flunkedit: + _add(bx, 8); + _inc(dl); + _cmp(dl, 12); + if (!flags.z()) + goto pathloop; + dl = 255; +} + +void DreamGenContext::findfirstpath() { + STACK_CHECK; + push(ax); + bx = (0); + es = data.word(kReels); + al = data.byte(kRoomnum); + ah = 0; + cx = 144; + _mul(cx); + _add(bx, ax); + cx = pop(); + dl = 0; +fpathloop: + ax = es.word(bx+2); + _cmp(ax, 0x0ffff); + if (flags.z()) + goto nofirst; + _cmp(cl, al); + if (flags.c()) + goto nofirst; + _cmp(ch, ah); + if (flags.c()) + goto nofirst; + ax = es.word(bx+4); + _cmp(cl, al); + if (!flags.c()) + goto nofirst; + _cmp(ch, ah); + if (!flags.c()) + goto nofirst; + goto gotfirst; +nofirst: + _add(bx, 8); + _inc(dl); + _cmp(dl, 12); + if (!flags.z()) + goto fpathloop; + al = 0; + return; +gotfirst: + al = es.byte(bx+6); +} + +void DreamGenContext::turnpathon() { + STACK_CHECK; + push(ax); + push(ax); + cl = 255; + ch = data.byte(kRoomnum); + _add(ch, 100); + findormake(); + ax = pop(); + getroomspaths(); + ax = pop(); + _cmp(al, 255); + if (flags.z()) + return /* (nopathon) */; + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = 255; + es.byte(bx+6) = al; +} + +void DreamGenContext::turnpathoff() { + STACK_CHECK; + push(ax); + push(ax); + cl = 0; + ch = data.byte(kRoomnum); + _add(ch, 100); + findormake(); + ax = pop(); + getroomspaths(); + ax = pop(); + _cmp(al, 255); + if (flags.z()) + return /* (nopathoff) */; + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = 0; + es.byte(bx+6) = al; +} + +void DreamGenContext::turnanypathon() { + STACK_CHECK; + push(ax); + push(ax); + cl = 255; + ch = ah; + _add(ch, 100); + findormake(); + ax = pop(); + al = ah; + ah = 0; + cx = 144; + _mul(cx); + es = data.word(kReels); + bx = (0); + _add(bx, ax); + ax = pop(); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = 255; + es.byte(bx+6) = al; +} + +void DreamGenContext::turnanypathoff() { + STACK_CHECK; + push(ax); + push(ax); + cl = 0; + ch = ah; + _add(ch, 100); + findormake(); + ax = pop(); + al = ah; + ah = 0; + cx = 144; + _mul(cx); + es = data.word(kReels); + bx = (0); + _add(bx, ax); + ax = pop(); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = 0; + es.byte(bx+6) = al; +} + +void DreamGenContext::checkifpathison() { + STACK_CHECK; + push(ax); + getroomspaths(); + ax = pop(); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = es.byte(bx+6); + _cmp(al, 255); +} + +void DreamGenContext::afternewroom() { + STACK_CHECK; + _cmp(data.byte(kNowinnewroom), 0); + if (flags.z()) + return /* (notnew) */; + data.word(kTimecount) = 0; + createpanel(); + data.byte(kCommandtype) = 0; + findroominloc(); + _cmp(data.byte(kRyanon), 1); + if (flags.z()) + goto ryansoff; + al = data.byte(kRyanx); + _add(al, 12); + ah = data.byte(kRyany); + _add(ah, 12); + findpathofpoint(); + data.byte(kManspath) = dl; + findxyfrompath(); + data.byte(kResetmanxy) = 1; +ryansoff: + data.byte(kNewobs) = 1; + drawfloor(); + data.word(kLookcounter) = 160; + data.byte(kNowinnewroom) = 0; + showicon(); + spriteupdate(); + printsprites(); + undertextline(); + reelsonscreen(); + mainscreen(); + getunderzoom(); + zoom(); + worktoscreenm(); + walkintoroom(); + reminders(); + atmospheres(); +} + +void DreamGenContext::atmospheres() { + STACK_CHECK; + cl = data.byte(kMapx); + ch = data.byte(kMapy); + bx = 5246; +nextatmos: + al = cs.byte(bx); + _cmp(al, 255); + if (flags.z()) + goto nomoreatmos; + _cmp(al, data.byte(kReallocation)); + if (!flags.z()) + goto wrongatmos; + ax = cs.word(bx+1); + _cmp(ax, cx); + if (!flags.z()) + goto wrongatmos; + ax = cs.word(bx+3); + _cmp(al, data.byte(kCh0playing)); + if (flags.z()) + goto playingalready; + _cmp(data.byte(kLocation), 45); + if (!flags.z()) + goto notweb; + _cmp(data.word(kReeltowatch), 45); + if (flags.z()) + goto wrongatmos; +notweb: + playchannel0(); + _cmp(data.byte(kReallocation), 2); + _cmp(data.byte(kMapy), 0); + if (flags.z()) + goto fullvol; + if (!flags.z()) + goto notlouisvol; + _cmp(data.byte(kMapy), 10); + if (!flags.z()) + goto notlouisvol; + _cmp(data.byte(kMapx), 22); + if (!flags.z()) + goto notlouisvol; + data.byte(kVolume) = 5; +notlouisvol: + _cmp(data.byte(kReallocation), 14); + if (!flags.z()) + goto notmad1; + _cmp(data.byte(kMapx), 33); + if (flags.z()) + goto ismad2; + _cmp(data.byte(kMapx), 22); + if (!flags.z()) + goto notmad1; + data.byte(kVolume) = 5; + return; +ismad2: + data.byte(kVolume) = 0; + return; +notmad1: +playingalready: + _cmp(data.byte(kReallocation), 2); + if (!flags.z()) + return /* (notlouisvol2) */; + _cmp(data.byte(kMapx), 22); + if (flags.z()) + goto louisvol; + _cmp(data.byte(kMapx), 11); + if (!flags.z()) + return /* (notlouisvol2) */; +fullvol: + data.byte(kVolume) = 0; + return; +louisvol: + data.byte(kVolume) = 5; + return; +wrongatmos: + _add(bx, 5); + goto nextatmos; +nomoreatmos: + cancelch0(); +} + +void DreamGenContext::walkintoroom() { + STACK_CHECK; + _cmp(data.byte(kLocation), 14); + if (!flags.z()) + return /* (notlair) */; + _cmp(data.byte(kMapx), 22); + if (!flags.z()) + return /* (notlair) */; + data.byte(kDestination) = 1; + data.byte(kFinaldest) = 1; + autosetwalk(); +} + +void DreamGenContext::afterintroroom() { + STACK_CHECK; + _cmp(data.byte(kNowinnewroom), 0); + if (flags.z()) + return /* (notnewintro) */; + clearwork(); + findroominloc(); + data.byte(kNewobs) = 1; + drawfloor(); + reelsonscreen(); + spriteupdate(); + printsprites(); + worktoscreen(); + data.byte(kNowinnewroom) = 0; +} + +void DreamGenContext::obname() { + STACK_CHECK; + _cmp(data.byte(kReasseschanges), 0); + if (flags.z()) + goto notnewpath; + data.byte(kReasseschanges) = 0; + goto diff; +notnewpath: + _cmp(ah, data.byte(kCommandtype)); + if (flags.z()) + goto notdiffob; + goto diff; +notdiffob: + _cmp(al, data.byte(kCommand)); + if (!flags.z()) + goto diff; + _cmp(data.byte(kWalkandexam), 1); + if (flags.z()) + goto walkandexamine; + _cmp(data.word(kMousebutton), 0); + if (flags.z()) + return /* (noobselect) */; + _cmp(data.byte(kCommandtype), 3); + if (!flags.z()) + goto isntblock; + _cmp(data.byte(kLastflag), 2); + if (flags.c()) + return /* (noobselect) */; +isntblock: + bl = data.byte(kManspath); + _cmp(bl, data.byte(kPointerspath)); + if (!flags.z()) + goto wantstowalk; + _cmp(data.byte(kCommandtype), 3); + if (flags.z()) + goto wantstowalk; + finishedwalking(); + if (!flags.z()) + return /* (noobselect) */; + _cmp(data.byte(kCommandtype), 5); + if (flags.z()) + goto wantstotalk; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + return /* (noobselect) */; + examineob(); + return; +wantstotalk: + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + return /* (noobselect) */; + talk(); + return; +walkandexamine: + finishedwalking(); + if (!flags.z()) + return /* (noobselect) */; + al = data.byte(kWalkexamtype); + data.byte(kCommandtype) = al; + al = data.byte(kWalkexamnum); + data.byte(kCommand) = al; + data.byte(kWalkandexam) = 0; + _cmp(data.byte(kCommandtype), 5); + if (flags.z()) + return /* (noobselect) */; + examineob(); + return; +wantstowalk: + setwalk(); + data.byte(kReasseschanges) = 1; + return; +diff: + data.byte(kCommand) = al; + data.byte(kCommandtype) = ah; + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + goto middleofwalk; + _cmp(data.word(kWatchingtime), 0); + if (!flags.z()) + goto middleofwalk; + al = data.byte(kFacing); + _cmp(al, data.byte(kTurntoface)); + if (!flags.z()) + goto middleofwalk; + _cmp(data.byte(kCommandtype), 3); + if (!flags.z()) + goto notblock; + bl = data.byte(kManspath); + _cmp(bl, data.byte(kPointerspath)); + if (!flags.z()) + goto dontcheck; + cl = data.byte(kRyanx); + _add(cl, 12); + ch = data.byte(kRyany); + _add(ch, 12); + checkone(); + _cmp(cl, 2); + if (flags.c()) + goto isblock; +dontcheck: + getflagunderp(); + _cmp(data.byte(kLastflag), 2); + if (flags.c()) + goto isblock; + _cmp(data.byte(kLastflag), 128); + if (!flags.c()) + goto isblock; + goto toofaraway; +notblock: + bl = data.byte(kManspath); + _cmp(bl, data.byte(kPointerspath)); + if (!flags.z()) + goto toofaraway; + _cmp(data.byte(kCommandtype), 3); + if (flags.z()) + goto isblock; + _cmp(data.byte(kCommandtype), 5); + if (flags.z()) + goto isaperson; + examineobtext(); + return; +middleofwalk: + blocknametext(); + return; +isblock: + blocknametext(); + return; +isaperson: + personnametext(); + return; +toofaraway: + walktotext(); +} + +void DreamGenContext::finishedwalking() { + STACK_CHECK; + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + return /* (iswalking) */; + al = data.byte(kFacing); + _cmp(al, data.byte(kTurntoface)); +} + +void DreamGenContext::examineobtext() { + STACK_CHECK; + bl = data.byte(kCommand); + bh = data.byte(kCommandtype); + al = 1; + commandwithob(); +} + +void DreamGenContext::commandwithob() { + STACK_CHECK; + push(ax); + push(ax); + push(bx); + push(cx); + push(dx); + push(es); + push(ds); + push(si); + push(di); + deltextline(); + di = pop(); + si = pop(); + ds = pop(); + es = pop(); + dx = pop(); + cx = pop(); + bx = pop(); + ax = pop(); + push(bx); + ah = 0; + _add(ax, ax); + bx = ax; + es = data.word(kCommandtext); + ax = es.word(bx); + _add(ax, (66*2)); + si = ax; + di = data.word(kTextaddressx); + bx = data.word(kTextaddressy); + dl = data.byte(kTextlen); + al = 0; + ah = 0; + printdirect(); + ax = pop(); + di = 5847; + copyname(); + ax = pop(); + di = data.word(kLastxpos); + _cmp(al, 0); + if (flags.z()) + goto noadd; + _add(di, 5); +noadd: + bx = data.word(kTextaddressy); + es = cs; + si = 5847; + dl = data.byte(kTextlen); + al = 0; + ah = 0; + printdirect(); + data.byte(kNewtextline) = 1; +} + +void DreamGenContext::commandonly() { + STACK_CHECK; + push(ax); + push(bx); + push(cx); + push(dx); + push(es); + push(ds); + push(si); + push(di); + deltextline(); + di = pop(); + si = pop(); + ds = pop(); + es = pop(); + dx = pop(); + cx = pop(); + bx = pop(); + ax = pop(); + ah = 0; + _add(ax, ax); + bx = ax; + es = data.word(kCommandtext); + ax = es.word(bx); + _add(ax, (66*2)); + si = ax; + di = data.word(kTextaddressx); + bx = data.word(kTextaddressy); + dl = data.byte(kTextlen); + al = 0; + ah = 0; + printdirect(); + data.byte(kNewtextline) = 1; +} + +void DreamGenContext::printmessage() { + STACK_CHECK; + push(dx); + push(bx); + push(di); + ah = 0; + _add(ax, ax); + bx = ax; + es = data.word(kCommandtext); + ax = es.word(bx); + _add(ax, (66*2)); + si = ax; + di = pop(); + bx = pop(); + dx = pop(); + al = 0; + ah = 0; + printdirect(); +} + +void DreamGenContext::printmessage2() { + STACK_CHECK; + push(dx); + push(bx); + push(di); + push(ax); + ah = 0; + _add(ax, ax); + bx = ax; + es = data.word(kCommandtext); + ax = es.word(bx); + _add(ax, (66*2)); + si = ax; + ax = pop(); +searchmess: + push(ax); + findnextcolon(); + ax = pop(); + _dec(ah); + if (!flags.z()) + goto searchmess; + di = pop(); + bx = pop(); + dx = pop(); + al = 0; + ah = 0; + printdirect(); +} + +void DreamGenContext::blocknametext() { + STACK_CHECK; + bl = data.byte(kCommand); + bh = data.byte(kCommandtype); + al = 0; + commandwithob(); +} + +void DreamGenContext::personnametext() { + STACK_CHECK; + bl = data.byte(kCommand); + _and(bl, 127); + bh = data.byte(kCommandtype); + al = 2; + commandwithob(); +} + +void DreamGenContext::walktotext() { + STACK_CHECK; + bl = data.byte(kCommand); + bh = data.byte(kCommandtype); + al = 3; + commandwithob(); +} + +void DreamGenContext::getflagunderp() { + STACK_CHECK; + cx = data.word(kMousex); + _sub(cx, data.word(kMapadx)); + ax = data.word(kMousey); + _sub(ax, data.word(kMapady)); + ch = al; + checkone(); + data.byte(kLastflag) = cl; + data.byte(kLastflagex) = ch; +} + +void DreamGenContext::setwalk() { + STACK_CHECK; + _cmp(data.byte(kLinepointer), 254); + if (!flags.z()) + goto alreadywalking; + al = data.byte(kPointerspath); + _cmp(al, data.byte(kManspath)); + if (flags.z()) + goto cantwalk2; + _cmp(data.byte(kWatchmode), 1); + if (flags.z()) + goto holdingreel; + _cmp(data.byte(kWatchmode), 2); + if (flags.z()) + return /* (cantwalk) */; + data.byte(kDestination) = al; + data.byte(kFinaldest) = al; + _cmp(data.word(kMousebutton), 2); + if (!flags.z()) + goto notwalkandexam; + _cmp(data.byte(kCommandtype), 3); + if (flags.z()) + goto notwalkandexam; + data.byte(kWalkandexam) = 1; + al = data.byte(kCommandtype); + data.byte(kWalkexamtype) = al; + al = data.byte(kCommand); + data.byte(kWalkexamnum) = al; +notwalkandexam: + autosetwalk(); + return; +cantwalk2: + facerightway(); + return; +alreadywalking: + al = data.byte(kPointerspath); + data.byte(kFinaldest) = al; + return; +holdingreel: + data.byte(kDestafterhold) = al; + data.byte(kWatchmode) = 2; +} + +void DreamGenContext::autosetwalk() { + STACK_CHECK; + al = data.byte(kManspath); + _cmp(data.byte(kFinaldest), al); + if (!flags.z()) + goto notsamealready; + return; +notsamealready: + getroomspaths(); + checkdest(); + push(bx); + al = data.byte(kManspath); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = es.byte(bx); + ah = 0; + _sub(ax, 12); + data.word(kLinestartx) = ax; + al = es.byte(bx+1); + ah = 0; + _sub(ax, 12); + data.word(kLinestarty) = ax; + bx = pop(); + al = data.byte(kDestination); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = es.byte(bx); + ah = 0; + _sub(ax, 12); + data.word(kLineendx) = ax; + al = es.byte(bx+1); + ah = 0; + _sub(ax, 12); + data.word(kLineendy) = ax; + bresenhams(); + _cmp(data.byte(kLinedirection), 0); + if (flags.z()) + goto normalline; + al = data.byte(kLinelength); + _dec(al); + data.byte(kLinepointer) = al; + data.byte(kLinedirection) = 1; + return; +normalline: + data.byte(kLinepointer) = 0; +} + +void DreamGenContext::checkdest() { + STACK_CHECK; + push(bx); + _add(bx, 12*8); + ah = data.byte(kManspath); + cl = 4; + _shl(ah, cl); + al = data.byte(kDestination); + cl = 24; + ch = data.byte(kDestination); +checkdestloop: + dh = es.byte(bx); + _and(dh, 0xf0); + dl = es.byte(bx); + _and(dl, 0xf); + _cmp(ax, dx); + if (!flags.z()) + goto nextcheck; + al = es.byte(bx+1); + _and(al, 15); + data.byte(kDestination) = al; + bx = pop(); + return; +nextcheck: + dl = es.byte(bx); + _and(dl, 0xf0); + _shr(dl, 1); + _shr(dl, 1); + _shr(dl, 1); + _shr(dl, 1); + dh = es.byte(bx); + _and(dh, 0xf); + _shl(dh, 1); + _shl(dh, 1); + _shl(dh, 1); + _shl(dh, 1); + _cmp(ax, dx); + if (!flags.z()) + goto nextcheck2; + ch = es.byte(bx+1); + _and(ch, 15); +nextcheck2: + _add(bx, 2); + _dec(cl); + if (!flags.z()) + goto checkdestloop; + data.byte(kDestination) = ch; + bx = pop(); +} + +void DreamGenContext::bresenhams() { + STACK_CHECK; + workoutframes(); + dx = data; + es = dx; + di = 8173; + si = 1; + data.byte(kLinedirection) = 0; + cx = data.word(kLineendx); + _sub(cx, data.word(kLinestartx)); + if (flags.z()) + goto vertline; + if (!flags.s()) + goto line1; + _neg(cx); + bx = data.word(kLineendx); + _xchg(bx, data.word(kLinestartx)); + data.word(kLineendx) = bx; + bx = data.word(kLineendy); + _xchg(bx, data.word(kLinestarty)); + data.word(kLineendy) = bx; + data.byte(kLinedirection) = 1; +line1: + bx = data.word(kLineendy); + _sub(bx, data.word(kLinestarty)); + if (flags.z()) + goto horizline; + if (!flags.s()) + goto line3; + _neg(bx); + _neg(si); +line3: + push(si); + data.byte(kLineroutine) = 0; + _cmp(bx, cx); + if (flags.le()) + goto line4; + data.byte(kLineroutine) = 1; + _xchg(bx, cx); +line4: + _shl(bx, 1); + data.word(kIncrement1) = bx; + _sub(bx, cx); + si = bx; + _sub(bx, cx); + data.word(kIncrement2) = bx; + ax = data.word(kLinestartx); + bx = data.word(kLinestarty); + ah = bl; + _inc(cx); + bx = pop(); + _cmp(data.byte(kLineroutine), 1); + if (flags.z()) + goto hislope; + goto loslope; +vertline: + ax = data.word(kLinestarty); + bx = data.word(kLineendy); + cx = bx; + _sub(cx, ax); + if (!flags.l()) + goto line31; + _neg(cx); + ax = bx; + data.byte(kLinedirection) = 1; +line31: + _inc(cx); + bx = data.word(kLinestartx); + _xchg(ax, bx); + ah = bl; + bx = si; +line32: + _stosw(); + _add(ah, bl); + if (--cx) + goto line32; + goto lineexit; +horizline: + ax = data.word(kLinestartx); + bx = data.word(kLinestarty); + ah = bl; + _inc(cx); +horizloop: + _stosw(); + _inc(al); + if (--cx) + goto horizloop; + goto lineexit; +loslope: +loloop: + _stosw(); + _inc(al); + _or(si, si); + if (!flags.s()) + goto line12; + _add(si, data.word(kIncrement1)); + if (--cx) + goto loloop; + goto lineexit; +line12: + _add(si, data.word(kIncrement2)); + _add(ah, bl); + if (--cx) + goto loloop; + goto lineexit; +hislope: +hiloop: + _stosw(); + _add(ah, bl); + _or(si, si); + if (!flags.s()) + goto line23; + _add(si, data.word(kIncrement1)); + if (--cx) + goto hiloop; + goto lineexit; +line23: + _add(si, data.word(kIncrement2)); + _inc(al); + if (--cx) + goto hiloop; +lineexit: + _sub(di, 8173); + ax = di; + _shr(ax, 1); + data.byte(kLinelength) = al; +} + +void DreamGenContext::workoutframes() { + STACK_CHECK; + bx = data.word(kLinestartx); + _add(bx, 32); + ax = data.word(kLineendx); + _add(ax, 32); + _sub(bx, ax); + if (!flags.c()) + goto notneg1; + _neg(bx); +notneg1: + cx = data.word(kLinestarty); + _add(cx, 32); + ax = data.word(kLineendy); + _add(ax, 32); + _sub(cx, ax); + if (!flags.c()) + goto notneg2; + _neg(cx); +notneg2: + _cmp(bx, cx); + if (!flags.c()) + goto tendstohoriz; + dl = 2; + ax = cx; + _shr(ax, 1); + _cmp(bx, ax); + if (flags.c()) + goto gotquad; + dl = 1; + goto gotquad; +tendstohoriz: + dl = 0; + ax = bx; + _shr(ax, 1); + _cmp(cx, ax); + if (flags.c()) + goto gotquad; + dl = 1; + goto gotquad; +gotquad: + bx = data.word(kLinestartx); + _add(bx, 32); + ax = data.word(kLineendx); + _add(ax, 32); + _sub(bx, ax); + if (flags.c()) + goto isinright; + cx = data.word(kLinestarty); + _add(cx, 32); + ax = data.word(kLineendy); + _add(ax, 32); + _sub(cx, ax); + if (!flags.c()) + goto topleft; + _cmp(dl, 1); + if (flags.z()) + goto noswap1; + _xor(dl, 2); +noswap1: + _add(dl, 4); + goto success; +topleft: + _add(dl, 6); + goto success; +isinright: + cx = data.word(kLinestarty); + _add(cx, 32); + ax = data.word(kLineendy); + _add(ax, 32); + _sub(cx, ax); + if (!flags.c()) + goto botright; + _add(dl, 2); + goto success; +botright: + _cmp(dl, 1); + if (flags.z()) + goto noswap2; + _xor(dl, 2); +noswap2: +success: + _and(dl, 7); + data.byte(kTurntoface) = dl; + data.byte(kTurndirection) = 0; +} + +void DreamGenContext::getroomspaths() { + STACK_CHECK; + al = data.byte(kRoomnum); + ah = 0; + cx = 144; + _mul(cx); + es = data.word(kReels); + bx = (0); + _add(bx, ax); +} + +void DreamGenContext::copyname() { + STACK_CHECK; + push(di); + findobname(); + di = pop(); + es = cs; + cx = 28; +make: + _lodsb(); + _cmp(al, ':'); + if (flags.z()) + goto finishmakename; + _cmp(al, 0); + if (flags.z()) + goto finishmakename; + _stosb(); + if (--cx) + goto make; +finishmakename: + _inc(cx); + al = 0; + _stosb(); + return; + al = 255; + _stosb(cx, true); +} + +void DreamGenContext::findobname() { + STACK_CHECK; + push(ax); + ah = 0; + _add(ax, ax); + bx = ax; + ax = pop(); + _cmp(ah, 5); + if (!flags.z()) + goto notpersonname; + push(ax); + _and(al, 127); + ah = 0; + bx = 64*2; + _mul(bx); + si = ax; + ds = data.word(kPeople); + _add(si, (0+24)); + cx = (0+24+(1026*2)); + ax = ds.word(si); + _add(ax, cx); + si = ax; + ax = pop(); + return; +notpersonname: + _cmp(ah, 4); + if (!flags.z()) + goto notextraname; + ds = data.word(kExtras); + _add(bx, (0+2080+30000+(16*114))); + ax = ds.word(bx); + _add(ax, (0+2080+30000+(16*114)+((114+2)*2))); + si = ax; + return; +notextraname: + _cmp(ah, 2); + if (!flags.z()) + goto notfreename; + ds = data.word(kFreedesc); + _add(bx, (0)); + ax = ds.word(bx); + _add(ax, (0+(82*2))); + si = ax; + return; +notfreename: + _cmp(ah, 1); + if (!flags.z()) + goto notsetname; + ds = data.word(kSetdesc); + _add(bx, (0)); + ax = ds.word(bx); + _add(ax, (0+(130*2))); + si = ax; + return; +notsetname: + ds = data.word(kBlockdesc); + _add(bx, (0)); + ax = ds.word(bx); + _add(ax, (0+(98*2))); + si = ax; +} + +void DreamGenContext::showicon() { + STACK_CHECK; + _cmp(data.byte(kReallocation), 50); + if (!flags.c()) + goto isdream1; + showpanel(); + showman(); + roomname(); + panelicons1(); + zoomicon(); + return; +isdream1: + ds = data.word(kTempsprites); + di = 72; + bx = 2; + al = 45; + ah = 0; + showframe(); + ds = data.word(kTempsprites); + di = 72+47; + bx = 2; + al = 46; + ah = 0; + showframe(); + ds = data.word(kTempsprites); + di = 69-10; + bx = 21; + al = 49; + ah = 0; + showframe(); + ds = data.word(kTempsprites); + di = 160+88; + bx = 2; + al = 45; + ah = 4; + showframe(); + ds = data.word(kTempsprites); + di = 160+43; + bx = 2; + al = 46; + ah = 4; + showframe(); + ds = data.word(kTempsprites); + di = 160+101; + bx = 21; + al = 49; + ah = 4; + showframe(); + middlepanel(); +} + +void DreamGenContext::middlepanel() { + STACK_CHECK; + ds = data.word(kTempsprites); + di = 72+47+20; + bx = 0; + al = 48; + ah = 0; + showframe(); + ds = data.word(kTempsprites); + di = 72+19; + bx = 21; + al = 47; + ah = 0; + showframe(); + ds = data.word(kTempsprites); + di = 160+23; + bx = 0; + al = 48; + ah = 4; + showframe(); + ds = data.word(kTempsprites); + di = 160+71; + bx = 21; + al = 47; + ah = 4; + showframe(); +} + +void DreamGenContext::showman() { + STACK_CHECK; + ds = data.word(kIcons1); + di = 0; + bx = 0; + al = 0; + ah = 0; + showframe(); + ds = data.word(kIcons1); + di = 0; + bx = 114; + al = 1; + ah = 0; + showframe(); + _cmp(data.byte(kShadeson), 0); + if (flags.z()) + return /* (notverycool) */; + ds = data.word(kIcons1); + di = 28; + bx = 25; + al = 2; + ah = 0; + showframe(); +} + +void DreamGenContext::showpanel() { + STACK_CHECK; + ds = data.word(kIcons1); + di = 72; + bx = 0; + al = 19; + ah = 0; + showframe(); + ds = data.word(kIcons1); + di = 192; + bx = 0; + al = 19; + ah = 0; + showframe(); +} + +void DreamGenContext::roomname() { + STACK_CHECK; + di = 88; + bx = 18; + al = 53; + dl = 240; + printmessage(); + bl = data.byte(kRoomnum); + _cmp(bl, 32); + if (flags.c()) + goto notover32; + _sub(bl, 32); +notover32: + bh = 0; + _add(bx, bx); + es = data.word(kRoomdesc); + _add(bx, (0)); + ax = es.word(bx); + _add(ax, (0+(38*2))); + si = ax; + data.word(kLinespacing) = 7; + di = 88; + bx = 25; + dl = 120; + _cmp(data.byte(kWatchon), 1); + if (flags.z()) + goto gotpl; + dl = 160; +gotpl: + al = 0; + ah = 0; + printdirect(); + data.word(kLinespacing) = 10; + usecharset1(); +} + +void DreamGenContext::usecharset1() { + STACK_CHECK; + ax = data.word(kCharset1); + data.word(kCurrentset) = ax; +} + +void DreamGenContext::usetempcharset() { + STACK_CHECK; + ax = data.word(kTempcharset); + data.word(kCurrentset) = ax; +} + +void DreamGenContext::showexit() { + STACK_CHECK; + ds = data.word(kIcons1); + di = 274; + bx = 154; + al = 11; + ah = 0; + showframe(); +} + +void DreamGenContext::panelicons1() { + STACK_CHECK; + di = 0; + _cmp(data.byte(kWatchon), 1); + if (flags.z()) + goto watchison; + di = 48; +watchison: + push(di); + ds = data.word(kIcons2); + _add(di, 204); + bx = 4; + al = 2; + ah = 0; + showframe(); + di = pop(); + push(di); + _cmp(data.byte(kZoomon), 1); + if (flags.z()) + goto zoomisoff; + ds = data.word(kIcons1); + _add(di, 228); + bx = 8; + al = 5; + ah = 0; + showframe(); +zoomisoff: + di = pop(); + showwatch(); +} + +void DreamGenContext::showwatch() { + STACK_CHECK; + _cmp(data.byte(kWatchon), 0); + if (flags.z()) + return /* (nowristwatch) */; + ds = data.word(kIcons1); + di = 250; + bx = 1; + al = 6; + ah = 0; + showframe(); + showtime(); +} + +void DreamGenContext::zoomicon() { + STACK_CHECK; + _cmp(data.byte(kZoomon), 0); + if (flags.z()) + return /* (nozoom1) */; + ds = data.word(kIcons1); + di = (8); + bx = (132)-1; + al = 8; + ah = 0; + showframe(); +} + +void DreamGenContext::showblink() { + STACK_CHECK; + _cmp(data.byte(kManisoffscreen), 1); + if (flags.z()) + return /* (finblink1) */; + _inc(data.byte(kBlinkcount)); + _cmp(data.byte(kShadeson), 0); + if (!flags.z()) + return /* (finblink1) */; + _cmp(data.byte(kReallocation), 50); + if (!flags.c()) + return /* (eyesshut) */; + al = data.byte(kBlinkcount); + _cmp(al, 3); + if (!flags.z()) + return /* (finblink1) */; + data.byte(kBlinkcount) = 0; + al = data.byte(kBlinkframe); + _inc(al); + data.byte(kBlinkframe) = al; + _cmp(al, 6); + if (flags.c()) + goto nomorethan6; + al = 6; +nomorethan6: + ah = 0; + bx = 5888; + _add(bx, ax); + al = cs.byte(bx); + ds = data.word(kIcons1); + di = 44; + bx = 32; + ah = 0; + showframe(); +} + +void DreamGenContext::dumpblink() { + STACK_CHECK; + _cmp(data.byte(kShadeson), 0); + if (!flags.z()) + return /* (nodumpeye) */; + _cmp(data.byte(kBlinkcount), 0); + if (!flags.z()) + return /* (nodumpeye) */; + al = data.byte(kBlinkframe); + _cmp(al, 6); + if (!flags.c()) + return /* (nodumpeye) */; + push(ds); + di = 44; + bx = 32; + cl = 16; + ch = 12; + multidump(); + ds = pop(); +} + +void DreamGenContext::worktoscreenm() { + STACK_CHECK; + animpointer(); + readmouse(); + showpointer(); + vsync(); + worktoscreen(); + delpointer(); +} + +void DreamGenContext::blank() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 199); + if (flags.z()) + return /* (alreadyblnk) */; + data.byte(kCommandtype) = 199; + al = 0; + commandonly(); +} + +void DreamGenContext::allpointer() { + STACK_CHECK; + readmouse(); + showpointer(); + dumppointer(); +} + +void DreamGenContext::hangonp() { + STACK_CHECK; + push(cx); + _add(cx, cx); + ax = pop(); + _add(cx, ax); + data.word(kMaintimer) = 0; + al = data.byte(kPointerframe); + ah = data.byte(kPickup); + push(ax); + data.byte(kPointermode) = 3; + data.byte(kPickup) = 0; + push(cx); + data.byte(kCommandtype) = 255; + readmouse(); + animpointer(); + showpointer(); + vsync(); + dumppointer(); + cx = pop(); +hangloop: + push(cx); + delpointer(); + readmouse(); + animpointer(); + showpointer(); + vsync(); + dumppointer(); + cx = pop(); + ax = data.word(kMousebutton); + _cmp(ax, 0); + if (flags.z()) + goto notpressed; + _cmp(ax, data.word(kOldbutton)); + if (!flags.z()) + goto getoutofit; +notpressed: + if (--cx) + goto hangloop; +getoutofit: + delpointer(); + ax = pop(); + data.byte(kPointerframe) = al; + data.byte(kPickup) = ah; + data.byte(kPointermode) = 0; +} + +void DreamGenContext::hangonw() { + STACK_CHECK; +hangloopw: + push(cx); + delpointer(); + readmouse(); + animpointer(); + showpointer(); + vsync(); + dumppointer(); + cx = pop(); + if (--cx) + goto hangloopw; +} + +void DreamGenContext::hangoncurs() { + STACK_CHECK; +monloop1: + push(cx); + printcurs(); + vsync(); + delcurs(); + cx = pop(); + if (--cx) + goto monloop1; +} + +void DreamGenContext::getunderzoom() { + STACK_CHECK; + di = (8)+5; + bx = (132)+4; + ds = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)); + cl = 46; + ch = 40; + multiget(); +} + +void DreamGenContext::dumpzoom() { + STACK_CHECK; + _cmp(data.byte(kZoomon), 1); + if (!flags.z()) + return /* (notzoomon) */; + di = (8)+5; + bx = (132)+4; + cl = 46; + ch = 40; + multidump(); +} + +void DreamGenContext::putunderzoom() { + STACK_CHECK; + di = (8)+5; + bx = (132)+4; + ds = data.word(kBuffers); + si = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)); + cl = 46; + ch = 40; + multiput(); +} + +void DreamGenContext::crosshair() { + STACK_CHECK; + _cmp(data.byte(kCommandtype), 3); + if (flags.z()) + goto nocross; + _cmp(data.byte(kCommandtype), 10); + if (!flags.c()) + goto nocross; + es = data.word(kWorkspace); + ds = data.word(kIcons1); + di = (8)+24; + bx = (132)+19; + al = 9; + ah = 0; + showframe(); + return; +nocross: + es = data.word(kWorkspace); + ds = data.word(kIcons1); + di = (8)+24; + bx = (132)+19; + al = 29; + ah = 0; + showframe(); +} + +void DreamGenContext::showpointer() { + STACK_CHECK; + showblink(); + di = data.word(kMousex); + data.word(kOldpointerx) = di; + bx = data.word(kMousey); + data.word(kOldpointery) = bx; + _cmp(data.byte(kPickup), 1); + if (flags.z()) + goto itsanobject; + push(bx); + push(di); + ds = data.word(kIcons1); + al = data.byte(kPointerframe); + _add(al, 20); + ah = 0; + _add(ax, ax); + si = ax; + _add(ax, ax); + _add(si, ax); + cx = ds.word(si); + _cmp(cl, 12); + if (!flags.c()) + goto notsmallx; + cl = 12; +notsmallx: + _cmp(ch, 12); + if (!flags.c()) + goto notsmally; + ch = 12; +notsmally: + data.byte(kPointerxs) = cl; + data.byte(kPointerys) = ch; + push(ds); + ds = data.word(kBuffers); + si = (0+(180*10)+32+60); + multiget(); + ds = pop(); + di = pop(); + bx = pop(); + push(di); + push(bx); + al = data.byte(kPointerframe); + _add(al, 20); + ah = 0; + showframe(); + bx = pop(); + di = pop(); + return; +itsanobject: + al = data.byte(kItemframe); + ds = data.word(kExtras); + _cmp(data.byte(kObjecttype), 4); + if (flags.z()) + goto itsfrominv; + ds = data.word(kFreeframes); +itsfrominv: + cl = al; + _add(al, al); + _add(al, cl); + _inc(al); + ah = 0; + push(ax); + _add(ax, ax); + si = ax; + _add(ax, ax); + _add(si, ax); + ax = 2080; + cx = ds.word(si); + _cmp(cl, 12); + if (!flags.c()) + goto notsmallx2; + cl = 12; +notsmallx2: + _cmp(ch, 12); + if (!flags.c()) + goto notsmally2; + ch = 12; +notsmally2: + data.byte(kPointerxs) = cl; + data.byte(kPointerys) = ch; + ax = pop(); + push(di); + push(bx); + push(ax); + push(bx); + push(di); + push(ds); + al = cl; + ah = 0; + _shr(ax, 1); + _sub(data.word(kOldpointerx), ax); + _sub(di, ax); + al = ch; + _shr(ax, 1); + _sub(data.word(kOldpointery), ax); + _sub(bx, ax); + ds = data.word(kBuffers); + si = (0+(180*10)+32+60); + multiget(); + ds = pop(); + di = pop(); + bx = pop(); + ax = pop(); + ah = 128; + showframe(); + bx = pop(); + di = pop(); + ds = data.word(kIcons1); + al = 3; + ah = 128; + showframe(); +} + +void DreamGenContext::delpointer() { + STACK_CHECK; + ax = data.word(kOldpointerx); + _cmp(ax, 0x0ffff); + if (flags.z()) + return /* (nevershown) */; + data.word(kDelherex) = ax; + ax = data.word(kOldpointery); + data.word(kDelherey) = ax; + cl = data.byte(kPointerxs); + data.byte(kDelxs) = cl; + ch = data.byte(kPointerys); + data.byte(kDelys) = ch; + ds = data.word(kBuffers); + si = (0+(180*10)+32+60); + di = data.word(kDelherex); + bx = data.word(kDelherey); + multiput(); +} + +void DreamGenContext::dumppointer() { + STACK_CHECK; + dumpblink(); + cl = data.byte(kDelxs); + ch = data.byte(kDelys); + di = data.word(kDelherex); + bx = data.word(kDelherey); + multidump(); + bx = data.word(kOldpointery); + di = data.word(kOldpointerx); + _cmp(di, data.word(kDelherex)); + if (!flags.z()) + goto difffound; + _cmp(bx, data.word(kDelherey)); + if (flags.z()) + return /* (notboth) */; +difffound: + cl = data.byte(kPointerxs); + ch = data.byte(kPointerys); + multidump(); +} + +void DreamGenContext::undertextline() { + STACK_CHECK; + di = data.word(kTextaddressx); + bx = data.word(kTextaddressy); + ds = data.word(kBuffers); + si = (0); + cl = (180); + ch = (10); + multiget(); +} + +void DreamGenContext::deltextline() { + STACK_CHECK; + di = data.word(kTextaddressx); + bx = data.word(kTextaddressy); + ds = data.word(kBuffers); + si = (0); + cl = (180); + ch = (10); + multiput(); +} + +void DreamGenContext::dumptextline() { + STACK_CHECK; + _cmp(data.byte(kNewtextline), 1); + if (!flags.z()) + return /* (nodumptextline) */; + data.byte(kNewtextline) = 0; + di = data.word(kTextaddressx); + bx = data.word(kTextaddressy); + cl = (180); + ch = (10); + multidump(); +} + +void DreamGenContext::animpointer() { + STACK_CHECK; + _cmp(data.byte(kPointermode), 2); + if (flags.z()) + goto combathand; + _cmp(data.byte(kPointermode), 3); + if (flags.z()) + goto mousehand; + _cmp(data.word(kWatchingtime), 0); + if (flags.z()) + goto notwatchpoint; + data.byte(kPointerframe) = 11; + return; +notwatchpoint: + data.byte(kPointerframe) = 0; + _cmp(data.byte(kInmaparea), 0); + if (flags.z()) + return /* (gothand) */; + _cmp(data.byte(kPointerfirstpath), 0); + if (flags.z()) + return /* (gothand) */; + getflagunderp(); + _cmp(cl, 2); + if (flags.c()) + return /* (gothand) */; + _cmp(cl, 128); + if (!flags.c()) + return /* (gothand) */; + data.byte(kPointerframe) = 3; + _test(cl, 4); + if (!flags.z()) + return /* (gothand) */; + data.byte(kPointerframe) = 4; + _test(cl, 16); + if (!flags.z()) + return /* (gothand) */; + data.byte(kPointerframe) = 5; + _test(cl, 2); + if (!flags.z()) + return /* (gothand) */; + data.byte(kPointerframe) = 6; + _test(cl, 8); + if (!flags.z()) + return /* (gothand) */; + data.byte(kPointerframe) = 8; + return; +mousehand: + _cmp(data.byte(kPointerspeed), 0); + if (flags.z()) + goto rightspeed3; + _dec(data.byte(kPointerspeed)); + goto finflashmouse; +rightspeed3: + data.byte(kPointerspeed) = 5; + _inc(data.byte(kPointercount)); + _cmp(data.byte(kPointercount), 16); + if (!flags.z()) + goto finflashmouse; + data.byte(kPointercount) = 0; +finflashmouse: + al = data.byte(kPointercount); + ah = 0; + bx = 5895; + _add(bx, ax); + al = cs.byte(bx); + data.byte(kPointerframe) = al; + return; +combathand: + data.byte(kPointerframe) = 0; + _cmp(data.byte(kReallocation), 14); + if (!flags.z()) + return /* (notarrow) */; + _cmp(data.byte(kCommandtype), 211); + if (!flags.z()) + return /* (notarrow) */; + data.byte(kPointerframe) = 5; +} + +void DreamGenContext::readmouse() { + STACK_CHECK; + ax = data.word(kMousebutton); + data.word(kOldbutton) = ax; + ax = data.word(kMousex); + data.word(kOldx) = ax; + ax = data.word(kMousey); + data.word(kOldy) = ax; + mousecall(); + data.word(kMousex) = cx; + data.word(kMousey) = dx; + data.word(kMousebutton) = bx; +} + +void DreamGenContext::readmouse1() { + STACK_CHECK; + ax = data.word(kMousex); + data.word(kOldx) = ax; + ax = data.word(kMousey); + data.word(kOldy) = ax; + mousecall(); + data.word(kMousex) = cx; + data.word(kMousey) = dx; + data.word(kMousebutton1) = bx; +} + +void DreamGenContext::readmouse2() { + STACK_CHECK; + ax = data.word(kMousex); + data.word(kOldx) = ax; + ax = data.word(kMousey); + data.word(kOldy) = ax; + mousecall(); + data.word(kMousex) = cx; + data.word(kMousey) = dx; + data.word(kMousebutton2) = bx; +} + +void DreamGenContext::readmouse3() { + STACK_CHECK; + ax = data.word(kMousex); + data.word(kOldx) = ax; + ax = data.word(kMousey); + data.word(kOldy) = ax; + mousecall(); + data.word(kMousex) = cx; + data.word(kMousey) = dx; + data.word(kMousebutton3) = bx; +} + +void DreamGenContext::readmouse4() { + STACK_CHECK; + ax = data.word(kMousebutton); + data.word(kOldbutton) = ax; + ax = data.word(kMousex); + data.word(kOldx) = ax; + ax = data.word(kMousey); + data.word(kOldy) = ax; + mousecall(); + data.word(kMousex) = cx; + data.word(kMousey) = dx; + ax = data.word(kMousebutton1); + _or(ax, data.word(kMousebutton2)); + _or(ax, data.word(kMousebutton3)); + _or(bx, ax); + data.word(kMousebutton) = bx; +} + +void DreamGenContext::readkey() { + STACK_CHECK; + bx = data.word(kBufferout); + _cmp(bx, data.word(kBufferin)); + if (flags.z()) + goto nokey; + _inc(bx); + _and(bx, 15); + data.word(kBufferout) = bx; + di = 5912; + _add(di, bx); + al = cs.byte(di); + data.byte(kCurrentkey) = al; + return; +nokey: + data.byte(kCurrentkey) = 0; +} + +void DreamGenContext::convertkey() { + STACK_CHECK; + _and(al, 127); + ah = 0; + di = 5928; + _add(di, ax); + al = cs.byte(di); +} + +void DreamGenContext::randomnum1() { + STACK_CHECK; + push(ds); + push(es); + push(di); + push(bx); + push(cx); + randomnumber(); + cx = pop(); + bx = pop(); + di = pop(); + es = pop(); + ds = pop(); +} + +void DreamGenContext::randomnum2() { + STACK_CHECK; + push(ds); + push(es); + push(di); + push(bx); + push(ax); + randomnumber(); + cl = al; + ax = pop(); + bx = pop(); + di = pop(); + es = pop(); + ds = pop(); +} + +void DreamGenContext::hangon() { + STACK_CHECK; +hangonloop: + push(cx); + vsync(); + cx = pop(); + if (--cx) + goto hangonloop; +} + +void DreamGenContext::loadtraveltext() { + STACK_CHECK; + dx = 2234; + standardload(); + data.word(kTraveltext) = ax; +} + +void DreamGenContext::loadintotemp() { + STACK_CHECK; + ds = cs; + standardload(); + data.word(kTempgraphics) = ax; +} + +void DreamGenContext::loadintotemp2() { + STACK_CHECK; + ds = cs; + standardload(); + data.word(kTempgraphics2) = ax; +} + +void DreamGenContext::loadintotemp3() { + STACK_CHECK; + ds = cs; + standardload(); + data.word(kTempgraphics3) = ax; +} + +void DreamGenContext::loadtempcharset() { + STACK_CHECK; + standardload(); + data.word(kTempcharset) = ax; +} + +void DreamGenContext::standardload() { + STACK_CHECK; + openfile(); + readheader(); + bx = es.word(di); + push(bx); + cl = 4; + _shr(bx, cl); + allocatemem(); + ds = ax; + cx = pop(); + push(ax); + dx = 0; + readfromfile(); + closefile(); + ax = pop(); +} + +void DreamGenContext::loadtemptext() { + STACK_CHECK; + standardload(); + data.word(kTextfile1) = ax; +} + +void DreamGenContext::loadroom() { + STACK_CHECK; + data.byte(kRoomloaded) = 1; + data.word(kTimecount) = 0; + data.word(kMaintimer) = 0; + data.word(kMapoffsetx) = 104; + data.word(kMapoffsety) = 38; + data.word(kTextaddressx) = 13; + data.word(kTextaddressy) = 182; + data.byte(kTextlen) = 240; + al = data.byte(kNewlocation); + data.byte(kLocation) = al; + getroomdata(); + startloading(); + loadroomssample(); + switchryanon(); + drawflags(); + getdimension(); +} + +void DreamGenContext::loadroomssample() { + STACK_CHECK; + al = data.byte(kRoomssample); + _cmp(al, 255); + if (flags.z()) + return /* (loadedalready) */; + _cmp(al, data.byte(kCurrentsample)); + if (flags.z()) + return /* (loadedalready) */; + data.byte(kCurrentsample) = al; + al = data.byte(kCurrentsample); + cl = '0'; + twodigitnum(); + di = 1896; + _xchg(al, ah); + cs.word(di+10) = ax; + dx = di; + loadsecondsample(); +} + +void DreamGenContext::getridofreels() { + STACK_CHECK; + _cmp(data.byte(kRoomloaded), 0); + if (flags.z()) + return /* (dontgetrid) */; + es = data.word(kReel1); + deallocatemem(); + es = data.word(kReel2); + deallocatemem(); + es = data.word(kReel3); + deallocatemem(); +} + +void DreamGenContext::getridofall() { + STACK_CHECK; + es = data.word(kBackdrop); + deallocatemem(); + es = data.word(kSetframes); + deallocatemem(); + es = data.word(kReel1); + deallocatemem(); + es = data.word(kReel2); + deallocatemem(); + es = data.word(kReel3); + deallocatemem(); + es = data.word(kReels); + deallocatemem(); + es = data.word(kPeople); + deallocatemem(); + es = data.word(kSetdesc); + deallocatemem(); + es = data.word(kBlockdesc); + deallocatemem(); + es = data.word(kRoomdesc); + deallocatemem(); + es = data.word(kFreeframes); + deallocatemem(); + es = data.word(kFreedesc); + deallocatemem(); +} + +void DreamGenContext::restorereels() { + STACK_CHECK; + _cmp(data.byte(kRoomloaded), 0); + if (flags.z()) + return /* (dontrestore) */; + al = data.byte(kReallocation); + getroomdata(); + dx = bx; + openfile(); + readheader(); + dontloadseg(); + dontloadseg(); + dontloadseg(); + dontloadseg(); + allocateload(); + data.word(kReel1) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReel2) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReel3) = ax; + ds = ax; + dx = 0; + loadseg(); + closefile(); +} + +void DreamGenContext::restoreall() { + STACK_CHECK; + al = data.byte(kLocation); + getroomdata(); + dx = bx; + openfile(); + readheader(); + allocateload(); + ds = ax; + data.word(kBackdrop) = ax; + dx = (0); + loadseg(); + ds = data.word(kWorkspace); + dx = (0); + cx = 132*66; + al = 0; + fillspace(); + loadseg(); + sortoutmap(); + allocateload(); + data.word(kSetframes) = ax; + ds = ax; + dx = (0); + loadseg(); + dontloadseg(); + allocateload(); + data.word(kReel1) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReel2) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReel3) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReels) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kPeople) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kSetdesc) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kBlockdesc) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kRoomdesc) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kFreeframes) = ax; + ds = ax; + dx = 0; + loadseg(); + dontloadseg(); + allocateload(); + data.word(kFreedesc) = ax; + ds = ax; + dx = (0); + loadseg(); + closefile(); + setallchanges(); +} + +void DreamGenContext::sortoutmap() { + STACK_CHECK; + push(es); + push(di); + ds = data.word(kWorkspace); + si = 0; + es = data.word(kMapdata); + di = 0; + cx = (60); +blimey: + push(cx); + push(si); + cx = (66); + _movsb(cx, true); + si = pop(); + cx = pop(); + _add(si, 132); + if (--cx) + goto blimey; + di = pop(); + es = pop(); +} + +void DreamGenContext::startloading() { + STACK_CHECK; + data.byte(kCombatcount) = 0; + al = cs.byte(bx+13); + data.byte(kRoomssample) = al; + al = cs.byte(bx+15); + data.byte(kMapx) = al; + al = cs.byte(bx+16); + data.byte(kMapy) = al; + al = cs.byte(bx+20); + data.byte(kLiftflag) = al; + al = cs.byte(bx+21); + data.byte(kManspath) = al; + data.byte(kDestination) = al; + data.byte(kFinaldest) = al; + al = cs.byte(bx+22); + data.byte(kFacing) = al; + data.byte(kTurntoface) = al; + al = cs.byte(bx+23); + data.byte(kCounttoopen) = al; + al = cs.byte(bx+24); + data.byte(kLiftpath) = al; + al = cs.byte(bx+25); + data.byte(kDoorpath) = al; + data.byte(kLastweapon) = -1; + al = cs.byte(bx+27); + push(ax); + al = cs.byte(bx+31); + ah = data.byte(kReallocation); + data.byte(kReallocation) = al; + dx = bx; + openfile(); + readheader(); + allocateload(); + ds = ax; + data.word(kBackdrop) = ax; + dx = (0); + loadseg(); + ds = data.word(kWorkspace); + dx = (0); + cx = 132*66; + al = 0; + fillspace(); + loadseg(); + sortoutmap(); + allocateload(); + data.word(kSetframes) = ax; + ds = ax; + dx = (0); + loadseg(); + ds = data.word(kSetdat); + dx = 0; + cx = (64*128); + al = 255; + fillspace(); + loadseg(); + allocateload(); + data.word(kReel1) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReel2) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReel3) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kReels) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kPeople) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kSetdesc) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kBlockdesc) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kRoomdesc) = ax; + ds = ax; + dx = 0; + loadseg(); + allocateload(); + data.word(kFreeframes) = ax; + ds = ax; + dx = 0; + loadseg(); + ds = data.word(kFreedat); + dx = 0; + cx = (16*80); + al = 255; + fillspace(); + loadseg(); + allocateload(); + data.word(kFreedesc) = ax; + ds = ax; + dx = (0); + loadseg(); + closefile(); + findroominloc(); + deletetaken(); + setallchanges(); + autoappear(); + al = data.byte(kNewlocation); + getroomdata(); + data.byte(kLastweapon) = -1; + data.byte(kMandead) = 0; + data.word(kLookcounter) = 160; + data.byte(kNewlocation) = 255; + data.byte(kLinepointer) = 254; + ax = pop(); + _cmp(al, 255); + if (flags.z()) + goto dontwalkin; + data.byte(kManspath) = al; + push(bx); + autosetwalk(); + bx = pop(); +dontwalkin: + findxyfrompath(); +} + +void DreamGenContext::disablepath() { + STACK_CHECK; + push(cx); + _xchg(al, ah); + cx = -6; +looky2: + _add(cx, 6); + _sub(al, 10); + if (!flags.c()) + goto looky2; + al = ah; + _dec(cx); +lookx2: + _inc(cx); + _sub(al, 11); + if (!flags.c()) + goto lookx2; + al = cl; + ah = 0; + cx = 144; + _mul(cx); + es = data.word(kReels); + bx = (0); + _add(bx, ax); + ax = pop(); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + al = 0; + es.byte(bx+6) = al; +} + +void DreamGenContext::findxyfrompath() { + STACK_CHECK; + getroomspaths(); + al = data.byte(kManspath); + ah = 0; + _add(ax, ax); + _add(ax, ax); + _add(ax, ax); + _add(bx, ax); + ax = es.word(bx); + _sub(al, 12); + _sub(ah, 12); + data.byte(kRyanx) = al; + data.byte(kRyany) = ah; +} + +void DreamGenContext::findroominloc() { + STACK_CHECK; + al = data.byte(kMapy); + cx = -6; +looky: + _add(cx, 6); + _sub(al, 10); + if (!flags.c()) + goto looky; + al = data.byte(kMapx); + _dec(cx); +lookx: + _inc(cx); + _sub(al, 11); + if (!flags.c()) + goto lookx; + data.byte(kRoomnum) = cl; +} + +void DreamGenContext::getroomdata() { + STACK_CHECK; + ah = 0; + cx = 32; + _mul(cx); + bx = 6187; + _add(bx, ax); +} + +void DreamGenContext::readheader() { + STACK_CHECK; + ds = cs; + dx = 6091; + cx = (6187-6091); + readfromfile(); + es = cs; + di = 6141; +} + +void DreamGenContext::allocateload() { + STACK_CHECK; + push(es); + push(di); + bx = es.word(di); + cl = 4; + _shr(bx, cl); + allocatemem(); + di = pop(); + es = pop(); +} + +void DreamGenContext::fillspace() { + STACK_CHECK; + push(es); + push(ds); + push(dx); + push(di); + push(bx); + di = dx; + es = ds; + _stosb(cx, true); + bx = pop(); + di = pop(); + dx = pop(); + ds = pop(); + es = pop(); +} + +void DreamGenContext::getridoftemp() { + STACK_CHECK; + es = data.word(kTempgraphics); + deallocatemem(); +} + +void DreamGenContext::getridoftemptext() { + STACK_CHECK; + es = data.word(kTextfile1); + deallocatemem(); +} + +void DreamGenContext::getridoftemp2() { + STACK_CHECK; + es = data.word(kTempgraphics2); + deallocatemem(); +} + +void DreamGenContext::getridoftemp3() { + STACK_CHECK; + es = data.word(kTempgraphics3); + deallocatemem(); +} + +void DreamGenContext::getridoftempcharset() { + STACK_CHECK; + es = data.word(kTempcharset); + deallocatemem(); +} + +void DreamGenContext::getridoftempsp() { + STACK_CHECK; + es = data.word(kTempsprites); + deallocatemem(); +} + +void DreamGenContext::readsetdata() { + STACK_CHECK; + dx = 1857; + standardload(); + data.word(kCharset1) = ax; + dx = 1922; + standardload(); + data.word(kIcons1) = ax; + dx = 1935; + standardload(); + data.word(kIcons2) = ax; + dx = 1819; + standardload(); + data.word(kMainsprites) = ax; + dx = 2221; + standardload(); + data.word(kPuzzletext) = ax; + dx = 2273; + standardload(); + data.word(kCommandtext) = ax; + ax = data.word(kCharset1); + data.word(kCurrentset) = ax; + _cmp(data.byte(kSoundint), 255); + if (flags.z()) + return /* (novolumeload) */; + dx = 2286; + openfile(); + cx = 2048-256; + ds = data.word(kSoundbuffer); + dx = 16384; + readfromfile(); + closefile(); +} + +void DreamGenContext::makename() { + STACK_CHECK; + si = dx; + di = 6061; +transfer: + al = cs.byte(si); + cs.byte(di) = al; + _inc(si); + _inc(di); + _cmp(al, 0); + if (!flags.z()) + goto transfer; + dx = 6059; +} + +void DreamGenContext::dreamweb() { + STACK_CHECK; + seecommandtail(); + checkbasemem(); + soundstartup(); + setkeyboardint(); + setupemm(); + allocatebuffers(); + setmouse(); + fadedos(); + gettime(); + clearbuffers(); + clearpalette(); + set16colpalette(); + readsetdata(); + data.byte(kWongame) = 0; + dx = 1909; + loadsample(); + setsoundoff(); + scanfornames(); + _cmp(al, 0); + if (!flags.z()) + goto dodecisions; + setmode(); + loadpalfromiff(); + titles(); + credits(); + goto playgame; +dodecisions: + cls(); + setmode(); + decide(); + _cmp(data.byte(kGetback), 4); + if (flags.z()) + goto mainloop; + titles(); + credits(); +playgame: + clearchanges(); + setmode(); + loadpalfromiff(); + data.byte(kLocation) = 255; + data.byte(kRoomafterdream) = 1; + data.byte(kNewlocation) = 35; + data.byte(kVolume) = 7; + loadroom(); + clearsprites(); + initman(); + entrytexts(); + entryanims(); + data.byte(kDestpos) = 3; + initialinv(); + data.byte(kLastflag) = 32; + startup1(); + data.byte(kVolumeto) = 0; + data.byte(kVolumedirection) = -1; + data.byte(kCommandtype) = 255; + goto mainloop; +loadnew: + clearbeforeload(); + loadroom(); + clearsprites(); + initman(); + entrytexts(); + entryanims(); + data.byte(kNewlocation) = 255; + startup(); + data.byte(kCommandtype) = 255; + worktoscreenm(); + goto mainloop; + data.byte(kNewlocation) = 255; + clearsprites(); + initman(); + startup(); + data.byte(kCommandtype) = 255; +mainloop: + _cmp(data.byte(kQuitrequested), 0); + if (flags.z()) + goto _tmp1; + return; +_tmp1: + screenupdate(); + _cmp(data.byte(kWongame), 0); + if (!flags.z()) + goto endofgame; + _cmp(data.byte(kMandead), 1); + if (flags.z()) + goto gameover; + _cmp(data.byte(kMandead), 2); + if (flags.z()) + goto gameover; + _cmp(data.word(kWatchingtime), 0); + if (flags.z()) + goto notwatching; + al = data.byte(kFinaldest); + _cmp(al, data.byte(kManspath)); + if (!flags.z()) + goto mainloop; + _dec(data.word(kWatchingtime)); + if (!flags.z()) + goto mainloop; +notwatching: + _cmp(data.byte(kMandead), 4); + if (flags.z()) + goto gameover; + _cmp(data.byte(kNewlocation), 255); + if (!flags.z()) + goto loadnew; + goto mainloop; +gameover: + clearbeforeload(); + showgun(); + fadescreendown(); + cx = 100; + hangon(); + goto dodecisions; +endofgame: + clearbeforeload(); + fadescreendowns(); + cx = 200; + hangon(); + endgame(); + { quickquit2(); return; }; +} + + + +void DreamGenContext::__start() { + static const uint8 src[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x13, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0xff, 0x00, + 0xff, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0xb6, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2c, 0x00, 0x14, 0x00, 0x02, 0x00, 0x01, 0x01, 0x37, + 0x00, 0x00, 0x00, 0x32, 0x14, 0x00, 0x18, 0x16, 0x00, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x18, 0x21, + 0x0a, 0x4b, 0x00, 0x01, 0x00, 0x01, 0x01, 0x2c, 0x00, 0x1b, 0x00, 0x02, 0x00, 0x02, 0x01, 0x2c, + 0x00, 0x60, 0x00, 0x03, 0x00, 0x04, 0x01, 0x2c, 0x00, 0x76, 0x00, 0x02, 0x00, 0x05, 0x01, 0x2c, + 0x0a, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05, 0x16, 0x14, 0x35, 0x00, 0x03, 0x00, 0x00, 0x05, 0x16, + 0x14, 0x28, 0x00, 0x01, 0x00, 0x02, 0x05, 0x16, 0x14, 0x32, 0x00, 0x01, 0x00, 0x03, 0x02, 0x0b, + 0x0a, 0xc0, 0x00, 0x01, 0x00, 0x00, 0x02, 0x0b, 0x0a, 0xb6, 0x00, 0x02, 0x00, 0x01, 0x08, 0x0b, + 0x0a, 0x00, 0x00, 0x02, 0x00, 0x01, 0x17, 0x00, 0x32, 0x00, 0x00, 0x03, 0x00, 0x00, 0x1c, 0x0b, + 0x14, 0xfa, 0x00, 0x04, 0x00, 0x00, 0x17, 0x00, 0x32, 0x2b, 0x00, 0x02, 0x00, 0x08, 0x17, 0x0b, + 0x28, 0x82, 0x00, 0x02, 0x00, 0x01, 0x17, 0x16, 0x28, 0x7a, 0x00, 0x02, 0x00, 0x02, 0x17, 0x16, + 0x28, 0x69, 0x00, 0x02, 0x00, 0x03, 0x17, 0x16, 0x28, 0x51, 0x00, 0x02, 0x00, 0x04, 0x17, 0x0b, + 0x28, 0x87, 0x00, 0x02, 0x00, 0x05, 0x17, 0x16, 0x28, 0x91, 0x00, 0x02, 0x00, 0x06, 0x04, 0x16, + 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x2d, 0x16, 0x1e, 0xc8, 0x00, 0x00, 0x00, 0x14, 0x2d, 0x16, + 0x1e, 0x27, 0x00, 0x02, 0x00, 0x00, 0x2d, 0x16, 0x1e, 0x19, 0x00, 0x02, 0x00, 0x00, 0x08, 0x16, + 0x28, 0x20, 0x00, 0x02, 0x00, 0x00, 0x07, 0x0b, 0x14, 0x40, 0x00, 0x02, 0x00, 0x00, 0x16, 0x16, + 0x14, 0x52, 0x00, 0x02, 0x00, 0x00, 0x1b, 0x0b, 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x14, 0x00, + 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x21, 0x28, 0x15, 0x00, 0x01, 0x00, 0x00, 0x1d, 0x0b, + 0x0a, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x16, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x19, 0x00, + 0x32, 0x04, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x1e, 0x79, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, + 0x1e, 0x00, 0x00, 0x14, 0x00, 0x00, 0x34, 0x16, 0x1e, 0xc0, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, + 0x1e, 0xe9, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x28, 0x68, 0x00, 0x37, 0x00, 0x00, 0x35, 0x21, + 0x00, 0x63, 0x00, 0x02, 0x00, 0x00, 0x32, 0x16, 0x28, 0x00, 0x00, 0x03, 0x00, 0x00, 0x32, 0x16, + 0x1e, 0xa2, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, 0x1e, 0x39, 0x00, 0x02, 0x00, 0x00, 0x34, 0x16, + 0x1e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x36, 0x00, 0x00, 0x48, 0x00, 0x03, 0x00, 0x00, 0x37, 0x2c, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0e, 0x16, + 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x16, 0x00, 0x2c, 0x01, 0x01, 0x00, 0x00, 0x0a, 0x16, + 0x1e, 0xae, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x16, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x14, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0b, 0x0b, 0x1e, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0b, 0x16, + 0x14, 0x00, 0x00, 0x32, 0x14, 0x00, 0x0e, 0x21, 0x28, 0x00, 0x00, 0x32, 0x14, 0x00, 0xff, 0x7c, + 0xc0, 0x80, 0xc0, 0x1c, 0xc0, 0x20, 0xc0, 0x00, 0xc1, 0x10, 0xc0, 0x18, 0xc0, 0xf4, 0xc0, 0x0c, + 0xc0, 0x24, 0xc0, 0x28, 0xc0, 0x2c, 0xc0, 0x30, 0xc0, 0x54, 0xc0, 0x78, 0xc0, 0x50, 0xc0, 0x74, + 0xc0, 0x34, 0xc0, 0x38, 0xc0, 0x40, 0xc0, 0x44, 0xc0, 0x48, 0xc0, 0x3c, 0xc0, 0x14, 0xc0, 0x88, + 0xc0, 0x8c, 0xc0, 0x90, 0xc0, 0x70, 0xc0, 0xfc, 0xc0, 0x6c, 0xc0, 0x58, 0xc0, 0x68, 0xc0, 0x04, + 0xc1, 0x64, 0xc0, 0x60, 0xc0, 0x5c, 0xc0, 0x94, 0xc0, 0x04, 0xc0, 0xa4, 0xc0, 0x9c, 0xc0, 0xa0, + 0xc0, 0xa8, 0xc0, 0xac, 0xc0, 0x98, 0xc0, 0xb0, 0xc0, 0xb4, 0xc0, 0xc8, 0xc0, 0xcc, 0xc0, 0xd4, + 0xc0, 0xdc, 0xc0, 0xd8, 0xc0, 0x00, 0xc0, 0x08, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, 0xc0, 0x84, + 0xc0, 0x00, 0x3c, 0x21, 0x47, 0x0b, 0x52, 0x16, 0x5d, 0x01, 0x2c, 0x0a, 0x10, 0x04, 0x0b, 0x1e, + 0x0e, 0x04, 0x16, 0x1e, 0x0e, 0x03, 0x21, 0x0a, 0x0e, 0x0a, 0x21, 0x1e, 0x0e, 0x0a, 0x16, 0x1e, + 0x18, 0x09, 0x16, 0x0a, 0x0e, 0x02, 0x21, 0x00, 0x0e, 0x02, 0x16, 0x00, 0x0e, 0x06, 0x0b, 0x1e, + 0x0e, 0x07, 0x0b, 0x14, 0x12, 0x07, 0x00, 0x14, 0x12, 0x07, 0x00, 0x1e, 0x12, 0x37, 0x2c, 0x00, + 0x0e, 0x05, 0x16, 0x1e, 0x0e, 0x08, 0x00, 0x0a, 0x12, 0x08, 0x0b, 0x0a, 0x12, 0x08, 0x16, 0x0a, + 0x12, 0x08, 0x21, 0x0a, 0x12, 0x08, 0x21, 0x14, 0x12, 0x08, 0x21, 0x1e, 0x12, 0x08, 0x21, 0x28, + 0x12, 0x08, 0x16, 0x28, 0x12, 0x08, 0x0b, 0x28, 0x12, 0x15, 0x2c, 0x14, 0x12, 0xff, 0x2e, 0x05, + 0x2f, 0x05, 0x33, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x46, 0x05, 0x2e, 0x05, 0x4d, 0x05, + 0x5d, 0x05, 0x64, 0x05, 0x68, 0x05, 0x6c, 0x05, 0x70, 0x05, 0x7d, 0x05, 0x2e, 0x05, 0x2e, 0x05, + 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x9f, 0x05, 0x2e, 0x05, 0xb5, 0x05, 0xd4, 0x05, 0x2e, 0x05, + 0xe1, 0x05, 0xf7, 0x05, 0x0d, 0x06, 0x26, 0x06, 0x39, 0x06, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, + 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, + 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x49, 0x06, 0x50, 0x06, 0x75, 0x06, 0x2e, 0x05, + 0x2e, 0x05, 0x2e, 0x05, 0x2e, 0x05, 0x82, 0x06, 0x86, 0x06, 0x2e, 0x05, 0x8d, 0x06, 0xff, 0x0f, + 0x01, 0x01, 0xff, 0x0c, 0x05, 0x00, 0x0d, 0x15, 0x00, 0x0f, 0x23, 0x00, 0x11, 0x32, 0x00, 0x12, + 0x67, 0x00, 0x13, 0x6c, 0x00, 0xff, 0x12, 0x13, 0x00, 0x13, 0x17, 0x00, 0xff, 0x0c, 0x33, 0x00, + 0x0d, 0x35, 0x00, 0x0e, 0x0e, 0x00, 0x0f, 0x14, 0x00, 0x00, 0x4e, 0x00, 0xff, 0x0c, 0x77, 0x00, + 0x0c, 0x91, 0x00, 0xff, 0x0d, 0x10, 0x00, 0xff, 0x0d, 0x14, 0x00, 0xff, 0x0e, 0x10, 0x00, 0xff, + 0x0f, 0x04, 0x00, 0x10, 0x08, 0x00, 0x11, 0x86, 0x00, 0x12, 0x99, 0x00, 0xff, 0x0d, 0x6c, 0x00, + 0x0f, 0x46, 0x01, 0x0f, 0x4b, 0x01, 0x0f, 0x50, 0x01, 0x0f, 0x56, 0x01, 0x0f, 0x5c, 0x01, 0x0f, + 0x62, 0x01, 0x12, 0x9f, 0x00, 0x12, 0xb2, 0x00, 0x93, 0xd9, 0x00, 0x54, 0xe4, 0x00, 0xff, 0x0d, + 0x14, 0x00, 0x0d, 0x15, 0x00, 0x0f, 0x22, 0x00, 0x0d, 0x34, 0x00, 0x0d, 0x37, 0x00, 0x19, 0x39, + 0x00, 0x15, 0x49, 0x00, 0xff, 0x0d, 0xc4, 0x00, 0x0d, 0xea, 0x00, 0x0d, 0x9c, 0x00, 0x0e, 0x81, + 0x00, 0x0d, 0x7c, 0x00, 0x0f, 0xa2, 0x00, 0x0f, 0xc8, 0x00, 0x0f, 0xef, 0x00, 0x11, 0x63, 0x00, + 0x0c, 0x34, 0x00, 0xff, 0x0f, 0x38, 0x00, 0x10, 0x40, 0x00, 0x13, 0x16, 0x00, 0x14, 0x21, 0x00, + 0xff, 0x14, 0x0b, 0x00, 0x14, 0x0f, 0x00, 0x0f, 0x1c, 0x00, 0x0d, 0x50, 0x00, 0x15, 0x52, 0x00, + 0x93, 0x57, 0x00, 0x57, 0x80, 0x00, 0xff, 0x0c, 0x0d, 0x00, 0x0e, 0x27, 0x00, 0x0c, 0x43, 0x00, + 0x0c, 0x4b, 0x00, 0x0c, 0x53, 0x00, 0x0c, 0x5b, 0x00, 0x0f, 0x66, 0x00, 0xff, 0x16, 0x24, 0x00, + 0x0d, 0x7d, 0x00, 0x12, 0x58, 0x00, 0x0f, 0x6b, 0x00, 0x0e, 0x7f, 0x00, 0x0e, 0x9a, 0x00, 0x93, + 0xaa, 0x00, 0x57, 0xe8, 0x00, 0xff, 0x15, 0x10, 0x00, 0x15, 0x48, 0x00, 0x15, 0xcd, 0x00, 0x16, + 0x3f, 0x00, 0x97, 0x63, 0x00, 0x58, 0x9e, 0x00, 0xff, 0x0d, 0x15, 0x00, 0x0e, 0x18, 0x00, 0x93, + 0x32, 0x00, 0x57, 0x4b, 0x00, 0x18, 0x80, 0x00, 0xff, 0x53, 0x2e, 0x00, 0x10, 0xa7, 0x00, 0xff, + 0x10, 0x13, 0x00, 0x0e, 0x24, 0x00, 0x10, 0x32, 0x00, 0x0e, 0x41, 0x00, 0x10, 0x51, 0x00, 0x0e, + 0x60, 0x00, 0x10, 0x72, 0x00, 0x0e, 0x81, 0x00, 0x10, 0x93, 0x00, 0x0e, 0xa2, 0x00, 0x10, 0xb1, + 0x00, 0x0e, 0xbf, 0x00, 0xff, 0x0d, 0x30, 0x00, 0x0e, 0x29, 0x00, 0x0f, 0x4e, 0x00, 0x10, 0x5c, + 0x00, 0xff, 0x10, 0x73, 0x00, 0xff, 0x15, 0x67, 0x00, 0x14, 0xc7, 0x00, 0xff, 0x11, 0x35, 0x00, + 0x11, 0x36, 0x00, 0x11, 0x37, 0x00, 0x11, 0x38, 0x00, 0x11, 0x39, 0x00, 0x11, 0x3a, 0x00, 0x11, + 0x3b, 0x00, 0x11, 0x3d, 0x00, 0x11, 0x3f, 0x00, 0x11, 0x40, 0x00, 0x11, 0x41, 0x00, 0xff, 0x9c, + 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, + 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, + 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, + 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, + 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, + 0x99, 0x9f, 0x9e, 0x9c, 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9e, 0x9c, + 0x9a, 0x9f, 0x9a, 0x9c, 0x9e, 0xa0, 0x9b, 0x9d, 0x99, 0x9f, 0x9c, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x53, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + 0x2e, 0x53, 0x30, 0x32, 0x00, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x2e, 0x44, 0x41, 0x54, + 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x30, 0x00, 0x44, 0x52, + 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x43, 0x30, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + 0x2e, 0x56, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x39, + 0x39, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x30, 0x00, 0x44, + 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, + 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, + 0x42, 0x2e, 0x47, 0x30, 0x38, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, + 0x30, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x37, 0x00, + 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, + 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, + 0x45, 0x42, 0x2e, 0x47, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, + 0x47, 0x31, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x30, 0x31, + 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x30, 0x32, 0x00, 0x44, 0x52, + 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + 0x2e, 0x54, 0x31, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x31, + 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x30, 0x00, 0x44, + 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, + 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x32, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, + 0x42, 0x2e, 0x54, 0x32, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, + 0x32, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x35, 0x30, 0x00, + 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x35, 0x31, 0x00, 0x44, 0x52, 0x45, + 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, + 0x45, 0x42, 0x2e, 0x54, 0x38, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, + 0x54, 0x38, 0x32, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x33, + 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x54, 0x38, 0x34, 0x00, 0x44, 0x52, + 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x56, 0x4f, 0x4c, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x47, 0x30, 0x39, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + 0x2e, 0x47, 0x31, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, + 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x32, 0x00, 0x44, + 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x33, 0x00, 0x44, 0x52, 0x45, 0x41, + 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x47, 0x31, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, + 0x42, 0x2e, 0x49, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, + 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x32, 0x00, + 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x33, 0x00, 0x44, 0x52, 0x45, + 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, + 0x45, 0x42, 0x2e, 0x49, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, + 0x49, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x49, 0x30, 0x37, + 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x50, 0x41, 0x4c, 0x00, 0x11, 0x01, + 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x44, 0xc3, 0x04, 0x01, 0x2c, 0x01, 0x00, 0x00, 0x2c, 0x00, + 0x80, 0xc5, 0xd2, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x2c, 0x00, 0xdc, 0xc3, 0x90, 0x00, 0xb0, 0x00, + 0x40, 0x00, 0x60, 0x00, 0x80, 0xc3, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0xc8, 0x00, 0x84, 0xc3, + 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, + 0x9d, 0x00, 0xc6, 0x00, 0x44, 0xc3, 0xff, 0x00, 0x26, 0x01, 0x00, 0x00, 0x18, 0x00, 0xc8, 0xc3, + 0xf7, 0x00, 0x2d, 0x01, 0x28, 0x00, 0x38, 0x00, 0x48, 0xc3, 0x50, 0x00, 0x00, 0x01, 0x9e, 0x00, + 0xca, 0x00, 0xe0, 0xc3, 0x50, 0x00, 0x2c, 0x01, 0x3a, 0x00, 0x92, 0x00, 0x98, 0xc3, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, + 0xc6, 0x00, 0x44, 0xc3, 0xf7, 0x00, 0x2d, 0x01, 0x28, 0x00, 0x38, 0x00, 0x48, 0xc3, 0x50, 0x00, + 0x2c, 0x01, 0x3a, 0x00, 0x92, 0x00, 0xbc, 0xc6, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, + 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x7c, 0xc4, 0xf0, 0x00, + 0x22, 0x01, 0x02, 0x00, 0x2c, 0x00, 0x94, 0xc4, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, + 0xa0, 0xca, 0xff, 0xff, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x7c, 0xc4, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0xee, 0x00, 0x02, 0x01, 0x04, 0x00, + 0x2c, 0x00, 0xc8, 0xc4, 0x68, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x2c, 0x00, 0xcc, 0xc4, 0x18, 0x01, + 0x34, 0x01, 0x04, 0x00, 0x2c, 0x00, 0xb0, 0xc4, 0x68, 0x00, 0xd8, 0x00, 0x8a, 0x00, 0xc0, 0x00, + 0xd0, 0xc4, 0x11, 0x01, 0x40, 0x01, 0x9d, 0x00, 0xc6, 0x00, 0x7c, 0xc4, 0x00, 0x00, 0x40, 0x01, + 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x45, 0x58, 0x49, 0x54, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x48, 0x45, 0x4c, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x49, 0x53, 0x54, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52, 0x45, 0x41, 0x44, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x4c, 0x4f, 0x47, 0x4f, 0x4e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4b, 0x45, 0x59, 0x53, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, + 0x42, 0x4c, 0x41, 0x43, 0x4b, 0x44, 0x52, 0x41, 0x47, 0x4f, 0x4e, 0x20, 0x52, 0x59, 0x41, 0x4e, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x48, 0x45, 0x4e, 0x44, 0x52, 0x49, + 0x58, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x4f, 0x55, 0x49, 0x53, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x00, 0x00, 0x00, 0x53, 0x45, 0x50, 0x54, 0x49, 0x4d, 0x55, 0x53, 0x20, 0x20, 0x20, 0x20, + 0x42, 0x45, 0x43, 0x4b, 0x45, 0x54, 0x54, 0x20, 0x20, 0x20, 0x20, 0x00, 0xff, 0xff, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x52, 0x4f, 0x4f, + 0x54, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x4e, 0x45, 0x54, 0x57, 0xe8, 0xc4, 0x45, 0x4c, + 0x56, 0x41, 0x8c, 0xc6, 0x45, 0x4c, 0x56, 0x42, 0x9c, 0xc6, 0x45, 0x4c, 0x56, 0x43, 0x94, 0xc6, + 0x45, 0x4c, 0x56, 0x45, 0x98, 0xc6, 0x45, 0x4c, 0x56, 0x46, 0xa0, 0xc6, 0x43, 0x47, 0x41, 0x54, + 0x30, 0xc7, 0x52, 0x45, 0x4d, 0x4f, 0xa8, 0xc6, 0x42, 0x55, 0x54, 0x41, 0x3c, 0xc7, 0x43, 0x42, + 0x4f, 0x58, 0x44, 0xc7, 0x4c, 0x49, 0x54, 0x45, 0x5c, 0xc6, 0x50, 0x4c, 0x41, 0x54, 0x40, 0xc7, + 0x4c, 0x49, 0x46, 0x54, 0x7c, 0xc6, 0x57, 0x49, 0x52, 0x45, 0x84, 0xc6, 0x48, 0x4e, 0x44, 0x4c, + 0x88, 0xc6, 0x48, 0x41, 0x43, 0x48, 0x80, 0xc6, 0x44, 0x4f, 0x4f, 0x52, 0xb4, 0xc6, 0x43, 0x53, + 0x48, 0x52, 0x70, 0xc6, 0x47, 0x55, 0x4e, 0x41, 0x34, 0xc7, 0x43, 0x52, 0x41, 0x41, 0x64, 0xc6, + 0x43, 0x52, 0x42, 0x42, 0x68, 0xc6, 0x43, 0x52, 0x43, 0x43, 0x6c, 0xc6, 0x53, 0x45, 0x41, 0x54, + 0xf8, 0xc5, 0x4d, 0x45, 0x4e, 0x55, 0x98, 0xc7, 0x43, 0x4f, 0x4f, 0x4b, 0xac, 0xc6, 0x45, 0x4c, + 0x43, 0x41, 0x4c, 0xc6, 0x45, 0x44, 0x43, 0x41, 0x50, 0xc6, 0x44, 0x44, 0x43, 0x41, 0x54, 0xc6, + 0x41, 0x4c, 0x54, 0x52, 0x04, 0xc6, 0x4c, 0x4f, 0x4b, 0x41, 0x3c, 0xc6, 0x4c, 0x4f, 0x4b, 0x42, + 0x40, 0xc6, 0x45, 0x4e, 0x54, 0x41, 0x10, 0xc6, 0x45, 0x4e, 0x54, 0x42, 0x24, 0xc6, 0x45, 0x4e, + 0x54, 0x45, 0x28, 0xc6, 0x45, 0x4e, 0x54, 0x43, 0x18, 0xc6, 0x45, 0x4e, 0x54, 0x44, 0x2c, 0xc6, + 0x45, 0x4e, 0x54, 0x48, 0x30, 0xc6, 0x57, 0x57, 0x41, 0x54, 0xf0, 0xc5, 0x50, 0x4f, 0x4f, 0x4c, + 0x58, 0xc6, 0x57, 0x53, 0x48, 0x44, 0xf4, 0xc5, 0x47, 0x52, 0x41, 0x46, 0x44, 0xc6, 0x54, 0x52, + 0x41, 0x50, 0x48, 0xc6, 0x43, 0x44, 0x50, 0x45, 0x28, 0xc7, 0x44, 0x4c, 0x4f, 0x4b, 0x08, 0xc6, + 0x48, 0x4f, 0x4c, 0x45, 0x00, 0xc6, 0x44, 0x52, 0x59, 0x52, 0x0c, 0xc6, 0x48, 0x4f, 0x4c, 0x59, + 0xfc, 0xc5, 0x57, 0x41, 0x4c, 0x4c, 0x2c, 0xc7, 0x42, 0x4f, 0x4f, 0x4b, 0x08, 0xc8, 0x41, 0x58, + 0x45, 0x44, 0xb0, 0xc6, 0x53, 0x48, 0x4c, 0x44, 0x38, 0xc7, 0x42, 0x43, 0x4e, 0x59, 0xe8, 0xc5, + 0x4c, 0x49, 0x44, 0x43, 0xe4, 0xc5, 0x4c, 0x49, 0x44, 0x55, 0xe0, 0xc5, 0x4c, 0x49, 0x44, 0x4f, + 0xec, 0xc5, 0x50, 0x49, 0x50, 0x45, 0xa8, 0xc5, 0x42, 0x41, 0x4c, 0x43, 0x20, 0xc6, 0x57, 0x49, + 0x4e, 0x44, 0x1c, 0xc6, 0x50, 0x41, 0x50, 0x52, 0xb4, 0xc7, 0x55, 0x57, 0x54, 0x41, 0xa0, 0xc5, + 0x55, 0x57, 0x54, 0x42, 0xa0, 0xc5, 0x53, 0x54, 0x41, 0x54, 0xd8, 0xc7, 0x54, 0x4c, 0x49, 0x44, + 0x9c, 0xc5, 0x53, 0x4c, 0x41, 0x42, 0xd8, 0xc5, 0x43, 0x41, 0x52, 0x54, 0xdc, 0xc5, 0x46, 0x43, + 0x41, 0x52, 0xac, 0xc5, 0x53, 0x4c, 0x42, 0x41, 0xc0, 0xc5, 0x53, 0x4c, 0x42, 0x42, 0xc4, 0xc5, + 0x53, 0x4c, 0x42, 0x43, 0xcc, 0xc5, 0x53, 0x4c, 0x42, 0x44, 0xc8, 0xc5, 0x53, 0x4c, 0x42, 0x45, + 0xd0, 0xc5, 0x53, 0x4c, 0x42, 0x46, 0xd4, 0xc5, 0x50, 0x4c, 0x49, 0x4e, 0xb0, 0xc5, 0x4c, 0x41, + 0x44, 0x44, 0xb8, 0xc5, 0x4c, 0x41, 0x44, 0x42, 0xbc, 0xc5, 0x47, 0x55, 0x4d, 0x41, 0xb4, 0xc5, + 0x53, 0x51, 0x45, 0x45, 0x88, 0xc5, 0x54, 0x41, 0x50, 0x50, 0x8c, 0xc5, 0x47, 0x55, 0x49, 0x54, + 0x90, 0xc5, 0x43, 0x4f, 0x4e, 0x54, 0x94, 0xc5, 0x42, 0x45, 0x4c, 0x4c, 0x98, 0xc5, 0x8c, 0x8c, + 0x8c, 0x8c, 0x30, 0x30, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x9d, 0x00, 0xb2, 0x00, 0x51, 0x00, + 0x5e, 0x00, 0x58, 0xc7, 0xb3, 0x00, 0xc8, 0x00, 0x51, 0x00, 0x5e, 0x00, 0x5c, 0xc7, 0xc9, 0x00, + 0xde, 0x00, 0x51, 0x00, 0x5e, 0x00, 0x60, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x5f, 0x00, 0x70, 0x00, + 0x64, 0xc7, 0xb3, 0x00, 0xc8, 0x00, 0x5f, 0x00, 0x70, 0x00, 0x68, 0xc7, 0xc9, 0x00, 0xde, 0x00, + 0x5f, 0x00, 0x70, 0x00, 0x6c, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x71, 0x00, 0x82, 0x00, 0x70, 0xc7, + 0xb3, 0x00, 0xc8, 0x00, 0x71, 0x00, 0x82, 0x00, 0x74, 0xc7, 0xc9, 0x00, 0xde, 0x00, 0x71, 0x00, + 0x82, 0x00, 0x78, 0xc7, 0x9d, 0x00, 0xb2, 0x00, 0x83, 0x00, 0x91, 0x00, 0x7c, 0xc7, 0xb3, 0x00, + 0xde, 0x00, 0x83, 0x00, 0x91, 0x00, 0x80, 0xc7, 0xdc, 0x00, 0xea, 0x00, 0x98, 0x00, 0xa6, 0x00, + 0x50, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0xae, 0x00, + 0xbc, 0x00, 0x84, 0x00, 0x94, 0x00, 0x50, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, + 0xa0, 0xca, 0xff, 0xff, 0x18, 0x01, 0x40, 0x01, 0xa0, 0x00, 0xc8, 0x00, 0x50, 0xc7, 0x8f, 0x00, + 0x2c, 0x01, 0x06, 0x00, 0xc2, 0x00, 0xb8, 0xc7, 0x00, 0x00, 0x8f, 0x00, 0x06, 0x00, 0xc2, 0x00, + 0xc0, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x68, 0x00, + 0x80, 0x00, 0x3a, 0x00, 0x48, 0x00, 0xdc, 0xc7, 0x40, 0x00, 0x74, 0x00, 0x4c, 0x00, 0x6a, 0x00, + 0xe0, 0xc7, 0x74, 0x00, 0xa8, 0x00, 0x4c, 0x00, 0x6a, 0x00, 0xe4, 0xc7, 0x40, 0x00, 0x74, 0x00, + 0x6a, 0x00, 0x88, 0x00, 0xe8, 0xc7, 0x74, 0x00, 0xa8, 0x00, 0x6a, 0x00, 0x88, 0x00, 0xec, 0xc7, + 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0xba, 0x00, 0xca, 0x00, + 0x9d, 0x00, 0xad, 0x00, 0x1c, 0xc8, 0xf3, 0x00, 0x03, 0x01, 0x83, 0x00, 0x93, 0x00, 0x18, 0xc8, + 0x0c, 0x01, 0x1c, 0x01, 0xa8, 0x00, 0xb8, 0x00, 0x50, 0xc7, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, + 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x77, 0x00, 0xae, 0x00, 0x52, 0x00, 0x80, 0x00, 0x34, 0xc8, + 0x46, 0x00, 0x89, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0x80, 0xc8, 0xbc, 0x00, 0xfa, 0x00, 0x44, 0x00, + 0x98, 0x00, 0x4c, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, + 0xec, 0x00, 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x48, 0xc8, 0xbc, 0x00, 0xfa, 0x00, 0x40, 0x00, + 0x98, 0x00, 0x58, 0xc8, 0x3e, 0x00, 0x98, 0x00, 0x38, 0x00, 0x85, 0x00, 0x74, 0xc8, 0x00, 0x00, + 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x77, 0x00, 0xae, 0x00, 0x52, 0x00, + 0x80, 0x00, 0x44, 0xc8, 0x46, 0x00, 0x8b, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0x50, 0xc8, 0xec, 0x00, + 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x48, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, + 0xa0, 0xca, 0xff, 0xff, 0xec, 0x00, 0xfc, 0x00, 0x70, 0x00, 0x80, 0x00, 0x48, 0xc8, 0xbc, 0x00, + 0xfa, 0x00, 0x40, 0x00, 0x98, 0x00, 0x54, 0xc8, 0x3e, 0x00, 0x98, 0x00, 0x38, 0x00, 0x85, 0x00, + 0x74, 0xc8, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x0d, 0x0a, + 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, + 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x55, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x45, 0x78, 0x70, + 0x61, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x2e, 0x0d, 0x0a, 0x0d, + 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, + 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x53, 0x6f, + 0x75, 0x6e, 0x64, 0x20, 0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x63, 0x61, 0x72, 0x64, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x61, 0x74, 0x20, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, 0x20, 0x48, 0x65, 0x78, 0x2e, 0x0d, 0x0a, + 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, + 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x4f, + 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x42, 0x61, 0x73, 0x65, 0x20, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, + 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, + 0x3a, 0x0d, 0x0a, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x44, 0x65, 0x61, 0x6c, 0x6c, 0x6f, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x62, 0x6c, 0x65, 0x6d, 0x2e, 0x0d, + 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, + 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, + 0x41, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x35, 0x39, 0x30, 0x4b, 0x20, 0x6f, 0x66, + 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, + 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, + 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x20, + 0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, + 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x75, 0x70, 0x74, 0x20, 0x30, 0x0d, + 0x0a, 0x0d, 0x0a, 0x24, 0x0d, 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, + 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, + 0x55, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x20, 0x45, 0x4d, 0x4d, 0x20, 0x70, 0x61, 0x67, 0x65, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, 0x0d, + 0x0a, 0x0d, 0x0a, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x68, 0x61, 0x73, 0x20, + 0x61, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x0d, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x2e, 0x63, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, + 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x73, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x42, 0x6c, 0x61, 0x73, 0x74, 0x65, 0x72, + 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x0d, + 0x0a, 0x74, 0x68, 0x65, 0x20, 0x42, 0x4c, 0x41, 0x53, 0x54, 0x45, 0x52, 0x20, 0x65, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x20, 0x28, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x41, 0x55, 0x54, 0x4f, 0x45, + 0x58, 0x45, 0x43, 0x2e, 0x42, 0x41, 0x54, 0x29, 0x0d, 0x0a, 0x0d, 0x0a, 0x49, 0x66, 0x20, 0x74, + 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, + 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x37, 0x2c, 0x20, 0x44, 0x4d, 0x41, + 0x20, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, + 0x61, 0x73, 0x65, 0x0d, 0x0a, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, + 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x2e, 0x0d, 0x0a, + 0x0d, 0x0a, 0x54, 0x6f, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x6f, + 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x20, + 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x0d, 0x0a, 0x6f, 0x6e, + 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, + 0x65, 0x2e, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x3a, 0x0d, + 0x0a, 0x0d, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x20, 0x20, 0x20, 0x20, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x20, 0x49, 0x37, 0x20, 0x41, 0x32, 0x32, 0x30, 0x20, 0x44, 0x31, 0x20, 0x20, + 0x20, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, + 0x62, 0x20, 0x6f, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x37, 0x2c, 0x20, 0x44, 0x4d, 0x41, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x20, 0x31, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x61, + 0x73, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x32, 0x32, 0x30, 0x68, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, + 0x42, 0x20, 0x49, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x74, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x44, 0x72, 0x65, 0x61, 0x6d, 0x77, 0x65, 0x62, 0x20, + 0x6f, 0x6e, 0x20, 0x49, 0x52, 0x51, 0x20, 0x35, 0x20, 0x61, 0x6e, 0x64, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f, 0x66, 0x20, + 0x32, 0x32, 0x30, 0x68, 0x2c, 0x20, 0x44, 0x4d, 0x41, 0x20, 0x31, 0x0d, 0x0a, 0x0d, 0x0a, 0x24, + 0x0d, 0x0a, 0x0d, 0x0a, 0x54, 0x72, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x44, 0x72, 0x65, 0x61, + 0x6d, 0x77, 0x65, 0x62, 0x20, 0x43, 0x44, 0x20, 0x69, 0x6e, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x6f, 0x2e, 0x2e, 0x2e, 0x2e, 0x0d, 0x0a, 0x0d, 0x0a, 0x0d, 0x0a, + 0x24, 0x81, 0x00, 0xb8, 0x00, 0x52, 0x00, 0x80, 0x00, 0xc0, 0xc8, 0x50, 0x00, 0x93, 0x00, 0x3e, + 0x00, 0x6f, 0x00, 0x80, 0xc8, 0xb7, 0x00, 0xfa, 0x00, 0x3e, 0x00, 0x6f, 0x00, 0xc4, 0xc8, 0x00, + 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xa0, 0xca, 0xff, 0xff, 0x53, 0x50, 0x45, 0x45, 0x43, + 0x48, 0x52, 0x32, 0x34, 0x43, 0x30, 0x30, 0x30, 0x35, 0x2e, 0x52, 0x41, 0x57, 0x00, 0x87, 0x83, + 0x81, 0x82, 0x2c, 0x00, 0x46, 0x00, 0x20, 0x00, 0x2e, 0x00, 0x70, 0xc4, 0x00, 0x00, 0x32, 0x00, + 0x00, 0x00, 0xb4, 0x00, 0x7c, 0xc3, 0xe2, 0x00, 0xf4, 0x00, 0x0a, 0x00, 0x1a, 0x00, 0x28, 0xc8, + 0xe2, 0x00, 0xf4, 0x00, 0x1a, 0x00, 0x28, 0x00, 0x2c, 0xc8, 0xf0, 0x00, 0x04, 0x01, 0x64, 0x00, + 0x7c, 0x00, 0xcc, 0xc9, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xd4, 0xc9, 0xff, 0xff, + 0x2c, 0x00, 0x46, 0x00, 0x20, 0x00, 0x2e, 0x00, 0x70, 0xc4, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, + 0xb4, 0x00, 0x7c, 0xc3, 0x12, 0x01, 0x24, 0x01, 0x0a, 0x00, 0x1a, 0x00, 0x28, 0xc8, 0x12, 0x01, + 0x24, 0x01, 0x1a, 0x00, 0x28, 0x00, 0x2c, 0xc8, 0xf0, 0x00, 0x04, 0x01, 0x64, 0x00, 0x7c, 0x00, + 0xcc, 0xc9, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0xc8, 0x00, 0xd4, 0xc9, 0xff, 0xff, 0x00, 0x21, + 0x0a, 0x0f, 0xff, 0x00, 0x16, 0x0a, 0x0f, 0xff, 0x00, 0x16, 0x00, 0x0f, 0xff, 0x00, 0x0b, 0x00, + 0x0f, 0xff, 0x00, 0x0b, 0x0a, 0x0f, 0xff, 0x00, 0x00, 0x0a, 0x0f, 0xff, 0x01, 0x2c, 0x0a, 0x06, + 0xff, 0x01, 0x2c, 0x00, 0x0d, 0xff, 0x02, 0x21, 0x00, 0x06, 0xff, 0x02, 0x16, 0x00, 0x05, 0xff, + 0x02, 0x16, 0x0a, 0x10, 0xff, 0x02, 0x0b, 0x0a, 0x10, 0xff, 0x03, 0x2c, 0x00, 0x0f, 0xff, 0x03, + 0x21, 0x0a, 0x06, 0xff, 0x03, 0x21, 0x00, 0x05, 0xff, 0x04, 0x0b, 0x1e, 0x06, 0xff, 0x04, 0x16, + 0x1e, 0x05, 0xff, 0x04, 0x16, 0x14, 0x0d, 0xff, 0x0a, 0x21, 0x1e, 0x06, 0xff, 0x0a, 0x16, 0x1e, + 0x06, 0xff, 0x09, 0x16, 0x0a, 0x06, 0xff, 0x09, 0x16, 0x14, 0x10, 0xff, 0x09, 0x16, 0x1e, 0x10, + 0xff, 0x09, 0x16, 0x28, 0x10, 0xff, 0x09, 0x16, 0x32, 0x10, 0xff, 0x06, 0x0b, 0x1e, 0x06, 0xff, + 0x06, 0x00, 0x0a, 0x0f, 0xff, 0x06, 0x00, 0x14, 0x0f, 0xff, 0x06, 0x0b, 0x14, 0x0f, 0xff, 0x06, + 0x16, 0x14, 0x0f, 0xff, 0x07, 0x0b, 0x14, 0x06, 0xff, 0x07, 0x00, 0x14, 0x06, 0xff, 0x07, 0x00, + 0x1e, 0x06, 0xff, 0x37, 0x2c, 0x00, 0x05, 0xff, 0x37, 0x2c, 0x0a, 0x05, 0xff, 0x05, 0x16, 0x1e, + 0x06, 0xff, 0x05, 0x16, 0x14, 0x0f, 0xff, 0x05, 0x16, 0x0a, 0x0f, 0xff, 0x18, 0x16, 0x00, 0x0f, + 0xff, 0x18, 0x21, 0x00, 0x0f, 0xff, 0x18, 0x2c, 0x00, 0x0f, 0xff, 0x18, 0x21, 0x0a, 0x0f, 0xff, + 0x08, 0x00, 0x0a, 0x06, 0xff, 0x08, 0x0b, 0x0a, 0x06, 0xff, 0x08, 0x16, 0x0a, 0x06, 0xff, 0x08, + 0x21, 0x0a, 0x06, 0xff, 0x08, 0x21, 0x14, 0x06, 0xff, 0x08, 0x21, 0x1e, 0x06, 0xff, 0x08, 0x21, + 0x28, 0x06, 0xff, 0x08, 0x16, 0x28, 0x06, 0xff, 0x08, 0x0b, 0x28, 0x06, 0xff, 0x0b, 0x0b, 0x14, + 0x0c, 0xff, 0x0b, 0x0b, 0x1e, 0x0c, 0xff, 0x0b, 0x16, 0x14, 0x0c, 0xff, 0x0b, 0x16, 0x1e, 0x0c, + 0xff, 0x0c, 0x16, 0x14, 0x0c, 0xff, 0x0d, 0x16, 0x14, 0x0c, 0xff, 0x0d, 0x21, 0x14, 0x0c, 0xff, + 0x0e, 0x2c, 0x14, 0x0c, 0xff, 0x0e, 0x21, 0x00, 0x0c, 0xff, 0x0e, 0x21, 0x0a, 0x0c, 0xff, 0x0e, + 0x21, 0x14, 0x0c, 0xff, 0x0e, 0x21, 0x1e, 0x0c, 0xff, 0x0e, 0x21, 0x28, 0x0c, 0xff, 0x0e, 0x16, + 0x00, 0x10, 0xff, 0x13, 0x00, 0x00, 0x0c, 0xff, 0x14, 0x00, 0x14, 0x10, 0xff, 0x14, 0x00, 0x1e, + 0x10, 0xff, 0x14, 0x0b, 0x1e, 0x10, 0xff, 0x14, 0x00, 0x28, 0x10, 0xff, 0x14, 0x0b, 0x28, 0x10, + 0xff, 0x15, 0x0b, 0x0a, 0x0f, 0xff, 0x15, 0x0b, 0x14, 0x0f, 0xff, 0x15, 0x00, 0x14, 0x0f, 0xff, + 0x15, 0x16, 0x14, 0x0f, 0xff, 0x15, 0x21, 0x14, 0x0f, 0xff, 0x15, 0x2c, 0x14, 0x0f, 0xff, 0x15, + 0x2c, 0x0a, 0x0f, 0xff, 0x16, 0x16, 0x0a, 0x10, 0xff, 0x16, 0x16, 0x14, 0x10, 0xff, 0x17, 0x16, + 0x1e, 0x0d, 0xff, 0x17, 0x16, 0x28, 0x0d, 0xff, 0x17, 0x21, 0x28, 0x0d, 0xff, 0x17, 0x0b, 0x28, + 0x0d, 0xff, 0x17, 0x00, 0x28, 0x0d, 0xff, 0x17, 0x00, 0x32, 0x0d, 0xff, 0x19, 0x0b, 0x28, 0x10, + 0xff, 0x19, 0x0b, 0x32, 0x10, 0xff, 0x19, 0x00, 0x32, 0x10, 0xff, 0x1b, 0x0b, 0x14, 0x10, 0xff, + 0x1b, 0x0b, 0x1e, 0x10, 0xff, 0x1d, 0x0b, 0x0a, 0x10, 0xff, 0x2d, 0x16, 0x1e, 0x0c, 0xff, 0x2d, + 0x16, 0x28, 0x0c, 0xff, 0x2d, 0x16, 0x32, 0x0c, 0xff, 0x2e, 0x16, 0x28, 0x0c, 0xff, 0x2e, 0x0b, + 0x32, 0x0c, 0xff, 0x2e, 0x16, 0x32, 0x0c, 0xff, 0x2e, 0x21, 0x32, 0x0c, 0xff, 0x2f, 0x00, 0x00, + 0x0c, 0xff, 0x1a, 0x16, 0x14, 0x10, 0xff, 0x1a, 0x21, 0x0a, 0x10, 0xff, 0x1a, 0x21, 0x14, 0x10, + 0xff, 0x1a, 0x21, 0x1e, 0x10, 0xff, 0x1a, 0x2c, 0x1e, 0x10, 0xff, 0x1a, 0x16, 0x1e, 0x10, 0xff, + 0x1a, 0x0b, 0x1e, 0x10, 0xff, 0x1a, 0x0b, 0x14, 0x10, 0xff, 0x1a, 0x00, 0x14, 0x10, 0xff, 0x1a, + 0x0b, 0x28, 0x10, 0xff, 0x1a, 0x00, 0x28, 0x10, 0xff, 0x1a, 0x16, 0x28, 0x10, 0xff, 0x1a, 0x0b, + 0x32, 0x10, 0xff, 0x1c, 0x00, 0x1e, 0x0f, 0xff, 0x1c, 0x00, 0x14, 0x0f, 0xff, 0x1c, 0x00, 0x28, + 0x0f, 0xff, 0x1c, 0x0b, 0x1e, 0x0f, 0xff, 0x1c, 0x0b, 0x14, 0x0f, 0xff, 0x1c, 0x16, 0x1e, 0x0f, + 0xff, 0x1c, 0x16, 0x14, 0x0f, 0xff, 0xff, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x20, 0x4e, 0x41, + 0x4d, 0x45, 0x20, 0x4f, 0x4e, 0x45, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, + 0x10, 0x12, 0x12, 0x11, 0x10, 0x10, 0x10, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x30, 0x2d, 0x00, 0x08, 0x00, 0x51, 0x57, 0x45, 0x52, 0x54, 0x59, 0x55, 0x49, + 0x4f, 0x50, 0x00, 0x00, 0x0d, 0x00, 0x41, 0x53, 0x44, 0x46, 0x47, 0x48, 0x4a, 0x4b, 0x4c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x5a, 0x58, 0x43, 0x56, 0x42, 0x4e, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x3a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x20, 0x44, 0x41, 0x54, 0x41, 0x20, 0x46, 0x49, 0x4c, 0x45, 0x20, 0x43, 0x4f, + 0x50, 0x59, 0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x31, 0x39, 0x39, 0x32, 0x20, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x49, 0x56, 0x45, 0x20, 0x52, 0x45, 0x41, 0x4c, 0x49, 0x54, 0x59, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x30, 0x00, 0x05, 0xff, 0x21, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x06, 0x02, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x31, 0x00, 0x01, 0xff, 0x2c, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x07, 0x02, 0xff, 0xff, 0xff, 0xff, 0x06, 0xff, 0xff, 0xff, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x32, 0x00, 0x02, 0xff, 0x21, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x00, 0xff, 0xff, 0x01, 0xff, 0x03, 0xff, 0xff, 0xff, 0x02, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x33, 0x00, 0x05, 0xff, 0x21, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x02, 0x02, 0x00, 0x02, 0x04, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x34, 0x00, 0x17, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x00, 0x05, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x04, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x35, 0x00, 0x05, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x02, 0x00, 0x04, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x05, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x36, 0x00, 0x05, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x00, 0x00, 0x01, 0x02, 0xff, 0x00, 0xff, 0xff, 0xff, 0x06, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x37, 0x00, 0xff, 0xff, 0x00, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x02, 0x02, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x07, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x38, 0x00, 0x08, 0xff, 0x00, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x02, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0b, 0x28, 0x00, 0x08, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x39, 0x00, 0x09, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x04, 0x06, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x09, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x30, 0x00, 0x0a, 0xff, 0x21, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x02, 0x00, 0xff, 0xff, 0x02, 0x02, 0x04, 0x16, 0x1e, 0xff, 0x0a, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x31, 0x00, 0x0b, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x32, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x33, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0d, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x34, 0x00, 0x0e, 0xff, 0x2c, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x39, 0x00, 0x13, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x30, 0x00, 0x16, 0xff, 0x00, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x02, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x14, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x31, 0x00, 0x05, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x02, 0x0f, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x04, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x33, 0x00, 0x17, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x02, 0x0f, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x34, 0x00, 0x05, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x06, 0x02, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x35, 0x00, 0x16, 0xff, 0x0b, 0x28, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x36, 0x00, 0x09, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x04, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x37, 0x00, 0x16, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x38, 0x00, 0x05, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x39, 0x00, 0x16, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1d, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x35, 0x00, 0x05, 0xff, 0x16, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x01, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x34, 0x00, 0x17, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x02, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x30, 0x00, 0x0a, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x03, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x32, 0x00, 0x0c, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x33, 0x00, 0x05, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x06, 0x02, 0xff, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x34, 0x00, 0x05, 0xff, 0x16, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x03, 0x06, 0x00, 0xff, 0xff, 0xff, 0xff, 0x21, 0x00, 0x03, 0x18, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x32, 0x00, 0x16, 0xff, 0x16, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x31, 0x00, 0x0b, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x38, 0x00, 0x05, 0xff, 0x0b, 0x14, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x06, 0xff, 0xff, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x31, 0x00, 0x05, 0xff, 0x0b, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x01, 0x04, 0x02, 0x0f, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x32, 0x36, 0x00, 0x09, 0xff, 0x00, 0x28, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x31, 0x39, 0x00, 0x13, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x02, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x38, 0x00, 0x08, 0xff, 0x0b, 0x28, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x08, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x30, 0x31, 0x00, 0x01, 0xff, 0x2c, 0x0a, 0xff, 0xff, 0xff, 0x00, + 0x03, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x35, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x36, 0x00, 0x23, 0xff, 0x16, 0x28, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x37, 0x00, 0x23, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x35, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x34, 0x36, 0x00, 0x23, 0xff, 0x16, 0x32, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x30, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x31, 0x00, 0x23, 0xff, 0x0b, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x32, 0x00, 0x23, 0xff, 0x16, 0x1e, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x33, 0x00, 0x23, 0xff, 0x21, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x35, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x34, 0x00, 0x23, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x36, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x52, 0x35, 0x35, 0x00, 0x0e, 0xff, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x02, 0x04, + 0x01, 0x0a, 0x09, 0x08, 0x06, 0x0b, 0x04, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, + 0x45, 0x42, 0x2e, 0x44, 0x30, 0x30, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, + 0x44, 0x30, 0x31, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x32, + 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x33, 0x00, 0x44, 0x52, + 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x34, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, + 0x57, 0x45, 0x42, 0x2e, 0x44, 0x30, 0x35, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, + 0x2e, 0x44, 0x30, 0x36, 0x00, 0x44, 0x52, 0x45, 0x41, 0x4d, 0x57, 0x45, 0x42, 0x2e, 0x44, 0x45, + 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, }; + ds.assign(src, src + sizeof(src)); +dreamweb(); +} + +void DreamGenContext::__dispatch_call(uint16 addr) { + switch(addr) { + case 0xc000: alleybarksound(); break; + case 0xc004: intromusic(); break; + case 0xc008: foghornsound(); break; + case 0xc00c: receptionist(); break; + case 0xc010: smokebloke(); break; + case 0xc014: attendant(); break; + case 0xc018: manasleep(); break; + case 0xc01c: eden(); break; + case 0xc020: edeninbath(); break; + case 0xc024: malefan(); break; + case 0xc028: femalefan(); break; + case 0xc02c: louis(); break; + case 0xc030: louischair(); break; + case 0xc034: manasleep2(); break; + case 0xc038: mansatstill(); break; + case 0xc03c: tattooman(); break; + case 0xc040: drinker(); break; + case 0xc044: bartender(); break; + case 0xc048: othersmoker(); break; + case 0xc04c: barwoman(); break; + case 0xc050: interviewer(); break; + case 0xc054: soldier1(); break; + case 0xc058: rockstar(); break; + case 0xc05c: helicopter(); break; + case 0xc060: mugger(); break; + case 0xc064: aide(); break; + case 0xc068: businessman(); break; + case 0xc06c: poolguard(); break; + case 0xc070: security(); break; + case 0xc074: heavy(); break; + case 0xc078: bossman(); break; + case 0xc07c: gamer(); break; + case 0xc080: sparkydrip(); break; + case 0xc084: carparkdrip(); break; + case 0xc088: keeper(); break; + case 0xc08c: candles1(); break; + case 0xc090: smallcandle(); break; + case 0xc094: intromagic1(); break; + case 0xc098: candles(); break; + case 0xc09c: candles2(); break; + case 0xc0a0: gates(); break; + case 0xc0a4: intromagic2(); break; + case 0xc0a8: intromagic3(); break; + case 0xc0ac: intromonks1(); break; + case 0xc0b0: intromonks2(); break; + case 0xc0b4: handclap(); break; + case 0xc0b8: monks2text(); break; + case 0xc0bc: intro1text(); break; + case 0xc0c0: intro2text(); break; + case 0xc0c4: intro3text(); break; + case 0xc0c8: monkandryan(); break; + case 0xc0cc: endgameseq(); break; + case 0xc0d0: rollendcredits(); break; + case 0xc0d4: priest(); break; + case 0xc0d8: madmanstelly(); break; + case 0xc0dc: madman(); break; + case 0xc0e0: madmantext(); break; + case 0xc0e4: madmode(); break; + case 0xc0e8: priesttext(); break; + case 0xc0ec: textforend(); break; + case 0xc0f0: textformonk(); break; + case 0xc0f4: drunk(); break; + case 0xc0f8: advisor(); break; + case 0xc0fc: copper(); break; + case 0xc100: sparky(); break; + case 0xc104: train(); break; + case 0xc108: addtopeoplelist(); break; + case 0xc10c: showgamereel(); break; + case 0xc110: checkspeed(); break; + case 0xc114: clearsprites(); break; + case 0xc118: makesprite(); break; + case 0xc11c: delsprite(); break; + case 0xc120: spriteupdate(); break; + case 0xc124: printsprites(); break; + case 0xc128: printasprite(); break; + case 0xc12c: checkone(); break; + case 0xc130: findsource(); break; + case 0xc134: initman(); break; + case 0xc138: mainman(); break; + case 0xc13c: aboutturn(); break; + case 0xc140: walking(); break; + case 0xc144: facerightway(); break; + case 0xc148: checkforexit(); break; + case 0xc14c: adjustdown(); break; + case 0xc150: adjustup(); break; + case 0xc154: adjustleft(); break; + case 0xc158: adjustright(); break; + case 0xc15c: reminders(); break; + case 0xc160: initrain(); break; + case 0xc164: splitintolines(); break; + case 0xc168: getblockofpixel(); break; + case 0xc16c: showrain(); break; + case 0xc170: backobject(); break; + case 0xc174: liftsprite(); break; + case 0xc178: liftnoise(); break; + case 0xc17c: random(); break; + case 0xc180: steady(); break; + case 0xc184: constant(); break; + case 0xc188: doorway(); break; + case 0xc18c: widedoor(); break; + case 0xc190: dodoor(); break; + case 0xc194: lockeddoorway(); break; + case 0xc198: updatepeople(); break; + case 0xc19c: getreelframeax(); break; + case 0xc1a0: reelsonscreen(); break; + case 0xc1a4: plotreel(); break; + case 0xc1a8: soundonreels(); break; + case 0xc1ac: reconstruct(); break; + case 0xc1b0: dealwithspecial(); break; + case 0xc1b4: movemap(); break; + case 0xc1b8: getreelstart(); break; + case 0xc1bc: showreelframe(); break; + case 0xc1c0: deleverything(); break; + case 0xc1c4: dumpeverything(); break; + case 0xc1c8: allocatework(); break; + case 0xc1cc: showpcx(); break; + case 0xc1d0: readabyte(); break; + case 0xc1d4: readoneblock(); break; + case 0xc1d8: loadpalfromiff(); break; + case 0xc1dc: setmode(); break; + case 0xc1ec: paneltomap(); break; + case 0xc1f0: maptopanel(); break; + case 0xc1f4: dumpmap(); break; + case 0xc1f8: pixelcheckset(); break; + case 0xc1fc: createpanel(); break; + case 0xc200: createpanel2(); break; + case 0xc204: clearwork(); break; + case 0xc208: vsync(); break; + case 0xc20c: doshake(); break; + case 0xc210: zoom(); break; + case 0xc214: delthisone(); break; + case 0xc224: width160(); break; + case 0xc228: doblocks(); break; + case 0xc22c: showframe(); break; + case 0xc230: frameoutv(); break; + case 0xc238: frameoutbh(); break; + case 0xc23c: frameoutfx(); break; + case 0xc240: transferinv(); break; + case 0xc244: transfermap(); break; + case 0xc248: fadedos(); break; + case 0xc24c: dofade(); break; + case 0xc250: clearendpal(); break; + case 0xc254: clearpalette(); break; + case 0xc258: fadescreenup(); break; + case 0xc25c: fadetowhite(); break; + case 0xc260: fadefromwhite(); break; + case 0xc264: fadescreenups(); break; + case 0xc268: fadescreendownhalf(); break; + case 0xc26c: fadescreenuphalf(); break; + case 0xc270: fadescreendown(); break; + case 0xc274: fadescreendowns(); break; + case 0xc278: clearstartpal(); break; + case 0xc27c: showgun(); break; + case 0xc280: rollendcredits2(); break; + case 0xc284: rollem(); break; + case 0xc288: fadecalculation(); break; + case 0xc28c: greyscalesum(); break; + case 0xc290: showgroup(); break; + case 0xc294: paltostartpal(); break; + case 0xc298: endpaltostart(); break; + case 0xc29c: startpaltoend(); break; + case 0xc2a0: paltoendpal(); break; + case 0xc2a4: allpalette(); break; + case 0xc2a8: dumpcurrent(); break; + case 0xc2ac: fadedownmon(); break; + case 0xc2b0: fadeupmon(); break; + case 0xc2b4: fadeupmonfirst(); break; + case 0xc2b8: fadeupyellows(); break; + case 0xc2bc: initialmoncols(); break; + case 0xc2c0: titles(); break; + case 0xc2c4: endgame(); break; + case 0xc2c8: monkspeaking(); break; + case 0xc2cc: showmonk(); break; + case 0xc2d0: gettingshot(); break; + case 0xc2d4: credits(); break; + case 0xc2d8: biblequote(); break; + case 0xc2dc: hangone(); break; + case 0xc2e0: intro(); break; + case 0xc2e4: runintroseq(); break; + case 0xc2e8: runendseq(); break; + case 0xc2ec: loadintroroom(); break; + case 0xc2f0: mode640x480(); break; + case 0xc2f4: set16colpalette(); break; + case 0xc2f8: realcredits(); break; + case 0xc2fc: printchar(); break; + case 0xc300: kernchars(); break; + case 0xc304: printslow(); break; + case 0xc308: waitframes(); break; + case 0xc30c: printboth(); break; + case 0xc310: printdirect(); break; + case 0xc314: monprint(); break; + case 0xc318: getnumber(); break; + case 0xc31c: getnextword(); break; + case 0xc320: fillryan(); break; + case 0xc324: fillopen(); break; + case 0xc328: findallryan(); break; + case 0xc32c: findallopen(); break; + case 0xc330: obtoinv(); break; + case 0xc334: isitworn(); break; + case 0xc338: makeworn(); break; + case 0xc33c: examineob(); break; + case 0xc340: makemainscreen(); break; + case 0xc344: getbackfromob(); break; + case 0xc348: incryanpage(); break; + case 0xc34c: openinv(); break; + case 0xc350: showryanpage(); break; + case 0xc354: openob(); break; + case 0xc358: obicons(); break; + case 0xc35c: examicon(); break; + case 0xc360: obpicture(); break; + case 0xc364: describeob(); break; + case 0xc368: additionaltext(); break; + case 0xc36c: obsthatdothings(); break; + case 0xc370: getobtextstart(); break; + case 0xc374: searchforsame(); break; + case 0xc378: findnextcolon(); break; + case 0xc37c: inventory(); break; + case 0xc380: setpickup(); break; + case 0xc384: examinventory(); break; + case 0xc388: reexfrominv(); break; + case 0xc38c: reexfromopen(); break; + case 0xc390: swapwithinv(); break; + case 0xc394: swapwithopen(); break; + case 0xc398: intoinv(); break; + case 0xc39c: deletetaken(); break; + case 0xc3a0: outofinv(); break; + case 0xc3a4: getfreead(); break; + case 0xc3a8: getexad(); break; + case 0xc3ac: geteitherad(); break; + case 0xc3b0: getanyad(); break; + case 0xc3b4: getanyaddir(); break; + case 0xc3b8: getopenedsize(); break; + case 0xc3bc: getsetad(); break; + case 0xc3c0: findinvpos(); break; + case 0xc3c4: findopenpos(); break; + case 0xc3c8: dropobject(); break; + case 0xc3cc: droperror(); break; + case 0xc3d0: cantdrop(); break; + case 0xc3d4: wornerror(); break; + case 0xc3d8: removeobfrominv(); break; + case 0xc3dc: selectopenob(); break; + case 0xc3e0: useopened(); break; + case 0xc3e4: errormessage1(); break; + case 0xc3e8: errormessage2(); break; + case 0xc3ec: errormessage3(); break; + case 0xc3f0: checkobjectsize(); break; + case 0xc3f4: outofopen(); break; + case 0xc3f8: transfertoex(); break; + case 0xc3fc: pickupconts(); break; + case 0xc400: transfercontoex(); break; + case 0xc404: transfertext(); break; + case 0xc408: getexpos(); break; + case 0xc40c: purgealocation(); break; + case 0xc410: emergencypurge(); break; + case 0xc414: purgeanitem(); break; + case 0xc418: deleteexobject(); break; + case 0xc41c: deleteexframe(); break; + case 0xc420: deleteextext(); break; + case 0xc424: blockget(); break; + case 0xc428: drawfloor(); break; + case 0xc42c: calcmapad(); break; + case 0xc430: getdimension(); break; + case 0xc434: addalong(); break; + case 0xc438: addlength(); break; + case 0xc43c: drawflags(); break; + case 0xc440: eraseoldobs(); break; + case 0xc444: showallobs(); break; + case 0xc448: makebackob(); break; + case 0xc44c: showallfree(); break; + case 0xc450: showallex(); break; + case 0xc454: calcfrframe(); break; + case 0xc458: finalframe(); break; + case 0xc45c: adjustlen(); break; + case 0xc460: getmapad(); break; + case 0xc464: getxad(); break; + case 0xc468: getyad(); break; + case 0xc46c: autolook(); break; + case 0xc470: look(); break; + case 0xc474: dolook(); break; + case 0xc478: redrawmainscrn(); break; + case 0xc47c: getback1(); break; + case 0xc480: talk(); break; + case 0xc484: convicons(); break; + case 0xc488: getpersframe(); break; + case 0xc48c: starttalk(); break; + case 0xc490: getpersontext(); break; + case 0xc494: moretalk(); break; + case 0xc498: dosometalk(); break; + case 0xc49c: hangonpq(); break; + case 0xc4a0: redes(); break; + case 0xc4a4: newplace(); break; + case 0xc4a8: selectlocation(); break; + case 0xc4ac: showcity(); break; + case 0xc4b0: lookatplace(); break; + case 0xc4b4: getundercentre(); break; + case 0xc4b8: putundercentre(); break; + case 0xc4bc: locationpic(); break; + case 0xc4c0: getdestinfo(); break; + case 0xc4c4: showarrows(); break; + case 0xc4c8: nextdest(); break; + case 0xc4cc: lastdest(); break; + case 0xc4d0: destselect(); break; + case 0xc4d4: getlocation(); break; + case 0xc4d8: setlocation(); break; + case 0xc4dc: resetlocation(); break; + case 0xc4e0: readdesticon(); break; + case 0xc4e4: readcitypic(); break; + case 0xc4e8: usemon(); break; + case 0xc4ec: printoutermon(); break; + case 0xc4f0: loadpersonal(); break; + case 0xc4f4: loadnews(); break; + case 0xc4f8: loadcart(); break; + case 0xc4fc: lookininterface(); break; + case 0xc500: turnonpower(); break; + case 0xc504: randomaccess(); break; + case 0xc508: powerlighton(); break; + case 0xc50c: powerlightoff(); break; + case 0xc510: accesslighton(); break; + case 0xc514: accesslightoff(); break; + case 0xc518: locklighton(); break; + case 0xc51c: locklightoff(); break; + case 0xc520: input(); break; + case 0xc524: makecaps(); break; + case 0xc528: delchar(); break; + case 0xc52c: execcommand(); break; + case 0xc530: neterror(); break; + case 0xc534: dircom(); break; + case 0xc538: searchforfiles(); break; + case 0xc53c: signon(); break; + case 0xc540: showkeys(); break; + case 0xc544: read(); break; + case 0xc548: dirfile(); break; + case 0xc54c: getkeyandlogo(); break; + case 0xc550: searchforstring(); break; + case 0xc554: parser(); break; + case 0xc558: scrollmonitor(); break; + case 0xc55c: lockmon(); break; + case 0xc560: monitorlogo(); break; + case 0xc564: printlogo(); break; + case 0xc568: showcurrentfile(); break; + case 0xc56c: monmessage(); break; + case 0xc570: processtrigger(); break; + case 0xc574: triggermessage(); break; + case 0xc578: printcurs(); break; + case 0xc57c: delcurs(); break; + case 0xc580: useobject(); break; + case 0xc584: useroutine(); break; + case 0xc588: wheelsound(); break; + case 0xc58c: runtap(); break; + case 0xc590: playguitar(); break; + case 0xc594: hotelcontrol(); break; + case 0xc598: hotelbell(); break; + case 0xc59c: opentomb(); break; + case 0xc5a0: usetrainer(); break; + case 0xc5a4: nothelderror(); break; + case 0xc5a8: usepipe(); break; + case 0xc5ac: usefullcart(); break; + case 0xc5b0: useplinth(); break; + case 0xc5b4: chewy(); break; + case 0xc5b8: useladder(); break; + case 0xc5bc: useladderb(); break; + case 0xc5c0: slabdoora(); break; + case 0xc5c4: slabdoorb(); break; + case 0xc5c8: slabdoord(); break; + case 0xc5cc: slabdoorc(); break; + case 0xc5d0: slabdoore(); break; + case 0xc5d4: slabdoorf(); break; + case 0xc5d8: useslab(); break; + case 0xc5dc: usecart(); break; + case 0xc5e0: useclearbox(); break; + case 0xc5e4: usecoveredbox(); break; + case 0xc5e8: userailing(); break; + case 0xc5ec: useopenbox(); break; + case 0xc5f0: wearwatch(); break; + case 0xc5f4: wearshades(); break; + case 0xc5f8: sitdowninbar(); break; + case 0xc5fc: usechurchhole(); break; + case 0xc600: usehole(); break; + case 0xc604: usealtar(); break; + case 0xc608: opentvdoor(); break; + case 0xc60c: usedryer(); break; + case 0xc610: openlouis(); break; + case 0xc614: nextcolon(); break; + case 0xc618: openyourneighbour(); break; + case 0xc61c: usewindow(); break; + case 0xc620: usebalcony(); break; + case 0xc624: openryan(); break; + case 0xc628: openpoolboss(); break; + case 0xc62c: openeden(); break; + case 0xc630: opensarters(); break; + case 0xc634: isitright(); break; + case 0xc638: drawitall(); break; + case 0xc63c: openhoteldoor(); break; + case 0xc640: openhoteldoor2(); break; + case 0xc644: grafittidoor(); break; + case 0xc648: trapdoor(); break; + case 0xc64c: callhotellift(); break; + case 0xc650: calledenslift(); break; + case 0xc654: calledensdlift(); break; + case 0xc658: usepoolreader(); break; + case 0xc65c: uselighter(); break; + case 0xc660: showseconduse(); break; + case 0xc664: usecardreader1(); break; + case 0xc668: usecardreader2(); break; + case 0xc66c: usecardreader3(); break; + case 0xc670: usecashcard(); break; + case 0xc674: lookatcard(); break; + case 0xc678: moneypoke(); break; + case 0xc67c: usecontrol(); break; + case 0xc680: usehatch(); break; + case 0xc684: usewire(); break; + case 0xc688: usehandle(); break; + case 0xc68c: useelevator1(); break; + case 0xc690: showfirstuse(); break; + case 0xc694: useelevator3(); break; + case 0xc698: useelevator4(); break; + case 0xc69c: useelevator2(); break; + case 0xc6a0: useelevator5(); break; + case 0xc6a4: usekey(); break; + case 0xc6a8: usestereo(); break; + case 0xc6ac: usecooker(); break; + case 0xc6b0: useaxe(); break; + case 0xc6b4: useelvdoor(); break; + case 0xc6b8: withwhat(); break; + case 0xc6bc: selectob(); break; + case 0xc6c0: compare(); break; + case 0xc6c4: findsetobject(); break; + case 0xc6c8: findexobject(); break; + case 0xc6cc: isryanholding(); break; + case 0xc6d0: checkinside(); break; + case 0xc6d4: usetext(); break; + case 0xc6d8: putbackobstuff(); break; + case 0xc6dc: showpuztext(); break; + case 0xc6e0: findpuztext(); break; + case 0xc6e4: placesetobject(); break; + case 0xc6e8: removesetobject(); break; + case 0xc6ec: issetobonmap(); break; + case 0xc6f0: placefreeobject(); break; + case 0xc6f4: removefreeobject(); break; + case 0xc6f8: findormake(); break; + case 0xc6fc: switchryanon(); break; + case 0xc700: switchryanoff(); break; + case 0xc704: setallchanges(); break; + case 0xc708: dochange(); break; + case 0xc70c: autoappear(); break; + case 0xc710: getundertimed(); break; + case 0xc714: putundertimed(); break; + case 0xc718: dumptimedtext(); break; + case 0xc71c: setuptimeduse(); break; + case 0xc720: setuptimedtemp(); break; + case 0xc724: usetimedtext(); break; + case 0xc728: edenscdplayer(); break; + case 0xc72c: usewall(); break; + case 0xc730: usechurchgate(); break; + case 0xc734: usegun(); break; + case 0xc738: useshield(); break; + case 0xc73c: usebuttona(); break; + case 0xc740: useplate(); break; + case 0xc744: usewinch(); break; + case 0xc748: entercode(); break; + case 0xc74c: loadkeypad(); break; + case 0xc750: quitkey(); break; + case 0xc754: addtopresslist(); break; + case 0xc758: buttonone(); break; + case 0xc75c: buttontwo(); break; + case 0xc760: buttonthree(); break; + case 0xc764: buttonfour(); break; + case 0xc768: buttonfive(); break; + case 0xc76c: buttonsix(); break; + case 0xc770: buttonseven(); break; + case 0xc774: buttoneight(); break; + case 0xc778: buttonnine(); break; + case 0xc77c: buttonnought(); break; + case 0xc780: buttonenter(); break; + case 0xc784: buttonpress(); break; + case 0xc788: showouterpad(); break; + case 0xc78c: showkeypad(); break; + case 0xc790: singlekey(); break; + case 0xc794: dumpkeypad(); break; + case 0xc798: usemenu(); break; + case 0xc79c: dumpmenu(); break; + case 0xc7a0: getundermenu(); break; + case 0xc7a4: putundermenu(); break; + case 0xc7a8: showoutermenu(); break; + case 0xc7ac: showmenu(); break; + case 0xc7b0: loadmenu(); break; + case 0xc7b4: viewfolder(); break; + case 0xc7b8: nextfolder(); break; + case 0xc7bc: folderhints(); break; + case 0xc7c0: lastfolder(); break; + case 0xc7c4: loadfolder(); break; + case 0xc7c8: showfolder(); break; + case 0xc7cc: folderexit(); break; + case 0xc7d0: showleftpage(); break; + case 0xc7d4: showrightpage(); break; + case 0xc7d8: entersymbol(); break; + case 0xc7dc: quitsymbol(); break; + case 0xc7e0: settopleft(); break; + case 0xc7e4: settopright(); break; + case 0xc7e8: setbotleft(); break; + case 0xc7ec: setbotright(); break; + case 0xc7f0: dumpsymbol(); break; + case 0xc7f4: showsymbol(); break; + case 0xc7f8: nextsymbol(); break; + case 0xc7fc: updatesymboltop(); break; + case 0xc800: updatesymbolbot(); break; + case 0xc804: dumpsymbox(); break; + case 0xc808: usediary(); break; + case 0xc80c: showdiary(); break; + case 0xc810: showdiarykeys(); break; + case 0xc814: dumpdiarykeys(); break; + case 0xc818: diarykeyp(); break; + case 0xc81c: diarykeyn(); break; + case 0xc820: showdiarypage(); break; + case 0xc824: findtext1(); break; + case 0xc828: zoomonoff(); break; + case 0xc82c: saveload(); break; + case 0xc830: dosaveload(); break; + case 0xc834: getbackfromops(); break; + case 0xc838: showmainops(); break; + case 0xc83c: showdiscops(); break; + case 0xc840: loadsavebox(); break; + case 0xc844: loadgame(); break; + case 0xc848: getbacktoops(); break; + case 0xc84c: discops(); break; + case 0xc850: savegame(); break; + case 0xc854: actualsave(); break; + case 0xc858: actualload(); break; + case 0xc85c: selectslot2(); break; + case 0xc860: checkinput(); break; + case 0xc864: getnamepos(); break; + case 0xc868: showopbox(); break; + case 0xc86c: showloadops(); break; + case 0xc870: showsaveops(); break; + case 0xc874: selectslot(); break; + case 0xc878: showslots(); break; + case 0xc87c: shownames(); break; + case 0xc880: dosreturn(); break; + case 0xc884: error(); break; + case 0xc888: namestoold(); break; + case 0xc88c: oldtonames(); break; + case 0xc890: savefilewrite(); break; + case 0xc894: savefileread(); break; + case 0xc898: saveposition(); break; + case 0xc89c: loadposition(); break; + case 0xc8a0: loadseg(); break; + case 0xc8a4: makeheader(); break; + case 0xc8a8: storeit(); break; + case 0xc8ac: saveseg(); break; + case 0xc8b0: findlen(); break; + case 0xc8b4: scanfornames(); break; + case 0xc8b8: decide(); break; + case 0xc8bc: showdecisions(); break; + case 0xc8c0: newgame(); break; + case 0xc8c4: loadold(); break; + case 0xc8c8: loadspeech(); break; + case 0xc8cc: createname(); break; + case 0xc8d0: loadsample(); break; + case 0xc8d4: loadsecondsample(); break; + case 0xc8d8: soundstartup(); break; + case 0xc8dc: trysoundalloc(); break; + case 0xc8e0: setsoundoff(); break; + case 0xc8e4: checksoundint(); break; + case 0xc8e8: enablesoundint(); break; + case 0xc8ec: disablesoundint(); break; + case 0xc8f0: interupttest(); break; + case 0xc8f4: soundend(); break; + case 0xc8f8: out22c(); break; + case 0xc8fc: playchannel0(); break; + case 0xc900: playchannel1(); break; + case 0xc904: makenextblock(); break; + case 0xc908: volumeadjust(); break; + case 0xc90c: loopchannel0(); break; + case 0xc910: cancelch0(); break; + case 0xc914: cancelch1(); break; + case 0xc918: channel0only(); break; + case 0xc91c: channel1only(); break; + case 0xc920: channel0tran(); break; + case 0xc924: bothchannels(); break; + case 0xc928: saveems(); break; + case 0xc92c: restoreems(); break; + case 0xc930: domix(); break; + case 0xc934: dmaend(); break; + case 0xc938: startdmablock(); break; + case 0xc93c: setuppit(); break; + case 0xc940: getridofpit(); break; + case 0xc944: pitinterupt(); break; + case 0xc948: dreamweb(); break; + case 0xc94c: entrytexts(); break; + case 0xc950: entryanims(); break; + case 0xc954: initialinv(); break; + case 0xc958: pickupob(); break; + case 0xc95c: setupemm(); break; + case 0xc960: removeemm(); break; + case 0xc964: checkforemm(); break; + case 0xc968: checkbasemem(); break; + case 0xc96c: allocatebuffers(); break; + case 0xc970: clearbuffers(); break; + case 0xc974: clearchanges(); break; + case 0xc978: clearbeforeload(); break; + case 0xc97c: clearreels(); break; + case 0xc980: clearrest(); break; + case 0xc984: deallocatemem(); break; + case 0xc988: allocatemem(); break; + case 0xc990: parseblaster(); break; + case 0xc994: startup(); break; + case 0xc998: startup1(); break; + case 0xc99c: screenupdate(); break; + case 0xc9a0: watchreel(); break; + case 0xc9a4: checkforshake(); break; + case 0xc9a8: watchcount(); break; + case 0xc9ac: showtime(); break; + case 0xc9b0: dumpwatch(); break; + case 0xc9b4: showbyte(); break; + case 0xc9b8: onedigit(); break; + case 0xc9bc: twodigitnum(); break; + case 0xc9c0: showword(); break; + case 0xc9c4: convnum(); break; + case 0xc9c8: mainscreen(); break; + case 0xc9cc: madmanrun(); break; + case 0xc9d0: checkcoords(); break; + case 0xc9d4: identifyob(); break; + case 0xc9d8: checkifperson(); break; + case 0xc9dc: checkifset(); break; + case 0xc9e0: checkifex(); break; + case 0xc9e4: checkiffree(); break; + case 0xc9e8: isitdescribed(); break; + case 0xc9ec: findpathofpoint(); break; + case 0xc9f0: findfirstpath(); break; + case 0xc9f4: turnpathon(); break; + case 0xc9f8: turnpathoff(); break; + case 0xc9fc: turnanypathon(); break; + case 0xca00: turnanypathoff(); break; + case 0xca04: checkifpathison(); break; + case 0xca08: afternewroom(); break; + case 0xca0c: atmospheres(); break; + case 0xca10: walkintoroom(); break; + case 0xca14: afterintroroom(); break; + case 0xca18: obname(); break; + case 0xca1c: finishedwalking(); break; + case 0xca20: examineobtext(); break; + case 0xca24: commandwithob(); break; + case 0xca28: commandonly(); break; + case 0xca2c: printmessage(); break; + case 0xca30: printmessage2(); break; + case 0xca34: blocknametext(); break; + case 0xca38: personnametext(); break; + case 0xca3c: walktotext(); break; + case 0xca40: getflagunderp(); break; + case 0xca44: setwalk(); break; + case 0xca48: autosetwalk(); break; + case 0xca4c: checkdest(); break; + case 0xca50: bresenhams(); break; + case 0xca54: workoutframes(); break; + case 0xca58: getroomspaths(); break; + case 0xca5c: copyname(); break; + case 0xca60: findobname(); break; + case 0xca64: showicon(); break; + case 0xca68: middlepanel(); break; + case 0xca6c: showman(); break; + case 0xca70: showpanel(); break; + case 0xca74: roomname(); break; + case 0xca78: usecharset1(); break; + case 0xca7c: usetempcharset(); break; + case 0xca80: showexit(); break; + case 0xca84: panelicons1(); break; + case 0xca88: showwatch(); break; + case 0xca8c: gettime(); break; + case 0xca90: zoomicon(); break; + case 0xca94: showblink(); break; + case 0xca98: dumpblink(); break; + case 0xca9c: worktoscreenm(); break; + case 0xcaa0: blank(); break; + case 0xcaa4: allpointer(); break; + case 0xcaa8: hangonp(); break; + case 0xcaac: hangonw(); break; + case 0xcab0: hangoncurs(); break; + case 0xcab4: getunderzoom(); break; + case 0xcab8: dumpzoom(); break; + case 0xcabc: putunderzoom(); break; + case 0xcac0: crosshair(); break; + case 0xcac4: showpointer(); break; + case 0xcac8: delpointer(); break; + case 0xcacc: dumppointer(); break; + case 0xcad0: undertextline(); break; + case 0xcad4: deltextline(); break; + case 0xcad8: dumptextline(); break; + case 0xcadc: animpointer(); break; + case 0xcae0: setmouse(); break; + case 0xcae4: readmouse(); break; + case 0xcae8: mousecall(); break; + case 0xcaec: readmouse1(); break; + case 0xcaf0: readmouse2(); break; + case 0xcaf4: readmouse3(); break; + case 0xcaf8: readmouse4(); break; + case 0xcafc: readkey(); break; + case 0xcb00: convertkey(); break; + case 0xcb04: randomnum1(); break; + case 0xcb08: randomnum2(); break; + case 0xcb10: hangon(); break; + case 0xcb14: loadtraveltext(); break; + case 0xcb18: loadintotemp(); break; + case 0xcb1c: loadintotemp2(); break; + case 0xcb20: loadintotemp3(); break; + case 0xcb24: loadtempcharset(); break; + case 0xcb28: standardload(); break; + case 0xcb2c: loadtemptext(); break; + case 0xcb30: loadroom(); break; + case 0xcb34: loadroomssample(); break; + case 0xcb38: getridofreels(); break; + case 0xcb3c: getridofall(); break; + case 0xcb40: restorereels(); break; + case 0xcb44: restoreall(); break; + case 0xcb48: sortoutmap(); break; + case 0xcb4c: startloading(); break; + case 0xcb50: disablepath(); break; + case 0xcb54: findxyfrompath(); break; + case 0xcb58: findroominloc(); break; + case 0xcb5c: getroomdata(); break; + case 0xcb60: readheader(); break; + case 0xcb64: dontloadseg(); break; + case 0xcb68: allocateload(); break; + case 0xcb6c: fillspace(); break; + case 0xcb70: getridoftemp(); break; + case 0xcb74: getridoftemptext(); break; + case 0xcb78: getridoftemp2(); break; + case 0xcb7c: getridoftemp3(); break; + case 0xcb80: getridoftempcharset(); break; + case 0xcb84: getridoftempsp(); break; + case 0xcb88: readsetdata(); break; + case 0xcb8c: createfile(); break; + case 0xcb90: openfile(); break; + case 0xcb94: openfilefromc(); break; + case 0xcb98: makename(); break; + case 0xcb9c: openfilenocheck(); break; + case 0xcba0: openforsave(); break; + case 0xcba4: closefile(); break; + case 0xcba8: readfromfile(); break; + case 0xcbac: setkeyboardint(); break; + case 0xcbb0: resetkeyboard(); break; + case 0xcbb4: keyboardread(); break; + case 0xcbb8: walkandexamine(); break; + case 0xcbbc: doload(); break; + case 0xcbc0: generalerror(); break; + default: ::error("invalid call to %04x dispatched", (uint16)ax); + } +} + +} /*namespace*/ diff --git a/engines/dreamweb/dreamgen.h b/engines/dreamweb/dreamgen.h new file mode 100644 index 0000000000..94b7607087 --- /dev/null +++ b/engines/dreamweb/dreamgen.h @@ -0,0 +1,1343 @@ +#ifndef TASMRECOVER_DREAMGEN_STUBS_H__ +#define TASMRECOVER_DREAMGEN_STUBS_H__ + +/* PLEASE DO NOT MODIFY THIS FILE. ALL CHANGES WILL BE LOST! LOOK FOR README FOR DETAILS */ + + +#include "dreamweb/runtime.h" + +namespace DreamGen { + +class DreamGenContext : public Context { +public: + void __start(); + void __dispatch_call(uint16 addr); + + const static uint16 kStartvars = 0; + const static uint16 kProgresspoints = 1; + const static uint16 kWatchon = 2; + const static uint16 kShadeson = 3; + const static uint16 kSecondcount = 4; + const static uint16 kMinutecount = 5; + const static uint16 kHourcount = 6; + const static uint16 kZoomon = 7; + const static uint16 kLocation = 8; + const static uint16 kExpos = 9; + const static uint16 kExframepos = 10; + const static uint16 kExtextpos = 12; + const static uint16 kCard1money = 14; + const static uint16 kListpos = 16; + const static uint16 kRyanpage = 18; + const static uint16 kWatchingtime = 19; + const static uint16 kReeltowatch = 21; + const static uint16 kEndwatchreel = 23; + const static uint16 kSpeedcount = 25; + const static uint16 kWatchspeed = 26; + const static uint16 kReeltohold = 27; + const static uint16 kEndofholdreel = 29; + const static uint16 kWatchmode = 31; + const static uint16 kDestafterhold = 32; + const static uint16 kNewsitem = 33; + const static uint16 kLiftflag = 34; + const static uint16 kLiftpath = 35; + const static uint16 kLockstatus = 36; + const static uint16 kDoorpath = 37; + const static uint16 kCounttoopen = 38; + const static uint16 kCounttoclose = 39; + const static uint16 kRockstardead = 40; + const static uint16 kGeneraldead = 41; + const static uint16 kSartaindead = 42; + const static uint16 kAidedead = 43; + const static uint16 kBeenmugged = 44; + const static uint16 kGunpassflag = 45; + const static uint16 kCanmovealtar = 46; + const static uint16 kTalkedtoattendant = 47; + const static uint16 kTalkedtosparky = 48; + const static uint16 kTalkedtoboss = 49; + const static uint16 kTalkedtorecep = 50; + const static uint16 kCardpassflag = 51; + const static uint16 kMadmanflag = 52; + const static uint16 kKeeperflag = 53; + const static uint16 kLasttrigger = 54; + const static uint16 kMandead = 55; + const static uint16 kSeed = 56; + const static uint16 kNeedtotravel = 59; + const static uint16 kThroughdoor = 60; + const static uint16 kNewobs = 61; + const static uint16 kRyanon = 62; + const static uint16 kCombatcount = 63; + const static uint16 kLastweapon = 64; + const static uint16 kDreamnumber = 65; + const static uint16 kRoomafterdream = 66; + const static uint16 kShakecounter = 67; + const static uint16 kSpeechcount = 68; + const static uint16 kCharshift = 69; + const static uint16 kKerning = 71; + const static uint16 kBrightness = 72; + const static uint16 kRoomloaded = 73; + const static uint16 kDidzoom = 74; + const static uint16 kLinespacing = 75; + const static uint16 kTextaddressx = 77; + const static uint16 kTextaddressy = 79; + const static uint16 kTextlen = 81; + const static uint16 kLastxpos = 82; + const static uint16 kIcontop = 84; + const static uint16 kIconleft = 86; + const static uint16 kItemframe = 88; + const static uint16 kItemtotran = 89; + const static uint16 kRoomad = 90; + const static uint16 kOldsubject = 92; + const static uint16 kWithobject = 94; + const static uint16 kWithtype = 95; + const static uint16 kLookcounter = 96; + const static uint16 kCommand = 98; + const static uint16 kCommandtype = 99; + const static uint16 kOldcommandtype = 100; + const static uint16 kObjecttype = 101; + const static uint16 kGetback = 102; + const static uint16 kInvopen = 103; + const static uint16 kMainmode = 104; + const static uint16 kPickup = 105; + const static uint16 kLastinvpos = 106; + const static uint16 kExamagain = 107; + const static uint16 kNewtextline = 108; + const static uint16 kOpenedob = 109; + const static uint16 kOpenedtype = 110; + const static uint16 kOldmapadx = 111; + const static uint16 kOldmapady = 113; + const static uint16 kMapadx = 115; + const static uint16 kMapady = 117; + const static uint16 kMapoffsetx = 119; + const static uint16 kMapoffsety = 121; + const static uint16 kMapxstart = 123; + const static uint16 kMapystart = 125; + const static uint16 kMapxsize = 127; + const static uint16 kMapysize = 128; + const static uint16 kHavedoneobs = 129; + const static uint16 kManisoffscreen = 130; + const static uint16 kRainspace = 131; + const static uint16 kFacing = 132; + const static uint16 kLeavedirection = 133; + const static uint16 kTurntoface = 134; + const static uint16 kTurndirection = 135; + const static uint16 kMaintimer = 136; + const static uint16 kIntrocount = 138; + const static uint16 kArrowad = 139; + const static uint16 kCurrentkey = 141; + const static uint16 kOldkey = 142; + const static uint16 kUseddirection = 143; + const static uint16 kCurrentkey2 = 144; + const static uint16 kTimercount = 145; + const static uint16 kOldtimercount = 146; + const static uint16 kMapx = 147; + const static uint16 kMapy = 148; + const static uint16 kNewscreen = 149; + const static uint16 kRyanx = 150; + const static uint16 kRyany = 151; + const static uint16 kLastflag = 152; + const static uint16 kLastflagex = 153; + const static uint16 kFlagx = 154; + const static uint16 kFlagy = 155; + const static uint16 kCurrentex = 156; + const static uint16 kCurrentfree = 157; + const static uint16 kCurrentframe = 158; + const static uint16 kFramesad = 160; + const static uint16 kDataad = 162; + const static uint16 kFrsegment = 164; + const static uint16 kObjectx = 166; + const static uint16 kObjecty = 168; + const static uint16 kOffsetx = 170; + const static uint16 kOffsety = 172; + const static uint16 kSavesize = 174; + const static uint16 kSavesource = 176; + const static uint16 kSavex = 178; + const static uint16 kSavey = 179; + const static uint16 kCurrentob = 180; + const static uint16 kPriority = 181; + const static uint16 kDestpos = 182; + const static uint16 kReallocation = 183; + const static uint16 kRoomnum = 184; + const static uint16 kNowinnewroom = 185; + const static uint16 kResetmanxy = 186; + const static uint16 kNewlocation = 187; + const static uint16 kAutolocation = 188; + const static uint16 kMustload = 189; + const static uint16 kAnswered = 190; + const static uint16 kSaidno = 191; + const static uint16 kDoorcheck1 = 192; + const static uint16 kDoorcheck2 = 193; + const static uint16 kDoorcheck3 = 194; + const static uint16 kDoorcheck4 = 195; + const static uint16 kMousex = 196; + const static uint16 kMousey = 198; + const static uint16 kMousebutton = 200; + const static uint16 kMousebutton1 = 202; + const static uint16 kMousebutton2 = 204; + const static uint16 kMousebutton3 = 206; + const static uint16 kMousebutton4 = 208; + const static uint16 kOldbutton = 210; + const static uint16 kOldx = 212; + const static uint16 kOldy = 214; + const static uint16 kLastbutton = 216; + const static uint16 kOldpointerx = 218; + const static uint16 kOldpointery = 220; + const static uint16 kDelherex = 222; + const static uint16 kDelherey = 224; + const static uint16 kPointerxs = 226; + const static uint16 kPointerys = 227; + const static uint16 kDelxs = 228; + const static uint16 kDelys = 229; + const static uint16 kPointerframe = 230; + const static uint16 kPointerpower = 231; + const static uint16 kAuxpointerframe = 232; + const static uint16 kPointermode = 233; + const static uint16 kPointerspeed = 234; + const static uint16 kPointercount = 235; + const static uint16 kInmaparea = 236; + const static uint16 kReelpointer = 237; + const static uint16 kSlotdata = 239; + const static uint16 kThisslot = 240; + const static uint16 kSlotflags = 241; + const static uint16 kTakeoff = 242; + const static uint16 kTalkmode = 244; + const static uint16 kTalkpos = 245; + const static uint16 kCharacter = 246; + const static uint16 kPersondata = 247; + const static uint16 kTalknum = 249; + const static uint16 kNumberinroom = 250; + const static uint16 kCurrentcel = 251; + const static uint16 kOldselection = 252; + const static uint16 kStopwalking = 253; + const static uint16 kMouseon = 254; + const static uint16 kPlayed = 255; + const static uint16 kTimer1 = 257; + const static uint16 kTimer2 = 258; + const static uint16 kTimer3 = 259; + const static uint16 kWholetimer = 260; + const static uint16 kTimer1to = 262; + const static uint16 kTimer2to = 263; + const static uint16 kTimer3to = 264; + const static uint16 kWatchdump = 265; + const static uint16 kCurrentset = 266; + const static uint16 kLogonum = 268; + const static uint16 kOldlogonum = 269; + const static uint16 kNewlogonum = 270; + const static uint16 kNetseg = 271; + const static uint16 kNetpoint = 273; + const static uint16 kKeynum = 275; + const static uint16 kCursorstate = 276; + const static uint16 kPressed = 277; + const static uint16 kPresspointer = 278; + const static uint16 kGraphicpress = 280; + const static uint16 kPresscount = 281; + const static uint16 kKeypadax = 282; + const static uint16 kKeypadcx = 284; + const static uint16 kLightcount = 286; + const static uint16 kFolderpage = 287; + const static uint16 kDiarypage = 288; + const static uint16 kMenucount = 289; + const static uint16 kSymboltopx = 290; + const static uint16 kSymboltopnum = 291; + const static uint16 kSymboltopdir = 292; + const static uint16 kSymbolbotx = 293; + const static uint16 kSymbolbotnum = 294; + const static uint16 kSymbolbotdir = 295; + const static uint16 kSymboltolight = 296; + const static uint16 kSymbol1 = 297; + const static uint16 kSymbol2 = 298; + const static uint16 kSymbol3 = 299; + const static uint16 kSymbolnum = 300; + const static uint16 kDumpx = 301; + const static uint16 kDumpy = 303; + const static uint16 kWalkandexam = 305; + const static uint16 kWalkexamtype = 306; + const static uint16 kWalkexamnum = 307; + const static uint16 kCursloc = 308; + const static uint16 kCurslocx = 310; + const static uint16 kCurslocy = 312; + const static uint16 kCurpos = 314; + const static uint16 kMonadx = 316; + const static uint16 kMonady = 318; + const static uint16 kGotfrom = 320; + const static uint16 kMonsource = 322; + const static uint16 kNumtodo = 324; + const static uint16 kTimecount = 326; + const static uint16 kCounttotimed = 328; + const static uint16 kTimedseg = 330; + const static uint16 kTimedoffset = 332; + const static uint16 kTimedy = 334; + const static uint16 kTimedx = 335; + const static uint16 kNeedtodumptimed = 336; + const static uint16 kHandle = 337; + const static uint16 kLoadingorsave = 339; + const static uint16 kCurrentslot = 340; + const static uint16 kCursorpos = 341; + const static uint16 kColourpos = 342; + const static uint16 kFadedirection = 343; + const static uint16 kNumtofade = 344; + const static uint16 kFadecount = 345; + const static uint16 kAddtogreen = 346; + const static uint16 kAddtored = 347; + const static uint16 kAddtoblue = 348; + const static uint16 kLastsoundreel = 349; + const static uint16 kSoundbuffer = 351; + const static uint16 kSoundbufferad = 353; + const static uint16 kSoundbufferpage = 355; + const static uint16 kSoundtimes = 356; + const static uint16 kNeedsoundbuff = 357; + const static uint16 kOldint9seg = 358; + const static uint16 kOldint9add = 360; + const static uint16 kOldint8seg = 362; + const static uint16 kOldint8add = 364; + const static uint16 kOldsoundintseg = 366; + const static uint16 kOldsoundintadd = 368; + const static uint16 kSoundbaseadd = 370; + const static uint16 kDsp_status = 372; + const static uint16 kDsp_write = 374; + const static uint16 kDmaaddress = 376; + const static uint16 kSoundint = 377; + const static uint16 kSounddmachannel = 378; + const static uint16 kSampleplaying = 379; + const static uint16 kTestresult = 380; + const static uint16 kCurrentirq = 381; + const static uint16 kSpeechloaded = 382; + const static uint16 kSpeechlength = 383; + const static uint16 kVolume = 385; + const static uint16 kVolumeto = 386; + const static uint16 kVolumedirection = 387; + const static uint16 kVolumecount = 388; + const static uint16 kPlayblock = 389; + const static uint16 kWongame = 390; + const static uint16 kLasthardkey = 391; + const static uint16 kBufferin = 392; + const static uint16 kBufferout = 394; + const static uint16 kExtras = 396; + const static uint16 kWorkspace = 398; + const static uint16 kMapstore = 400; + const static uint16 kCharset1 = 402; + const static uint16 kTempcharset = 404; + const static uint16 kIcons1 = 406; + const static uint16 kIcons2 = 408; + const static uint16 kBuffers = 410; + const static uint16 kMainsprites = 412; + const static uint16 kBackdrop = 414; + const static uint16 kMapdata = 416; + const static uint16 kSounddata = 418; + const static uint16 kSounddata2 = 420; + const static uint16 kRecordspace = 422; + const static uint16 kFreedat = 424; + const static uint16 kSetdat = 426; + const static uint16 kReel1 = 428; + const static uint16 kReel2 = 430; + const static uint16 kReel3 = 432; + const static uint16 kRoomdesc = 434; + const static uint16 kFreedesc = 436; + const static uint16 kSetdesc = 438; + const static uint16 kBlockdesc = 440; + const static uint16 kSetframes = 442; + const static uint16 kFreeframes = 444; + const static uint16 kPeople = 446; + const static uint16 kReels = 448; + const static uint16 kCommandtext = 450; + const static uint16 kPuzzletext = 452; + const static uint16 kTraveltext = 454; + const static uint16 kTempgraphics = 456; + const static uint16 kTempgraphics2 = 458; + const static uint16 kTempgraphics3 = 460; + const static uint16 kTempsprites = 462; + const static uint16 kTextfile1 = 464; + const static uint16 kTextfile2 = 466; + const static uint16 kTextfile3 = 468; + const static uint16 kBlinkframe = 470; + const static uint16 kBlinkcount = 471; + const static uint16 kReasseschanges = 472; + const static uint16 kPointerspath = 473; + const static uint16 kManspath = 474; + const static uint16 kPointerfirstpath = 475; + const static uint16 kFinaldest = 476; + const static uint16 kDestination = 477; + const static uint16 kLinestartx = 478; + const static uint16 kLinestarty = 480; + const static uint16 kLineendx = 482; + const static uint16 kLineendy = 484; + const static uint16 kIncrement1 = 486; + const static uint16 kIncrement2 = 488; + const static uint16 kLineroutine = 490; + const static uint16 kLinepointer = 491; + const static uint16 kLinedirection = 492; + const static uint16 kLinelength = 493; + const static uint16 kLiftsoundcount = 494; + const static uint16 kEmmhandle = 495; + const static uint16 kEmmpageframe = 497; + const static uint16 kEmmhardwarepage = 499; + const static uint16 kCh0emmpage = 500; + const static uint16 kCh0offset = 502; + const static uint16 kCh0blockstocopy = 504; + const static uint16 kCh0playing = 506; + const static uint16 kCh0repeat = 507; + const static uint16 kCh0oldemmpage = 508; + const static uint16 kCh0oldoffset = 510; + const static uint16 kCh0oldblockstocopy = 512; + const static uint16 kCh1playing = 514; + const static uint16 kCh1emmpage = 515; + const static uint16 kCh1offset = 517; + const static uint16 kCh1blockstocopy = 519; + const static uint16 kCh1blocksplayed = 521; + const static uint16 kSoundbufferwrite = 523; + const static uint16 kSoundemmpage = 525; + const static uint16 kSpeechemmpage = 527; + const static uint16 kCurrentsample = 529; + const static uint16 kRoomssample = 530; + const static uint16 kGameerror = 531; + const static uint16 kHowmuchalloc = 532; + const static uint16 kReelroutines = 534; + const static uint16 kReelcalls = 991; + const static uint16 kRoombyroom = 1214; + const static uint16 kR0 = 1326; + const static uint16 kR1 = 1327; + const static uint16 kR2 = 1331; + const static uint16 kR6 = 1350; + const static uint16 kR8 = 1357; + const static uint16 kR9 = 1373; + const static uint16 kR10 = 1380; + const static uint16 kR11 = 1384; + const static uint16 kR12 = 1388; + const static uint16 kR13 = 1392; + const static uint16 kR14 = 1405; + const static uint16 kR20 = 1439; + const static uint16 kR22 = 1461; + const static uint16 kR23 = 1492; + const static uint16 kR25 = 1505; + const static uint16 kR26 = 1527; + const static uint16 kR27 = 1549; + const static uint16 kR28 = 1574; + const static uint16 kR29 = 1593; + const static uint16 kR45 = 1609; + const static uint16 kR46 = 1616; + const static uint16 kR47 = 1653; + const static uint16 kR52 = 1666; + const static uint16 kR53 = 1670; + const static uint16 kR55 = 1677; + const static uint16 kSpritename1 = 1819; + const static uint16 kSpritename3 = 1832; + const static uint16 kIdname = 1845; + const static uint16 kCharacterset1 = 1857; + const static uint16 kCharacterset2 = 1870; + const static uint16 kCharacterset3 = 1883; + const static uint16 kSamplename = 1896; + const static uint16 kBasicsample = 1909; + const static uint16 kIcongraphics0 = 1922; + const static uint16 kIcongraphics1 = 1935; + const static uint16 kExtragraphics1 = 1948; + const static uint16 kIcongraphics8 = 1961; + const static uint16 kMongraphicname = 1974; + const static uint16 kMongraphics2 = 1987; + const static uint16 kCityname = 2000; + const static uint16 kTravelgraphic1 = 2013; + const static uint16 kTravelgraphic2 = 2026; + const static uint16 kDiarygraphic = 2039; + const static uint16 kMonitorfile1 = 2052; + const static uint16 kMonitorfile2 = 2065; + const static uint16 kMonitorfile10 = 2078; + const static uint16 kMonitorfile11 = 2091; + const static uint16 kMonitorfile12 = 2104; + const static uint16 kMonitorfile13 = 2117; + const static uint16 kMonitorfile20 = 2130; + const static uint16 kMonitorfile21 = 2143; + const static uint16 kMonitorfile22 = 2156; + const static uint16 kMonitorfile23 = 2169; + const static uint16 kMonitorfile24 = 2182; + const static uint16 kFoldertext = 2195; + const static uint16 kDiarytext = 2208; + const static uint16 kPuzzletextname = 2221; + const static uint16 kTraveltextname = 2234; + const static uint16 kIntrotextname = 2247; + const static uint16 kEndtextname = 2260; + const static uint16 kCommandtextname = 2273; + const static uint16 kVolumetabname = 2286; + const static uint16 kFoldergraphic1 = 2299; + const static uint16 kFoldergraphic2 = 2312; + const static uint16 kFoldergraphic3 = 2325; + const static uint16 kSymbolgraphic = 2338; + const static uint16 kGungraphic = 2351; + const static uint16 kMonkface = 2364; + const static uint16 kTitle0graphics = 2377; + const static uint16 kTitle1graphics = 2390; + const static uint16 kTitle2graphics = 2403; + const static uint16 kTitle3graphics = 2416; + const static uint16 kTitle4graphics = 2429; + const static uint16 kTitle5graphics = 2442; + const static uint16 kTitle6graphics = 2455; + const static uint16 kTitle7graphics = 2468; + const static uint16 kPalettescreen = 2481; + const static uint16 kCurrentfile = 2970; + const static uint16 kDmaaddresses = 5118; + const static uint16 kFileheader = 6091; + const static uint16 kFiledata = 6141; + const static uint16 kExtradata = 6181; + const static uint16 kRoomdata = 6187; + const static uint16 kMadeuproomdat = 7979; + const static uint16 kRoomscango = 8011; + const static uint16 kRoompics = 8027; + const static uint16 kOplist = 8042; + const static uint16 kInputline = 8045; + const static uint16 kLinedata = 8173; + const static uint16 kPresslist = 8573; + const static uint16 kSavenames = 8579; + const static uint16 kSavefiles = 8698; + const static uint16 kRecname = 8789; + const static uint16 kQuitrequested = 8802; + const static uint16 kStak = 8803; + const static uint16 kBlocktextdat = (0); + const static uint16 kPersonframes = (0); + const static uint16 kDebuglevel1 = (0); + const static uint16 kDebuglevel2 = (0); + const static uint16 kPlayback = (0); + const static uint16 kMap = (0); + const static uint16 kSettextdat = (0); + const static uint16 kSpanish = (0); + const static uint16 kFramedata = (0); + const static uint16 kRecording = (0); + const static uint16 kFlags = (0); + const static uint16 kGerman = (0); + const static uint16 kTextunder = (0); + const static uint16 kForeign = (0); + const static uint16 kPathdata = (0); + const static uint16 kDemo = (0); + const static uint16 kExframedata = (0); + const static uint16 kIntextdat = (0); + const static uint16 kFreetextdat = (0); + const static uint16 kFrframedata = (0); + const static uint16 kSettext = (0+(130*2)); + const static uint16 kOpeninvlist = (0+(180*10)); + const static uint16 kRyaninvlist = (0+(180*10)+32); + const static uint16 kPointerback = (0+(180*10)+32+60); + const static uint16 kMapflags = (0+(180*10)+32+60+(32*32)); + const static uint16 kStartpal = (0+(180*10)+32+60+(32*32)+(11*10*3)); + const static uint16 kEndpal = (0+(180*10)+32+60+(32*32)+(11*10*3)+768); + const static uint16 kMaingamepal = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768); + const static uint16 kSpritetable = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768); + const static uint16 kSetlist = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)); + const static uint16 kFreelist = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)); + const static uint16 kExlist = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)); + const static uint16 kPeoplelist = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)); + const static uint16 kZoomspace = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)); + const static uint16 kPrintedlist = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)); + const static uint16 kListofchanges = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)); + const static uint16 kUndertimedtext = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)); + const static uint16 kRainlist = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*24)); + const static uint16 kInitialreelrouts = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*24)+(6*64)); + const static uint16 kInitialvars = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*24)+(6*64)+991-534); + const static uint16 kLengthofbuffer = (0+(180*10)+32+60+(32*32)+(11*10*3)+768+768+768+(32*32)+(128*5)+(80*5)+(100*5)+(12*5)+(46*40)+(5*80)+(250*4)+(256*24)+(6*64)+991-534+68-0); + const static uint16 kReellist = (0+(36*144)); + const static uint16 kIntext = (0+(38*2)); + const static uint16 kLengthofmap = (0+(66*60)); + const static uint16 kFreetext = (0+(82*2)); + const static uint16 kBlocktext = (0+(98*2)); + const static uint16 kBlocks = (0+192); + const static uint16 kFrframes = (0+2080); + const static uint16 kExframes = (0+2080); + const static uint16 kFrames = (0+2080); + const static uint16 kExdata = (0+2080+30000); + const static uint16 kExtextdat = (0+2080+30000+(16*114)); + const static uint16 kExtext = (0+2080+30000+(16*114)+((114+2)*2)); + const static uint16 kLengthofextra = (0+2080+30000+(16*114)+((114+2)*2)+18000); + const static uint16 kPersontxtdat = (0+24); + const static uint16 kPersontext = (0+24+(1026*2)); + const static uint16 kInputport = (0x63); + const static uint16 kCd = (1); + const static uint16 kUndertextsizey = (10); + const static uint16 kNumexobjects = (114); + const static uint16 kZoomy = (132); + const static uint16 kFreedatlen = (16*80); + const static uint16 kUndertextsizex = (180); + const static uint16 kExtextlen = (18000); + const static uint16 kLenofmapstore = (22*8*20*8); + const static uint16 kUndertimedysize = (24); + const static uint16 kNumchanges = (250); + const static uint16 kExframeslen = (30000); + const static uint16 kTablesize = (32); + const static uint16 kScreenwidth = (320); + const static uint16 kKeypadx = (36+112); + const static uint16 kItempicsize = (44); + const static uint16 kDiaryy = (48+12); + const static uint16 kOpsy = (52); + const static uint16 kSymboly = (56); + const static uint16 kInventy = (58); + const static uint16 kMenuy = (60); + const static uint16 kOpsx = (60); + const static uint16 kMaplength = (60); + const static uint16 kHeaderlen = (6187-6091); + const static uint16 kSymbolx = (64); + const static uint16 kSetdatlen = (64*128); + const static uint16 kMapwidth = (66); + const static uint16 kTextstart = (66*2); + const static uint16 kMaplen = (66*60); + const static uint16 kDiaryx = (68+24); + const static uint16 kLengthofvars = (68-0); + const static uint16 kKeypady = (72); + const static uint16 kZoomx = (8); + const static uint16 kInventx = (80); + const static uint16 kMenux = (80+40); + const static uint16 kLenofreelrouts = (991-534); + + void bothchannels(); + void usewire(); + void getnamepos(); + void drawitall(); + void clearstartpal(); + void femalefan(); + void greyscalesum(); + void showgamereel(); + void identifyob(); + void trysoundalloc(); + void uselighter(); + void showmenu(); + void usepoolreader(); + void showgroup(); + void startdmablock(); + void useopenbox(); + void clearbuffers(); + void neterror(); + void storeit(); + void lockeddoorway(); + void isitworn(); + void putundertimed(); + void dumpmap(); + void multidump(); + void channel0only(); + void worktoscreenm(); + void removeemm(); + void mansatstill(); + void getobtextstart(); + void loadfolder(); + void decide(); + void dumppointer(); + void reelsonscreen(); + void getridofreels(); + void readkey(); + void louis(); + void entrytexts(); + void getreelstart(); + void buttonenter(); + void checkinput(); + void crosshair(); + void bresenhams(); + void getbackfromops(); + void frameoutv(); + void restoreall(); + void screenupdate(); + void addlength(); + void usetimedtext(); + void putundercentre(); + void checkobjectsize(); + void commandonly(); + void adjustlen(); + void deallocatemem(); + void mainscreen(); + void watchreel(); + void showfolder(); + void turnanypathoff(); + void openfilefromc(); + void gettime(); + void clearwork(); + void loadtraveltext(); + void worktoscreen(); + void getexpos(); + void fadedos(); + void multiget(); + void fadeupmonfirst(); + void drawfloor(); + void loadkeypad(); + void findsource(); + void clearendpal(); + void findtext1(); + void isryanholding(); + void interupttest(); + void usecashcard(); + void usewall(); + void opentomb(); + void buttonfour(); + void dosometalk(); + void lockmon(); + void dochange(); + void getanyaddir(); + void showsaveops(); + void intromonks1(); + void resetlocation(); + void oldtonames(); + void showdiscops(); + void advisor(); + void additionaltext(); + void kernchars(); + void othersmoker(); + void autosetwalk(); + void setuptimedtemp(); + void blocknametext(); + void useelevator5(); + void useelevator4(); + void useelevator1(); + void attendant(); + void useelevator3(); + void useelevator2(); + void buttonone(); + void keyboardread(); + void deltextline(); + void entercode(); + void getopenedsize(); + void getpersframe(); + void doshake(); + void resetkeyboard(); + void showpanel(); + void soundstartup(); + void slabdoora(); + void fadeupyellows(); + void slabdoorc(); + void slabdoorb(); + void slabdoore(); + void slabdoord(); + void adjustup(); + void readsetdata(); + void loadintotemp(); + void loadintroroom(); + void saveseg(); + void showblink(); + void mousecall(); + void train(); + void watchcount(); + void fadedownmon(); + void loadcart(); + void splitintolines(); + void bartender(); + void eden(); + void showdiary(); + void purgealocation(); + void updatepeople(); + void slabdoorf(); + void addtopeoplelist(); + void hangoncurs(); + void sparkydrip(); + void compare(); + void printcurs(); + void convertkey(); + void outofopen(); + void dealwithspecial(); + void dircom(); + void liftsprite(); + void dumpkeypad(); + void dumpzoom(); + void endgameseq(); + void cancelch0(); + void setbotleft(); + void findfirstpath(); + void showallfree(); + void loadold(); + void loadtempcharset(); + void useslab(); + void aboutturn(); + void usealtar(); + void createpanel2(); + void turnonpower(); + void manasleep2(); + void moretalk(); + void printslow(); + void loadroom(); + void starttalk(); + void delchar(); + void getanyad(); + void endgame(); + void monprint(); + void usepipe(); + void startloading(); + void getunderzoom(); + void candles(); + void backobject(); + void rollendcredits2(); + void reminders(); + void selectslot2(); + void runtap(); + void domix(); + void priesttext(); + void paneltomap(); + void obname(); + void getridoftemp3(); + void getridoftemp2(); + void usebalcony(); + void runendseq(); + void dumpdiarykeys(); + void disablesoundint(); + void checkifset(); + void showallex(); + void showrain(); + void openpoolboss(); + void buttontwo(); + void fillopen(); + void delsprite(); + void getroomspaths(); + void dumptextline(); + void fadescreendownhalf(); + void useplate(); + void candles1(); + void lookininterface(); + void manasleep(); + void isitdescribed(); + void hotelbell(); + void loadspeech(); + void cls(); + void printsprites(); + void dumptimedtext(); + void showallobs(); + void getnumber(); + void adjustleft(); + void calledenslift(); + void useclearbox(); + void entryanims(); + void nextfolder(); + void getfreead(); + void showarrows(); + void walkintoroom(); + void getridoftemptext(); + void printoutermon(); + void setuppit(); + void showpcx(); + void showdecisions(); + void checkspeed(); + void printchar(); + void showkeypad(); + void obtoinv(); + void removeobfrominv(); + void usecoveredbox(); + void openyourneighbour(); + void fadescreenuphalf(); + void getridoftempcharset(); + void heavy(); + void endpaltostart(); + void showkeys(); + void usekey(); + void locklighton(); + void useladderb(); + void spriteupdate(); + void usetempcharset(); + void discops(); + void printdirect(); + void delthisone(); + void makebackob(); + void middlepanel(); + void dumpwatch(); + void saveload(); + void monitorlogo(); + void loadposition(); + void wornerror(); + void entersymbol(); + void showword(); + void dirfile(); + void setmode(); + void walktotext(); + void pickupconts(); + void locklightoff(); + void wearwatch(); + void runintroseq(); + void doblocks(); + void showbyte(); + void allpalette(); + void findormake(); + void nextsymbol(); + void monks2text(); + void poolguard(); + void clearpalette(); + void cantdrop(); + void maptopanel(); + void calcmapad(); + void getridofall(); + void copper(); + void folderhints(); + void openhoteldoor(); + void removesetobject(); + void checkifperson(); + void frameoutfx(); + void blank(); + void drinker(); + void nextcolon(); + void placefreeobject(); + void delpointer(); + void loopchannel0(); + void initrain(); + void showleftpage(); + void rockstar(); + void adjustright(); + void putunderzoom(); + void vsync(); + void showseconduse(); + void turnpathoff(); + void findinvpos(); + void usetext(); + void hangonpq(); + void liftnoise(); + void workoutframes(); + void getbackfromob(); + void dumpsymbox(); + void loadgame(); + void getridoftemp(); + void showcity(); + void dumpsymbol(); + void disablepath(); + void buttonsix(); + void intro2text(); + void showouterpad(); + void getkeyandlogo(); + void selectob(); + void checkcoords(); + void dumpmenu(); + void chewy(); + void accesslighton(); + void dosreturn(); + void titles(); + void quickquit(); + void showpointer(); + void usecooker(); + void loadmenu(); + void checkforemm(); + void checkifpathison(); + void smallcandle(); + void receptionist(); + void selectslot(); + void edenscdplayer(); + void readoneblock(); + void fadeupmon(); + void paltoendpal(); + void fadetowhite(); + void textformonk(); + void loadsavebox(); + void fadescreenup(); + void soundend(); + void redes(); + void errormessage1(); + void clearchanges(); + void errormessage3(); + void deletetaken(); + void putundermenu(); + void checkifex(); + void intromagic2(); + void findobname(); + void edeninbath(); + void intromagic1(); + void showdiarypage(); + void useshield(); + void getbacktoops(); + void rollendcredits(); + void intro1text(); + void getmapad(); + void playchannel1(); + void playchannel0(); + void usemon(); + void steady(); + void pixelcheckset(); + void reexfrominv(); + void fillspace(); + void talk(); + void usedryer(); + void dumpeverything(); + void usehatch(); + void zoom(); + void outofinv(); + void viewfolder(); + void walking(); + void diarykeyp(); + void readabyte(); + void showframe(); + void random(); + void obicons(); + void frameoutbh(); + void channel1only(); + void playguitar(); + void lastfolder(); + void transfermap(); + void showreelframe(); + void showmonk(); + void diarykeyn(); + void set16colpalette(); + void convicons(); + void interviewer(); + void sparky(); + void purgeanitem(); + void madman(); + void createpanel(); + void turnpathon(); + void showmainops(); + void width160dosreturn(); + void madmanstelly(); + void constant(); + void loadroomssample(); + void getblockofpixel(); + void paltostartpal(); + void bossman(); + void getridofpit(); + void convnum(); + void nothelderror(); + void readheader(); + void getsetad(); + void getyad(); + void reconstruct(); + void soldier1(); + void getundercentre(); + void checkforexit(); + void loadseg(); + void makeheader(); + void setkeyboardint(); + void priest(); + void readmouse(); + void powerlighton(); + void savefilewrite(); + void printmessage2(); + void loadnews(); + void rollem(); + void makeworn(); + void examineobtext(); + void startup(); + void savegame(); + void startpaltoend(); + void showicon(); + void findopenpos(); + void describeob(); + void deleteexframe(); + void folderexit(); + void useplinth(); + void wheelsound(); + void actualsave(); + void autolook(); + void checkbasemem(); + void transfertext(); + void searchforsame(); + void enablesoundint(); + void getback1(); + void setlocation(); + void fadefromwhite(); + void animpointer(); + void usewindow(); + void wearshades(); + void onedigit(); + void pitinterupt(); + void deleverything(); + void fadescreendown(); + void findxyfrompath(); + void namestoold(); + void getxad(); + void openinv(); + void lookatplace(); + void useaxe(); + void examineob(); + void buttonnought(); + void useelvdoor(); + void putbackobstuff(); + void useladder(); + void realcredits(); + void handclap(); + void smokebloke(); + void showexit(); + void printundermon(); + void buttonnine(); + void findallopen(); + void loadintotemp3(); + void loadintotemp2(); + void gamer(); + void personnametext(); + void quitsymbol(); + void readfromfile(); + void initialinv(); + void showslots(); + void dofade(); + void hangon(); + void settopright(); + void findsetobject(); + void singlekey(); + void seecommandtail(); + void getundertimed(); + void hangone(); + void carparkdrip(); + void usediary(); + void deleteexobject(); + void frameoutnm(); + void moneypoke(); + void destselect(); + void restoreems(); + void lastdest(); + void removefreeobject(); + void trapdoor(); + void openlouis(); + void buttonthree(); + void getundermenu(); + void randomnumber(); + void lookatcard(); + void helicopter(); + void scrollmonitor(); + void setsoundoff(); + void setpickup(); + void dropobject(); + void printmessage(); + void reexfromopen(); + void fillryan(); + void loadtemptext(); + void usestereo(); + void showcurrentfile(); + void copyname(); + void look(); + void setmouse(); + void checkone(); + void transferinv(); + void candles2(); + void pickupob(); + void error(); + void showopbox(); + void clearbeforeload(); + void biblequote(); + void doload(); + void afterintroroom(); + void blockget(); + void usetrainer(); + void allocatework(); + void addtopresslist(); + void walkandexamine(); + void dmaend(); + void quickquit2(); + void twodigitnum(); + void madmantext(); + void dumpcurrent(); + void textforend(); + void showdiarykeys(); + void dontloadseg(); + void madmode(); + void intro3text(); + void allocatemem(); + void sortoutmap(); + void doorway(); + void useopened(); + void inventory(); + void powerlightoff(); + void getroomdata(); + void showoutermenu(); + void signon(); + void deleteextext(); + void foghornsound(); + void showrightpage(); + void openhoteldoor2(); + void examicon(); + void showgun(); + void switchryanon(); + void louischair(); + void saveems(); + void locationpic(); + void getflagunderp(); + void dolook(); + void opentvdoor(); + void triggermessage(); + void finalframe(); + void plotreel(); + void swapwithopen(); + void makesprite(); + void dreamweb(); + void droperror(); + void openfilenocheck(); + void calledensdlift(); + void checkinside(); + void gates(); + void selectlocation(); + void showwatch(); + void turnanypathon(); + void restorereels(); + void setwalk(); + void printboth(); + void useroutine(); + void zoomicon(); + void hotelcontrol(); + void findpathofpoint(); + void issetobonmap(); + void getdestinfo(); + void drunk(); + void dumpblink(); + void setuptimeduse(); + void grafittidoor(); + void input(); + void nextdest(); + void getdimension(); + void makecaps(); + void read(); + void fadescreenups(); + void checkdest(); + void initman(); + void loadpalfromiff(); + void facerightway(); + void startup1(); + void findlen(); + void showsymbol(); + void mugger(); + void atmospheres(); + void out22c(); + void loadpersonal(); + void gettingshot(); + void settopleft(); + void searchforstring(); + void clearsprites(); + void obpicture(); + void selectopenob(); + void widedoor(); + void security(); + void printasprite(); + void buttonfive(); + void soundonreels(); + void usegun(); + void autoappear(); + void findnextcolon(); + void readmouse4(); + void openryan(); + void readmouse1(); + void showman(); + void readmouse2(); + void newplace(); + void movemap(); + void loadsample(); + void usecardreader1(); + void usecardreader2(); + void usecardreader3(); + void tattooman(); + void usehandle(); + void quitkey(); + void openfile(); + void usecharset1(); + void makenextblock(); + void showpuztext(); + void addalong(); + void width160(); + void incryanpage(); + void dodoor(); + void eraseoldobs(); + void buttoneight(); + void opensarters(); + void findexobject(); + void errormessage2(); + void usechurchhole(); + void searchforfiles(); + void monkspeaking(); + void fadecalculation(); + void waitframes(); + void clearrest(); + void getreelframeax(); + void barwoman(); + void roomname(); + void credits(); + void madmanrun(); + void randomnum1(); + void keeper(); + void afternewroom(); + void getexad(); + void aide(); + void openforsave(); + void closefile(); + void delcurs(); + void randomaccess(); + void calcfrframe(); + void intromagic3(); + void initialmoncols(); + void checkforshake(); + void usebuttona(); + void cancelch1(); + void getnextword(); + void generalerror(); + void actualload(); + void allocateload(); + void saveposition(); + void mode640x480(); + void openeden(); + void execcommand(); + void obsthatdothings(); + void updatesymbolbot(); + void findpuztext(); + void usechurchgate(); + void monkandryan(); + void allocatebuffers(); + void swapwithinv(); + void usecontrol(); + void buttonseven(); + void redrawmainscrn(); + void finishedwalking(); + void findallryan(); + void channel0tran(); + void buttonpress(); + void parseblaster(); + void callhotellift(); + void makemainscreen(); + void intromonks2(); + void usewinch(); + void setbotright(); + void readmouse3(); + void showfirstuse(); + void setupemm(); + void usefullcart(); + void transfertoex(); + void getlocation(); + void geteitherad(); + void placesetobject(); + void drawflags(); + void zoomonoff(); + void updatesymboltop(); + void showryanpage(); + void printlogo(); + void allpointer(); + void checksoundint(); + void clearreels(); + void malefan(); + void dosaveload(); + void createname(); + void readcitypic(); + void getpersontext(); + void intoinv(); + void showtime(); + void parser(); + void hangonw(); + void intro(); + void hangonp(); + void fadescreendowns(); + void showloadops(); + void getridoftempsp(); + void scanfornames(); + void setallchanges(); + void newgame(); + void examinventory(); + void standardload(); + void undertextline(); + void findroominloc(); + void sitdowninbar(); + void shownames(); + void savefileread(); + void emergencypurge(); + void usemenu(); + void alleybarksound(); + void usecart(); + void intromusic(); + void makename(); + void processtrigger(); + void monmessage(); + void readdesticon(); + void randomnum2(); + void loadsecondsample(); + void transfercontoex(); + void multiput(); + void isitright(); + void businessman(); + void switchryanoff(); + void commandwithob(); + void panelicons1(); + void adjustdown(); + void withwhat(); + void openob(); + void createfile(); + void userailing(); + void accesslightoff(); + void usehole(); + void useobject(); + void mainman(); + void volumeadjust(); + void checkiffree(); +}; +} + +#endif diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp new file mode 100644 index 0000000000..0dc25afab0 --- /dev/null +++ b/engines/dreamweb/dreamweb.cpp @@ -0,0 +1,573 @@ +/* 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. + * + * $URL: https://svn.scummvm.org:4444/svn/dreamweb/dreamweb.cpp $ + * $Id: dreamweb.cpp 79 2011-06-05 08:26:54Z eriktorbjorn $ + * + */ + +#include "common/config-manager.h" +#include "common/debug-channels.h" +#include "common/events.h" +#include "common/EventRecorder.h" +#include "common/file.h" +#include "common/func.h" +#include "common/system.h" +#include "common/timer.h" +#include "common/util.h" + +#include "audio/mixer.h" +#include "audio/decoders/raw.h" + +#include "graphics/palette.h" +#include "graphics/surface.h" + +#include "dreamweb/dreamweb.h" +#include "dreamweb/dreamgen.h" + +namespace DreamWeb { + +DreamWebEngine::DreamWebEngine(OSystem *syst, const DreamWebGameDescription *gameDesc) : + Engine(syst), _gameDescription(gameDesc), _rnd("dreamweb") { + + _context.engine = this; + // Setup mixer + _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, ConfMan.getInt("sfx_volume")); + _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, ConfMan.getInt("music_volume")); + _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, ConfMan.getInt("speech_volume")); + + _vSyncInterrupt = false; + + _console = 0; + DebugMan.addDebugChannel(kDebugAnimation, "Animation", "Animation Debug Flag"); + DebugMan.addDebugChannel(kDebugSaveLoad, "SaveLoad", "Track Save/Load Function"); + _outSaveFile = 0; + _inSaveFile = 0; + _speed = 1; + _turbo = false; + _oldMouseState = 0; + _channel0 = 0; + _channel1 = 0; +} + +DreamWebEngine::~DreamWebEngine() { + DebugMan.clearAllDebugChannels(); + delete _console; +} + +static void vSyncInterrupt(void *refCon) { + DreamWebEngine *vm = (DreamWebEngine *)refCon; + + if (!vm->isPaused()) { + vm->setVSyncInterrupt(true); + } +} + +void DreamWebEngine::setVSyncInterrupt(bool flag) { + _vSyncInterrupt = flag; +} + +void DreamWebEngine::waitForVSync() { + processEvents(); + + if (!_turbo) { + while (!_vSyncInterrupt) { + _system->delayMillis(10); + } + setVSyncInterrupt(false); + } + + _context.doshake(); + _context.dofade(); + _system->updateScreen(); +} + +void DreamWebEngine::quit() { + _context.data.byte(DreamGen::DreamGenContext::kQuitrequested) = 1; + _context.data.byte(DreamGen::DreamGenContext::kLasthardkey) = 1; + _context.data.byte(DreamGen::DreamGenContext::kGetback) = 4; +} + +void DreamWebEngine::processEvents() { + Common::EventManager *event_manager = _system->getEventManager(); + if (event_manager->shouldQuit()) { + quit(); + return; + } + + if (_enableSavingOrLoading && _loadSavefile >= 0 && _loadSavefile <= 6) { + debug(1, "loading save state %d", _loadSavefile); + _context.data.byte(_context.kCurrentslot) = _loadSavefile; + _loadSavefile = -1; + _context.loadposition(); + _context.data.byte(_context.kGetback) = 1; + } + + soundHandler(); + Common::Event event; + int softKey, hardKey; + while (event_manager->pollEvent(event)) { + switch(event.type) { + case Common::EVENT_RTL: + quit(); + break; + case Common::EVENT_KEYDOWN: + if (event.kbd.flags & Common::KBD_CTRL) { + switch (event.kbd.keycode) { + + case Common::KEYCODE_d: + _console->attach(); + _console->onFrame(); + break; + + case Common::KEYCODE_f: + setSpeed(_speed != 20? 20: 1); + break; + + case Common::KEYCODE_g: + _turbo = !_turbo; + break; + + case Common::KEYCODE_c: //skip statue puzzle + _context.data.byte(DreamGen::DreamGenContext::kSymbolbotnum) = 3; + _context.data.byte(DreamGen::DreamGenContext::kSymboltopnum) = 5; + break; + + default: + break; + } + + return; //do not pass ctrl + key to the engine + } + + // Some parts of the ASM code uses the hardware key + // code directly. We don't have that code, so we fake + // it for the keys where it's needed and assume it's + // 0 (which is actually an invalid value, as far as I + // know) otherwise. + + hardKey = 0; + + switch (event.kbd.keycode) { + case Common::KEYCODE_ESCAPE: + hardKey = 1; + break; + case Common::KEYCODE_SPACE: + hardKey = 57; + break; + default: + hardKey = 0; + break; + } + + _context.data.byte(DreamGen::DreamGenContext::kLasthardkey) = hardKey; + + // The rest of the keys are converted to ASCII. This + // is fairly restrictive, and eventually we may want + // to let through more keys. I think this is mostly to + // keep weird glyphs out of savegame names. + + softKey = 0; + + if (event.kbd.keycode >= Common::KEYCODE_a && event.kbd.keycode <= Common::KEYCODE_z) { + softKey = event.kbd.ascii & ~0x20; + } else if (event.kbd.keycode == Common::KEYCODE_MINUS || + event.kbd.keycode == Common::KEYCODE_SPACE || + (event.kbd.keycode >= Common::KEYCODE_0 && event.kbd.keycode <= Common::KEYCODE_9)) { + softKey = event.kbd.ascii; + } else if (event.kbd.keycode >= Common::KEYCODE_KP0 && event.kbd.keycode <= Common::KEYCODE_KP9) { + softKey = event.kbd.keycode - Common::KEYCODE_KP0 + '0'; + } else if (event.kbd.keycode == Common::KEYCODE_KP_MINUS) { + softKey = '-'; + } else if (event.kbd.keycode == Common::KEYCODE_BACKSPACE || + event.kbd.keycode == Common::KEYCODE_DELETE) { + softKey = 8; + } else if (event.kbd.keycode == Common::KEYCODE_RETURN + || event.kbd.keycode == Common::KEYCODE_KP_ENTER) { + softKey = 13; + } + + if (softKey) + keyPressed(softKey); + break; + default: + break; + } + } +} + + +Common::Error DreamWebEngine::run() { + _console = new DreamWebConsole(this); + + _loadSavefile = Common::ConfigManager::instance().getInt("save_slot"); + + getTimerManager()->installTimerProc(vSyncInterrupt, 1000000 / 70, this); + //http://martin.hinner.info/vga/timing.html + + _context.__start(); + _context.data.byte(DreamGen::DreamGenContext::kQuitrequested) = 0; + + getTimerManager()->removeTimerProc(vSyncInterrupt); + + return Common::kNoError; +} + +void DreamWebEngine::setSpeed(uint speed) { + debug(0, "setting speed %u", speed); + _speed = speed; + getTimerManager()->removeTimerProc(vSyncInterrupt); + getTimerManager()->installTimerProc(vSyncInterrupt, 1000000 / 70 / speed, this); +} + +void DreamWebEngine::openFile(const Common::String &name) { + processEvents(); + closeFile(); + if (_file.open(name)) + return; + _inSaveFile = _system->getSavefileManager()->openForLoading(name); + if (_inSaveFile) + return; + error("cannot open file %s", name.c_str()); +} + +uint32 DreamWebEngine::skipBytes(uint32 bytes) { + if (!_file.seek(bytes, SEEK_CUR)) + error("seek failed"); + return _file.pos(); +} + +uint32 DreamWebEngine::readFromFile(uint8 *dst, unsigned size) { + processEvents(); + if (_file.isOpen()) + return _file.read(dst, size); + if (_inSaveFile) + return _inSaveFile->read(dst, size); + error("file was not opened (read before open)"); +} + +void DreamWebEngine::closeFile() { + processEvents(); + if (_file.isOpen()) + _file.close(); + delete _inSaveFile; + _inSaveFile = 0; + delete _outSaveFile; + _outSaveFile = 0; +} + +void DreamWebEngine::openSaveFileForWriting(const Common::String &name) { + processEvents(); + delete _outSaveFile; + _outSaveFile = _system->getSavefileManager()->openForSaving(name); +} + +bool DreamWebEngine::openSaveFileForReading(const Common::String &name) { + processEvents(); + delete _inSaveFile; + _inSaveFile = _system->getSavefileManager()->openForLoading(name); + return _inSaveFile != 0; +} + +uint DreamWebEngine::writeToSaveFile(const uint8 *data, uint size) { + processEvents(); + if (!_outSaveFile) + error("save file was not opened for writing"); + return _outSaveFile->write(data, size); +} + +uint DreamWebEngine::readFromSaveFile(uint8 *data, uint size) { + processEvents(); + if (!_inSaveFile) + error("save file was not opened for reading"); + return _inSaveFile->read(data, size); +} + + +void DreamWebEngine::keyPressed(uint16 ascii) { + debug(2, "key pressed = %04x", ascii); + uint8* keybuf = _context.data.ptr(5912, 16); //fixme: some hardcoded offsets are not added as consts + uint16 in = (_context.data.word(DreamGen::DreamGenContext::kBufferin) + 1) & 0x0f; + uint16 out = _context.data.word(DreamGen::DreamGenContext::kBufferout); + if (in == out) { + warning("keyboard buffer is full"); + return; + } + _context.data.word(DreamGen::DreamGenContext::kBufferin) = in; + keybuf[in] = ascii; +} + +void DreamWebEngine::mouseCall() { + processEvents(); + Common::EventManager *eventMan = _system->getEventManager(); + Common::Point pos = eventMan->getMousePos(); + if (pos.x > 298) + pos.x = 298; + if (pos.x < 15) + pos.x = 15; + if (pos.y < 15) + pos.y = 15; + if (pos.y > 184) + pos.y = 184; + _context.cx = pos.x; + _context.dx = pos.y; + + unsigned state = eventMan->getButtonState(); + _context.bx = state == _oldMouseState? 0: state; + _oldMouseState = state; + _context.flags._c = false; +} + +void DreamWebEngine::fadeDos() { + _context.ds = _context.es = _context.data.word(DreamGen::DreamGenContext::kBuffers); + return; //fixme later + waitForVSync(); + //processEvents will be called from vsync + uint8 *dst = _context.es.ptr(DreamGen::DreamGenContext::kStartpal, 768); + getPalette(dst, 0, 64); + for(int fade = 0; fade < 64; ++fade) { + for(int c = 0; c < 768; ++c) { //original sources decrement 768 values -> 256 colors + if (dst[c]) { + --dst[c]; + } + } + setPalette(dst, 0, 64); + waitForVSync(); + } +} + +void DreamWebEngine::setPalette() { + processEvents(); + unsigned n = (uint16)_context.cx; + uint8 *src = _context.ds.ptr(_context.si, n * 3); + setPalette(src, _context.al, n); + _context.si += n * 3; + _context.cx = 0; +} + +void DreamWebEngine::getPalette(uint8 *data, uint start, uint count) { + _system->getPaletteManager()->grabPalette(data, start, count); + while(count--) + *data++ >>= 2; +} + +void DreamWebEngine::setPalette(const uint8 *data, uint start, uint count) { + assert(start + count <= 256); + uint8 fixed[768]; + for(uint i = 0; i < count * 3; ++i) { + fixed[i] = data[i] << 2; + } + _system->getPaletteManager()->setPalette(fixed, start, count); +} + + +void DreamWebEngine::blit(const uint8 *src, int pitch, int x, int y, int w, int h) { + if (y + h > 200) + h = 200 - y; + if (x + w > 320) + w = 320 - x; + if (h <= 0 || w <= 0) + return; + _system->copyRectToScreen(src, pitch, x, y, w, h); +} + +void DreamWebEngine::printUnderMonitor() { + _context.es = _context.data.word(DreamGen::DreamGenContext::kWorkspace); + _context.di = DreamGen::DreamGenContext::kScreenwidth * 43 + 76; + _context.si = _context.di + 8 * DreamGen::DreamGenContext::kScreenwidth; + + Graphics::Surface *s = _system->lockScreen(); + if (!s) + error("lockScreen failed"); + + for(uint y = 0; y < 104; ++y) { + uint8 *src = (uint8 *)s->getBasePtr(76, 43 + 8 + y); + uint8 *dst = _context.es.ptr(_context.di, 170); + for(uint x = 0; x < 170; ++x) { + if (*src < 231) + *dst++ = *src++; + else { + ++dst; ++src; + } + } + _context._add(_context.di, DreamGen::DreamGenContext::kScreenwidth); + _context._add(_context.si, DreamGen::DreamGenContext::kScreenwidth); + } + _context.cx = 0; + _system->unlockScreen(); +} + +void DreamWebEngine::cls() { + _system->fillScreen(0); +} + +void DreamWebEngine::playSound(uint8 channel, uint8 id, uint8 loops) { + debug(1, "playSound(%u, %u, %u)", channel, id, loops); + const SoundData &data = _soundData[id >= 12? 1: 0]; + + Audio::Mixer::SoundType type; + bool speech = id == 62; //actually 50 + if (id >= 12) { + id -= 12; + type = Audio::Mixer::kSFXSoundType; + } else if (speech) + type = Audio::Mixer::kSpeechSoundType; + else + type = Audio::Mixer::kMusicSoundType; + + Audio::SeekableAudioStream *raw; + if (!speech) { + if (id >= data.samples.size() || data.samples[id].size == 0) { + warning("invalid sample #%u played", id); + return; + } + + const Sample &sample = data.samples[id]; + uint8 *buffer = (uint8 *)malloc(sample.size); + if (!buffer) + error("out of memory: cannot allocate memory for sound(%u bytes)", sample.size); + memcpy(buffer, data.data.begin() + sample.offset, sample.size); + + raw = Audio::makeRawStream( + buffer, + sample.size, 22050, Audio::FLAG_UNSIGNED); + } else { + uint8 *buffer = (uint8 *)malloc(_speechData.size()); + memcpy(buffer, _speechData.begin(), _speechData.size()); + if (!buffer) + error("out of memory: cannot allocate memory for sound(%u bytes)", _speechData.size()); + raw = Audio::makeRawStream( + buffer, + _speechData.size(), 22050, Audio::FLAG_UNSIGNED); + + } + + Audio::AudioStream *stream; + if (loops > 1) { + stream = new Audio::LoopingAudioStream(raw, loops < 255? loops: 0); + } else + stream = raw; + + if (_mixer->isSoundHandleActive(_channelHandle[channel])) + _mixer->stopHandle(_channelHandle[channel]); + _mixer->playStream(type, &_channelHandle[channel], stream); +} + +bool DreamWebEngine::loadSpeech(const Common::String &filename) { + Common::File file; + if (!file.open("speech/" + filename)) + return false; + + debug(1, "loadSpeech(%s)", filename.c_str()); + + uint size = file.size(); + _speechData.resize(size); + file.read(_speechData.begin(), size); + file.close(); + return true; +} + + +void DreamWebEngine::soundHandler() { + _context.push(_context.ax); + _context.volumeadjust(); + _context.ax = _context.pop(); + + uint volume = _context.data.byte(DreamGen::DreamGenContext::kVolume); + //.vol file loaded into soundbuf:0x4000 + //volume table at (volume * 0x100 + 0x3f00) + //volume value could be from 1 to 7 + //1 - 0x10-0xff + //2 - 0x1f-0xdf + //3 - 0x2f-0xd0 + //4 - 0x3e-0xc1 + //5 - 0x4d-0xb2 + //6 - 0x5d-0xa2 + //7 - 0x6f-0x91 + if (volume >= 8) + volume = 7; + volume = (8 - volume) * Audio::Mixer::kMaxChannelVolume / 8; + _mixer->setChannelVolume(_channelHandle[0], volume); + + uint8 ch0 = _context.data.byte(DreamGen::DreamGenContext::kCh0playing); + if (ch0 == 255) + ch0 = 0; + uint8 ch1 = _context.data.byte(DreamGen::DreamGenContext::kCh1playing); + if (ch1 == 255) + ch1 = 0; + uint8 ch0loop = _context.data.byte(DreamGen::DreamGenContext::kCh0repeat); + + if (_channel0 != ch0) { + _channel0 = ch0; + if (ch0) { + playSound(0, ch0, ch0loop); + } + } + if (_channel1 != ch1) { + _channel1 = ch1; + if (ch1) { + playSound(1, ch1, 1); + } + } + if (!_mixer->isSoundHandleActive(_channelHandle[0])) { + _context.data.byte(DreamGen::DreamGenContext::kCh0playing) = 255; + _channel0 = 0; + } + if (!_mixer->isSoundHandleActive(_channelHandle[1])) { + _context.data.byte(DreamGen::DreamGenContext::kCh1playing) = 255; + _channel1 = 0; + } + +} + +void DreamWebEngine::loadSounds(uint bank, const Common::String &filename) { + debug(1, "loadSounds(%u, %s)", bank, filename.c_str()); + Common::File file; + if (!file.open(filename)) { + warning("cannot open %s", filename.c_str()); + return; + } + + uint8 header[0x60]; + file.read(header, sizeof(header)); + uint tablesize = READ_LE_UINT16(header + 0x32); + debug(1, "table size = %u", tablesize); + + SoundData &soundData = _soundData[bank]; + soundData.samples.resize(tablesize / 6); + uint total = 0; + for(uint i = 0; i < tablesize / 6; ++i) { + uint8 entry[6]; + Sample &sample = soundData.samples[i]; + file.read(entry, sizeof(entry)); + sample.offset = entry[0] * 0x4000 + READ_LE_UINT16(entry + 1); + sample.size = READ_LE_UINT16(entry + 3) * 0x800; + total += sample.size; + debug(1, "offset: %08x, size: %u", sample.offset, sample.size); + } + soundData.data.resize(total); + file.read(soundData.data.begin(), total); + file.close(); +} + + +} // End of namespace DreamWeb + + diff --git a/engines/dreamweb/dreamweb.h b/engines/dreamweb/dreamweb.h new file mode 100644 index 0000000000..a955bcfe47 --- /dev/null +++ b/engines/dreamweb/dreamweb.h @@ -0,0 +1,150 @@ +/* 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. + * + * $URL: https://svn.scummvm.org:4444/svn/dreamweb/dreamweb.h $ + * $Id: dreamweb.h 77 2011-05-18 14:26:43Z digitall $ + * + */ + +#ifndef DREAMWEB_H +#define DREAMWEB_H + +#include "common/error.h" +#include "common/file.h" +#include "common/random.h" +#include "common/rect.h" +#include "common/savefile.h" +#include "common/scummsys.h" +#include "common/system.h" + +#include "audio/audiostream.h" +#include "audio/mixer.h" + +#include "engines/engine.h" +#include "dreamweb/dreamgen.h" +#include "dreamweb/console.h" + +namespace DreamWeb { + +// Engine Debug Flags +enum { + kDebugAnimation = (1 << 0), + kDebugSaveLoad = (1 << 1) +}; + +struct DreamWebGameDescription; + +class DreamWebEngine : public Engine { +private: + DreamWebConsole *_console; + bool _vSyncInterrupt; + +protected: + // Engine APIs + virtual Common::Error run(); + virtual bool hasFeature(EngineFeature f) const; + +public: + DreamWebEngine(OSystem *syst, const DreamWebGameDescription *gameDesc); + virtual ~DreamWebEngine(); + + void setVSyncInterrupt(bool flag); + void waitForVSync(); + + Common::Error loadGameState(int slot); + Common::Error saveGameState(int slot, const Common::String &desc); + + bool canLoadGameStateCurrently(); + bool canSaveGameStateCurrently(); + + uint8 randomNumber() { return _rnd.getRandomNumber(255); } + + void openFile(const Common::String &name); + uint32 readFromFile(uint8 *data, unsigned size); + uint32 skipBytes(uint32 bytes); + void closeFile(); + + void mouseCall(); //fill mouse pos and button state + void processEvents(); + void setPalette(); + void fadeDos(); + void blit(const uint8 *src, int pitch, int x, int y, int w, int h); + void cls(); + + void getPalette(uint8 *data, uint start, uint count); + void setPalette(const uint8 *data, uint start, uint count); + + void openSaveFileForWriting(const Common::String &name); + uint writeToSaveFile(const uint8 *data, uint size); + + bool openSaveFileForReading(const Common::String &name); + uint readFromSaveFile(uint8 *data, uint size); + + void setShakePos(int pos) { _system->setShakePos(pos); } + void printUnderMonitor(); + + void quit(); + + void loadSounds(uint bank, const Common::String &file); + bool loadSpeech(const Common::String &filename); + + void enableSavingOrLoading(bool enable = true) { _enableSavingOrLoading = enable; } + +private: + void keyPressed(uint16 ascii); + void setSpeed(uint speed); + void soundHandler(); + void playSound(uint8 channel, uint8 id, uint8 loops); + + const DreamWebGameDescription *_gameDescription; + Common::RandomSource _rnd; + + Common::File _file; + Common::OutSaveFile *_outSaveFile; + Common::InSaveFile *_inSaveFile; + + uint _speed; + bool _turbo; + uint _oldMouseState; + int _loadSavefile; + bool _enableSavingOrLoading; + + struct Sample { + uint offset; + uint size; + Sample(): offset(), size() {} + }; + + struct SoundData { + Common::Array<Sample> samples; + Common::Array<uint8> data; + }; + SoundData _soundData[2]; + Common::Array<uint8> _speechData; + + Audio::SoundHandle _channelHandle[2]; + uint8 _channel0, _channel1; + + DreamGen::DreamGenContext _context; +}; + +} // End of namespace DreamWeb + +#endif diff --git a/engines/dreamweb/module.mk b/engines/dreamweb/module.mk new file mode 100644 index 0000000000..3b0c7f3325 --- /dev/null +++ b/engines/dreamweb/module.mk @@ -0,0 +1,16 @@ +MODULE := engines/dreamweb + +MODULE_OBJS := \ + console.o \ + detection.o \ + dreamweb.o \ + dreamgen.o \ + stubs.o + +# This module can be built as a plugin +ifeq ($(ENABLE_DREAMWEB), DYNAMIC_PLUGIN) +PLUGIN := 1 +endif + +# Include common rules +include $(srcdir)/rules.mk diff --git a/engines/dreamweb/runtime.h b/engines/dreamweb/runtime.h new file mode 100644 index 0000000000..47dcbf820c --- /dev/null +++ b/engines/dreamweb/runtime.h @@ -0,0 +1,559 @@ +#ifndef ENGINES_DREAMGEN_RUNTIME_H__ +#define ENGINES_DREAMGEN_RUNTIME_H__ + +#include <assert.h> +#include "common/scummsys.h" +#include "common/array.h" +#include "common/debug.h" +#include "common/hashmap.h" +#include "common/list.h" +#include "common/ptr.h" + +namespace DreamWeb { + class DreamWebEngine; +} + +namespace DreamGen { + +//fixme: name clash +#undef random + +struct Register { + union { + uint16 _value; + uint8 _part[2]; + }; + inline Register(): _value() {} + inline Register& operator=(uint16 v) { _value = v; return *this; } + inline operator uint16&() { return _value; } + inline void cbw() { + if (_value & 0x80) + _value |= 0xff00; + else + _value &= 0x7f; + } +}; + +template<int kIndex> //from low to high +struct RegisterPart { + uint8 &_value; + + explicit inline RegisterPart(Register ®) : _value(reg._part[kIndex]) {} + + inline operator uint8&() { + return _value; + } + + inline RegisterPart& operator=(const RegisterPart& o) { + _value = o._value; + return *this; + } + + inline RegisterPart& operator=(uint8 v) { + _value = v; + return *this; + } +}; + +#ifdef SCUMM_LITTLE_ENDIAN + typedef RegisterPart<0> LowPartOfRegister; + typedef RegisterPart<1> HighPartOfRegister; +#else + typedef RegisterPart<1> LowPartOfRegister; + typedef RegisterPart<0> HighPartOfRegister; +#endif + +class WordRef { + uint8 *_data; + unsigned _index; + uint16 _value; + +public: + inline WordRef(Common::Array<uint8> &data, unsigned index) : _data(data.begin() + index), _index(index) { + assert(index + 1 < data.size()); + _value = _data[0] | (_data[1] << 8); + } + + inline WordRef& operator=(const WordRef &ref) { + _value = ref._value; + return *this; + } + + inline WordRef& operator=(uint16 v) { + _value = v; + return *this; + } + + inline operator uint16&() { + return _value; + } + + inline ~WordRef() { + _data[0] = _value & 0xff; + _data[1] = _value >> 8; + _value = _data[0] | (_data[1] << 8); + } +}; + +struct Segment { + Common::Array<uint8> data; + + inline void assign(const uint8 *b, const uint8 *e) { + data.assign(b, e); + } + + inline uint8 &byte(unsigned index) { + assert(index < data.size()); + return data[index]; + } + + inline WordRef word(unsigned index) { + return WordRef(data, index); + } + + inline uint8* ptr(unsigned index, unsigned size) { + assert(index + size <= data.size()); + return data.begin() + index; + } +}; + +typedef Common::SharedPtr<Segment> SegmentPtr; + +class Context; + +class SegmentRef { + Context *_context; + uint16 _value; + SegmentPtr _segment; + +public: + SegmentRef(Context *ctx, uint16 value = 0, SegmentPtr segment = SegmentPtr()): _context(ctx), _value(value), _segment(segment) { + } + + inline void reset(uint16 value); + + inline SegmentRef& operator=(const uint16 id) { + reset(id); + return *this; + } + + inline SegmentRef& operator=(const SegmentRef &ref) { + _context = ref._context; + _value = ref._value; + _segment = ref._segment; + return *this; + } + + inline uint8 &byte(unsigned index) { + assert(_segment != 0); + return _segment->byte(index); + } + + inline operator uint16() const { + return _value; + } + + inline WordRef word(unsigned index) { + //debug(1, "getting word ref for %04x:%d", _value, index); + assert(_segment != 0); + return _segment->word(index); + } + + inline void assign(const uint8 *b, const uint8 *e) { + assert(_segment != 0); + _segment->assign(b, e); + } + + inline uint8* ptr(unsigned index, unsigned size) { + assert(_segment != 0); + return _segment->ptr(index, size); + } +}; + +struct Flags { + bool _z, _c, _s, _o; + inline Flags(): _z(true), _c(false), _s(false), _o(false) {} + + inline bool z() const { return _z; } + inline bool c() const { return _c; } + inline bool s() const { return _s; } + + inline bool l() const { return _o != _s; } + inline bool le() const { return _o != _s|| _z; } + + inline void update_zs(uint8 v) { + _s = v & 0x80; + _z = v == 0; + } + + inline void update_zs(uint16 v) { + _s = v & 0x8000; + _z = v == 0; + } + + inline void update_o(uint8 v, uint8 a, uint8 b) { + uint8 s1 = a & 0x80, s2 = b & 0x80; + _o = (s1 == s2) && (v & 0x80) != s1; + } + + inline void update_o(uint16 v, uint16 a, uint16 b) { + uint16 s1 = a & 0x8000, s2 = b & 0x8000; + _o = (s1 == s2) && (v & 0x8000) != s1; + } +}; + +class Context { + typedef Common::HashMap<uint16, SegmentPtr> SegmentMap; + SegmentMap _segments; + + typedef Common::List<uint16> FreeSegmentList; + FreeSegmentList _freeSegments; + +public: + DreamWeb::DreamWebEngine *engine; + + enum { kDefaultDataSegment = 0x1000 }; + + Register ax, dx, bx, cx, si, di; + LowPartOfRegister al; + HighPartOfRegister ah; + LowPartOfRegister bl; + HighPartOfRegister bh; + LowPartOfRegister cl; + HighPartOfRegister ch; + LowPartOfRegister dl; + HighPartOfRegister dh; + + SegmentRef cs, ds, es, data; + //data == fake segment register always pointing to data segment + Flags flags; + + inline Context(): engine(0), al(ax), ah(ax), bl(bx), bh(bx), cl(cx), ch(cx), dl(dx), dh(dx), + cs(this), ds(this), es(this), data(this) { + _segments[kDefaultDataSegment] = SegmentPtr(new Segment()); + cs.reset(kDefaultDataSegment); + ds.reset(kDefaultDataSegment); + es.reset(kDefaultDataSegment); + data.reset(kDefaultDataSegment); + } + + SegmentRef getSegment(uint16 value) { + SegmentMap::iterator i = _segments.find(value); + assert(i != _segments.end()); + return SegmentRef(this, value, i->_value); + } + + SegmentRef allocateSegment(uint size) { + unsigned id; + if (_freeSegments.empty()) + id = kDefaultDataSegment + _segments.size(); + else { + id = _freeSegments.front(); + _freeSegments.pop_front(); + } + assert(!_segments.contains(id)); + SegmentPtr seg(new Segment()); + seg->data.resize(size); + _segments[id] = seg; + return SegmentRef(this, id, seg); + } + + void deallocateSegment(uint16 id) { + SegmentMap::iterator i = _segments.find(id); + assert(i != _segments.end()); + _segments.erase(i); + _freeSegments.push_back(id); + } + + inline void _cmp(uint8 a, uint8 b) { + _sub(a, b); + } + + inline void _cmp(uint16 a, uint16 b) { + _sub(a, b); + } + + inline void _test(uint8 a, uint8 b) { + _and(a, b); + } + + inline void _test(uint16 a, uint16 b) { + _and(a, b); + } + + inline void _add(uint8 &dst, uint8 src) { + unsigned r = (unsigned)dst + src; + flags.update_o((uint8)r, dst, src); + flags._c = r >= 0x100; + dst = r; + flags.update_zs(dst); + } + + inline void _add(uint16 &dst, uint16 src) { + unsigned r = (unsigned)dst + src; + flags.update_o((uint16)r, dst, src); + flags._c = r >= 0x10000; + dst = r; + flags.update_zs(dst); + } + + inline void _sub(uint8 &dst, uint8 src) { + flags.update_o(uint8(dst - src), dst, (uint8)-src); + flags._c = dst < src; + dst -= src; + flags.update_zs(dst); + } + + inline void _sub(uint16 &dst, uint16 src) { + flags.update_o(uint16(dst - src), dst, (uint16)-src); + flags._c = dst < src; + dst -= src; + flags.update_zs(dst); + } + + inline void _inc(uint8 &dst) { + flags.update_o((uint8)(dst + 1), dst, 1); + ++dst; + flags.update_zs(dst); + } + + inline void _inc(uint16 &dst) { + flags.update_o((uint16)(dst + 1), dst, 1); + ++dst; + flags.update_zs(dst); + } + + inline void _dec(uint8 &dst) { + flags.update_o(uint8(dst - 1), dst, 1); + --dst; + flags.update_zs(dst); + } + + inline void _dec(uint16 &dst) { + flags.update_o(uint16(dst - 1), dst, 1); + --dst; + flags.update_zs(dst); + } + + inline void _and(uint8 &dst, uint8 src) { + dst &= src; + flags.update_zs(dst); + flags._c = flags._o = false; + } + + inline void _and(uint16 &dst, uint16 src) { + dst &= src; + flags.update_zs(dst); + flags._c = flags._o = false; + } + + inline void _or(uint8 &dst, uint8 src) { + dst |= src; + flags.update_zs(dst); + flags._c = flags._o = false; + } + + inline void _or(uint16 &dst, uint16 src) { + dst |= src; + flags.update_zs(dst); + flags._c = flags._o = false; + } + + inline void _xor(uint8 &dst, uint8 src) { + dst ^= src; + flags.update_zs(dst); + flags._c = flags._o = false; + } + + inline void _xor(uint16 &dst, uint16 src) { + dst ^= src; + flags.update_zs(dst); + flags._c = flags._o = false; + } + + inline void _shr(uint8 &dst, uint8 src) { + src &= 0x1f; + if (src > 0) { + dst >>= (src - 1); + flags._c = dst & 1; + dst >>= 1; + flags.update_zs(dst); + } + if (src == 1) + flags._o = dst & 0x80; + } + + inline void _shr(uint16 &dst, uint8 src) { + src &= 0x1f; + if (src > 0) { + dst >>= (src - 1); + flags._c = dst & 1; + dst >>= 1; + flags.update_zs(dst); + } + if (src == 1) + flags._o = dst & 0x8000; + } + + inline void _shl(uint8 &dst, uint8 src) { + src &= 0x1f; + if (src > 0) { + dst <<= (src - 1); + flags._c = dst & 0x80; + dst <<= 1; + flags.update_zs(dst); + } + if (src == 1) + flags._o = ((dst & 0x80) != 0) == flags._c; + } + inline void _shl(uint16 &dst, uint8 src) { + src &= 0x1f; + if (src > 0) { + dst <<= (src - 1); + flags._c = dst & 0x8000; + dst <<= 1; + flags.update_zs(dst); + } + if (src == 1) + flags._o = ((dst & 0x8000) != 0) == flags._c; + } + + inline void _mul(uint8 src) { + unsigned r = unsigned(al) * src; + ax = (uint16)r; + flags._c = r >= 0x10000; + flags._z = r == 0; + flags._s = r & 0x8000; + flags._o = ah != 0; + } + + inline void _mul(uint16 src) { + unsigned r = unsigned(ax) * src; //assuming here that we have at least 32 bits + dx = (r >> 16) & 0xffff; + ax = r & 0xffff; + flags._c = false; + flags._z = r == 0; + flags._s = r & 0x80000000; + flags._o = dx != 0; + } + + inline void _neg(uint8 &src) { + uint8 r = 0; + _sub(r, src); + src = r; + } + + inline void _neg(uint16 &src) { + uint16 r = 0; + _sub(r, src); + src = r; + } + + inline void _lodsb() { + al = ds.byte(si++); + } + + inline void _lodsw() { + ax = ds.word(si); + si += 2; + } + + inline void _movsb() { + es.byte(di++) = ds.byte(si++); + } + + inline void _movsb(uint size, bool clear_cx = false) { + uint8 *dst = es.ptr(di, size); + uint8 *src = ds.ptr(si, size); + memcpy(dst, src, size); + di += size; + si += size; + if (clear_cx) + cx = 0; + } + + inline void _movsw() { + _movsb(); + _movsb(); + } + + inline void _movsw(uint size, bool clear_cx = false) { + _movsb(size * 2, clear_cx); + } + + inline void _stosb() { + es.byte(di++) = al; + } + + inline void _stosb(uint size, bool clear_cx = false) { + uint8 *dst = es.ptr(di, size); + memset(dst, al, size); + di += size; + if (clear_cx) + cx = 0; + } + + inline void _stosw() { + es.byte(di++) = al; + es.byte(di++) = ah; + } + + inline void _stosw(uint size, bool clear_cx = false) { + uint8 *dst = es.ptr(di, size * 2); + di += 2 * size; + while(size--) { + *dst++ = al; + *dst++ = ah; + } + if (clear_cx) + cx = 0; + } + + inline void _xchg(uint16 &a, uint16 &b) { + uint16 x = a; + a = b; + b = x; + } + + inline void _xchg(uint8 &a, uint8 &b) { + uint8 t = a; + a = b; + b = t; + } + + Common::Array<uint16> stack; + inline void push(uint16 v) { + stack.push_back(v); + } + + inline uint16 pop() { + assert(!stack.empty()); + uint16 v = stack.back(); + stack.pop_back(); + return v; + } +}; + +inline void SegmentRef::reset(uint16 value) { + *this = _context->getSegment(value); +} + +class StackChecker { + const Context &_context; + const uint _stackDepth; + +public: + StackChecker(const Context &context): _context(context), _stackDepth(context.stack.size()) {} + ~StackChecker() { assert(_context.stack.size() == _stackDepth); } +}; + +#ifndef NDEBUG +# define STACK_CHECK StackChecker checker(*this) +#else +# define STACK_CHECK do {} while (0) +#endif + +} + +#endif + diff --git a/engines/dreamweb/stubs.cpp b/engines/dreamweb/stubs.cpp new file mode 100644 index 0000000000..be6dab5b52 --- /dev/null +++ b/engines/dreamweb/stubs.cpp @@ -0,0 +1,516 @@ +#include "dreamweb/dreamweb.h" +#include "engines/util.h" +#include "graphics/surface.h" + +namespace DreamGen { + +Common::String getFilename(Context &context) { + uint16 name_ptr = context.dx; + Common::String name; + uint8 c; + while((c = context.cs.byte(name_ptr++)) != 0) + name += (char)c; + return name; +} + +void DreamGenContext::multiget() { + unsigned w = (uint8)cl, h = (uint8)ch; + unsigned x = (uint16)di, y = (uint16)bx; + unsigned src = x + y * kScreenwidth; + unsigned dst = (uint16)si; + es = ds; + ds = data.word(kWorkspace); + if (y + h > 200) + h = 200 - y; + if (x + w > 320) + w = 320 - x; + //debug(1, "multiget %u,%u %ux%u -> segment: %04x->%04x", x, y, w, h, (uint16)ds, (uint16)es); + for(unsigned l = 0; l < h; ++l) { + uint8 *src_p = ds.ptr(src + kScreenwidth * l, w); + uint8 *dst_p = es.ptr(dst + w * l, w); + memcpy(dst_p, src_p, w); + } + si += w * h; + di = src + kScreenwidth * h; + cx = 0; +} + +void DreamGenContext::multiput() { + unsigned w = (uint8)cl, h = (uint8)ch; + unsigned x = (uint16)di, y = (uint16)bx; + unsigned src = (uint16)si; + unsigned dst = x + y * kScreenwidth; + es = data.word(kWorkspace); + if (y + h > 200) + h = 200 - y; + if (x + w > 320) + w = 320 - x; + //debug(1, "multiput %ux%u -> segment: %04x->%04x", w, h, (uint16)ds, (uint16)es); + for(unsigned l = 0; l < h; ++l) { + uint8 *src_p = ds.ptr(src + w * l, w); + uint8 *dst_p = es.ptr(dst + kScreenwidth * l, w); + memcpy(dst_p, src_p, w); + } + si += w * h; + di = dst + kScreenwidth * h; + cx = 0; +} + +void DreamGenContext::multidump() { + ds = data.word(kWorkspace); + int w = (uint8)cl, h = (uint8)ch; + int x = (int16)di, y = (int16)bx; + unsigned offset = x + y * kScreenwidth; + //debug(1, "multidump %ux%u(segment: %04x) -> %d,%d(address: %d)", w, h, (uint16)ds, x, y, offset); + engine->blit(ds.ptr(offset, w * h), kScreenwidth, x, y, w, h); + si = di = offset + h * kScreenwidth; + cx = 0; +} + +void DreamGenContext::worktoscreen() { + ds = data.word(kWorkspace); + uint size = 320 * 200; + engine->blit(ds.ptr(0, size), 320, 0, 0, 320, 200); + di = si = size; + cx = 0; +} + +void DreamGenContext::printundermon() { + engine->printUnderMonitor(); +} + +void DreamGenContext::cls() { + engine->cls(); +} + +void DreamGenContext::frameoutnm() { + unsigned w = (uint8)cl, h = (uint8)ch; + unsigned pitch = (uint16)dx; + unsigned src = (uint16)si; + int x = (uint16)di, y = (uint16)bx; + unsigned dst = x + y * pitch; + //debug(1, "framenm %ux%u[pitch: %u]-> %d,%d, segment: %04x->%04x", w, h, pitch, x, y, (uint16)ds, (uint16)es); + for(unsigned l = 0; l < h; ++l) { + uint8 *src_p = ds.ptr(src + w * l, w); + uint8 *dst_p = es.ptr(dst + pitch * l, w); + memcpy(dst_p, src_p, w); + } + di += dst + pitch * h; + si += w * h; + cx = 0; +} + +void DreamGenContext::seecommandtail() { + data.word(kSoundbaseadd) = 0x220; + data.byte(kSoundint) = 5; + data.byte(kSounddmachannel) = 1; + data.byte(kBrightness) = 1; + data.word(kHowmuchalloc) = 0x9360; +} + +void DreamGenContext::randomnumber() { + al = engine->randomNumber(); +} + +void DreamGenContext::quickquit() { + engine->quit(); +} + +void DreamGenContext::quickquit2() { + engine->quit(); +} + +void DreamGenContext::keyboardread() { + ::error("keyboardread"); //this keyboard int handler, must never be called +} + +void DreamGenContext::resetkeyboard() { +} + +void DreamGenContext::setkeyboardint() { +} + +void DreamGenContext::readfromfile() { + uint16 dst_offset = dx; + uint16 size = cx; + debug(1, "readfromfile(%04x:%u, %u)", (uint16)ds, dst_offset, size); + ax = engine->readFromFile(ds.ptr(dst_offset, size), size); + flags._c = false; +} + +void DreamGenContext::closefile() { + engine->closeFile(); + data.byte(kHandle) = 0; +} + +void DreamGenContext::openforsave() { + const char *name = (const char *)ds.ptr(dx, 13); + debug(1, "openforsave(%s)", name); + engine->openSaveFileForWriting(name); +} + +void DreamGenContext::openfilenocheck() { + const char *name = (const char *)ds.ptr(dx, 13); + debug(1, "checksavefile(%s)", name); + bool ok = engine->openSaveFileForReading(name); + flags._c = !ok; +} + +void DreamGenContext::openfilefromc() { + openfilenocheck(); +} + +void DreamGenContext::openfile() { + Common::String name = getFilename(*this); + if (name.empty()) { //fixme: this happens if you quit from new game/load screen + flags._c = true; + return; + } + debug(1, "opening file: %s", name.c_str()); + engine->openFile(name); + cs.word(kHandle) = 1; //only one handle + flags._c = false; +} + +void DreamGenContext::createfile() { + ::error("createfile"); +} + +void DreamGenContext::dontloadseg() { + ax = es.word(di); + _add(di, 2); + dx = ax; + cx = 0; + unsigned pos = engine->skipBytes(dx); + dx = pos >> 16; + ax = pos & 0xffff; + flags._c = false; +} + +void DreamGenContext::mousecall() { + engine->mouseCall(); +} + +void DreamGenContext::setmouse() { + data.word(kOldpointerx) = 0xffff; +} + +void DreamGenContext::gettime() { + TimeDate t; + g_system->getTimeAndDate(t); + debug(1, "\tgettime: %02d:%02d:%02d", t.tm_hour, t.tm_min, t.tm_sec); + ch = t.tm_hour; + cl = t.tm_min; + dh = t.tm_sec; + data.byte(kSecondcount) = dh; + data.byte(kMinutecount) = cl; + data.byte(kHourcount) = ch; +} + +void DreamGenContext::allocatemem() { + uint size = (bx + 2) * 16; + debug(1, "allocate mem, %u bytes", size); + flags._c = false; + SegmentRef seg = allocateSegment(size); + ax = (uint16)seg; + debug(1, "\tsegment address -> %04x", (uint16)ax); +} + +void DreamGenContext::deallocatemem() { + uint16 id = (uint16)es; + debug(1, "deallocating segment %04x", id); + deallocateSegment(id); + + //fixing invalid entries in the sprite table + es = data; + uint tsize = 16 * 32; + uint16 bseg = data.word(kBuffers); + if (!bseg) + return; + SegmentRef buffers(this); + buffers = bseg; + uint8 *ptr = buffers.ptr(kSpritetable, tsize); + for(uint i = 0; i < tsize; i += 32) { + uint16 seg = READ_LE_UINT16(ptr + i + 6); + //debug(1, "sprite segment = %04x", seg); + if (seg == id) + memset(ptr + i, 0xff, 32); + } +} + +void DreamGenContext::removeemm() { + ::error("removeemm"); +} + +void DreamGenContext::setupemm() { +} + +void DreamGenContext::pitinterupt() { + ::error("pitinterupt"); +} + +void DreamGenContext::getridofpit() { + ::error("getridofpit"); +} + +void DreamGenContext::setuppit() { + ::error("setuppit"); +} + +void DreamGenContext::startdmablock() { + ::error("startdmablock"); +} + +void DreamGenContext::dmaend() { + ::error("dmaend"); +} + +void DreamGenContext::restoreems() { + ::error("restoreems"); +} + +void DreamGenContext::saveems() { + ::error("saveems"); +} + +void DreamGenContext::bothchannels() { + ::error("bothchannels"); +} + +void DreamGenContext::channel1only() { + ::error("channel1only"); +} + +void DreamGenContext::channel0only() { + ::error("channel0only"); +} + +void DreamGenContext::out22c() { + ::error("out22c"); +} + +void DreamGenContext::soundstartup() {} +void DreamGenContext::soundend() {} +void DreamGenContext::DreamGenContext::interupttest() {} +void DreamGenContext::disablesoundint() {} +void DreamGenContext::enablesoundint() {} +void DreamGenContext::checksoundint() { + data.byte(kTestresult) = 1; +} + +void DreamGenContext::setsoundoff() { + warning("setsoundoff: STUB"); +} + +void DreamGenContext::loadsample() { + engine->loadSounds(0, (const char *)data.ptr(dx, 13)); +} + +void DreamGenContext::loadsecondsample() { + uint8 ch0 = data.byte(kCh0playing); + if (ch0 >= 12 && ch0 != 255) + cancelch0(); + uint8 ch1 = data.byte(kCh1playing); + if (ch1 >= 12) + cancelch1(); + engine->loadSounds(1, (const char *)data.ptr(dx, 13)); +} + +void DreamGenContext::loadspeech() { + cancelch1(); + data.byte(kSpeechloaded) = 0; + createname(); + const char *name = (const char *)data.ptr(di, 13); + //warning("name = %s", name); + if (engine->loadSpeech(name)) + data.byte(kSpeechloaded) = 1; +} + +void DreamGenContext::saveseg() { + cx = es.word(di); + _add(di, 2); + savefilewrite(); +} + +void DreamGenContext::savefilewrite() { + ax = engine->writeToSaveFile(ds.ptr(dx, cx), cx); +} + +void DreamGenContext::savefileread() { + ax = engine->readFromSaveFile(ds.ptr(dx, cx), cx); +} + +void DreamGenContext::loadseg() { + ax = es.word(di); + di += 2; + + uint16 dst_offset = dx; + uint16 size = ax; + + debug(1, "loadseg(%04x:%u, %u)", (uint16)ds, dst_offset, size); + ax = engine->readFromFile(ds.ptr(dst_offset, size), size); + flags._c = false; +} + +void DreamGenContext::error() { + ::error("error"); +} + +void DreamGenContext::generalerror() { + ::error("generalerror"); +} + +void DreamGenContext::dosreturn() { + _cmp(data.byte(kCommandtype), 250); + if (!flags.z()) { + data.byte(kCommandtype) = 250; + al = 46; + commandonly(); + } + + ax = data.word(kMousebutton); + _and(ax, 1); + if (flags.z()) + return; + + data.word(kMousebutton) = 0; + engine->quit(); +} + +void DreamGenContext::set16colpalette() { + //fixme: this is a bit hackish, set16colpalette called after initialization and nearly before main loop. + engine->enableSavingOrLoading(); +} + +void DreamGenContext::mode640x480() { + // Video mode 12h: 640x480 pixels, 16 colors, I believe + al = 0x12 + 128; + ah = 0; + initGraphics(640, 480, true); +} + +void DreamGenContext::showgroup() { + engine->setPalette(); +} + +void DreamGenContext::fadedos() { + engine->fadeDos(); +} + +void DreamGenContext::doshake() { + uint8 &counter = data.byte(kShakecounter); + _cmp(counter, 48); + if (flags.z()) + return; + + _add(counter, 1); + static const int shakeTable[] = { + 0, -2, 3, -2, 0, 2, 4, -1, + 1, -3, 3, 2, 0, -2, 3, -2, + 0, 2, 4, -1, 1, -3, 3, 2, + 0, -2, 3, -2, 0, 2, 4, -1, + + 1, -3, 3, 2, 0, -2, 3, -2, + 0, 2, 4, -1, 1, -3, 3, 2, + 0, -2, 3, -2, 0, 2, 4, -1, + 1, -3, 3, 2, 0, -2, 3, -2, + + 0, 2, 4, -1, 1, -3, 3, 2, + 0, -2, 3, -2, 0, 2, 4, -1, + 1, -3, 3, 2, 0, -2, 3, -2, + 0, 2, 4, -1, 1, -3, 3, 2, + + 0, -2, 3, -2, 0, 2, 4, -1, + 1, -3, 3, 0, + }; + int offset = shakeTable[counter]; + engine->setShakePos(offset >= 0? offset: -offset); +} + +void DreamGenContext::vsync() { + engine->waitForVSync(); +} + +void DreamGenContext::setmode() { + vsync(); + initGraphics(320, 200, false); +} + +void DreamGenContext::readoneblock() { + ds = data.word(kWorkspace); + cx = 30000; + dx = 0; + readfromfile(); +} + +void DreamGenContext::showpcx() { + Common::String name = getFilename(*this); + Common::File pcxFile; + + if (!pcxFile.open(name)) { + warning("showpcx: Could not open '%s'", name.c_str()); + return; + } + + uint8 *maingamepal; + int i, j; + + // Read the 16-color palette into the 'maingamepal' buffer. Note that + // the color components have to be adjusted from 8 to 6 bits. + + pcxFile.seek(16, SEEK_SET); + es = data.word(kBuffers); + maingamepal = es.ptr(4782, 768); //fixme: hardcoded offset + pcxFile.read(maingamepal, 48); + + memset(maingamepal + 48, 0xff, 720); + for (i = 0; i < 48; i++) { + maingamepal[i] >>= 2; + } + + // Decode the image data. + + Graphics::Surface *s = g_system->lockScreen(); + Common::Rect rect(640, 480); + + s->fillRect(rect, 0); + pcxFile.seek(128, SEEK_SET); + + for (int y = 0; y < 480; y++) { + byte *dst = (byte *)s->getBasePtr(0, y); + int decoded = 0; + + while (decoded < 320) { + byte col = pcxFile.readByte(); + byte len; + + if ((col & 0xc0) == 0xc0) { + len = col & 0x3f; + col = pcxFile.readByte(); + } else { + len = 1; + } + + // The image uses 16 colors and is stored as four bit + // planes, one for each bit of the color, least + // significant bit plane first. + + for (i = 0; i < len; i++) { + int plane = decoded / 80; + int pos = decoded % 80; + + for (j = 0; j < 8; j++) { + byte bit = (col >> (7 - j)) & 1; + dst[8 * pos + j] |= (bit << plane); + } + + decoded++; + } + } + } + + g_system->unlockScreen(); + pcxFile.close(); +} + +} /*namespace dreamgen */ diff --git a/engines/engine.cpp b/engines/engine.cpp index b3cb8bea06..0797bafc27 100644 --- a/engines/engine.cpp +++ b/engines/engine.cpp @@ -42,6 +42,7 @@ #include "common/list_intern.h" #include "common/scummsys.h" #include "common/textconsole.h" +#include "common/translation.h" #include "gui/debugger.h" #include "gui/dialog.h" @@ -206,12 +207,8 @@ void initGraphics(int width, int height, bool defaultTo1xScaler, const Graphics: // Error out on size switch failure if (gfxError & OSystem::kTransactionSizeChangeFailed) { - char buffer[16]; - snprintf(buffer, 16, "%dx%d", width, height); - - Common::String message = "Could not switch to resolution: '"; - message += buffer; - message += "'."; + Common::String message; + message = Common::String::format("Could not switch to resolution: '%dx%d'.", width, height); GUIErrorMessage(message); error("%s", message.c_str()); @@ -220,7 +217,7 @@ void initGraphics(int width, int height, bool defaultTo1xScaler, const Graphics: // Just show warnings then these occur: #ifdef USE_RGB_COLOR if (gfxError & OSystem::kTransactionFormatNotSupported) { - Common::String message = "Could not initialize color format."; + Common::String message = _("Could not initialize color format."); GUI::MessageDialog dialog(message); dialog.runModal(); @@ -228,7 +225,7 @@ void initGraphics(int width, int height, bool defaultTo1xScaler, const Graphics: #endif if (gfxError & OSystem::kTransactionModeSwitchFailed) { - Common::String message = "Could not switch to video mode: '"; + Common::String message = _("Could not switch to video mode: '"); message += ConfMan.get("gfx_mode"); message += "'."; @@ -237,12 +234,12 @@ void initGraphics(int width, int height, bool defaultTo1xScaler, const Graphics: } if (gfxError & OSystem::kTransactionAspectRatioFailed) { - GUI::MessageDialog dialog("Could not apply aspect ratio setting."); + GUI::MessageDialog dialog(_("Could not apply aspect ratio setting.")); dialog.runModal(); } if (gfxError & OSystem::kTransactionFullscreenFailed) { - GUI::MessageDialog dialog("Could not apply fullscreen setting."); + GUI::MessageDialog dialog(_("Could not apply fullscreen setting.")); dialog.runModal(); } } @@ -342,22 +339,22 @@ void Engine::checkCD() { if (GetDriveType(buffer) == DRIVE_CDROM) { GUI::MessageDialog dialog( - "You appear to be playing this game directly\n" + _("You appear to be playing this game directly\n" "from the CD. This is known to cause problems,\n" "and it is therefore recommended that you copy\n" "the data files to your hard disk instead.\n" - "See the README file for details.", "OK"); + "See the README file for details."), _("OK")); dialog.runModal(); } else { // If we reached here, the game has audio tracks, // it's not ran from the CD and the tracks have not // been ripped. GUI::MessageDialog dialog( - "This game has audio tracks in its disk. These\n" + _("This game has audio tracks in its disk. These\n" "tracks need to be ripped from the disk using\n" "an appropriate CD audio extracting tool in\n" "order to listen to the game's music.\n" - "See the README file for details.", "OK"); + "See the README file for details."), _("OK")); dialog.runModal(); } #endif @@ -403,6 +400,17 @@ void Engine::openMainMenuDialog() { syncSoundSettings(); } +bool Engine::warnUserAboutUnsupportedGame() { + if (ConfMan.getBool("enable_unsupported_game_warning")) { + GUI::MessageDialog alert("WARNING: The game you are about to start is" + " not yet fully supported by ScummVM. As such, it is likely to be" + " unstable, and any saves you make might not work in future" + " versions of ScummVM.", "Start anyway", "Cancel"); + return alert.runModal() == GUI::kMessageOK; + } + return true; +} + uint32 Engine::getTotalPlayTime() const { if (!_pauseLevel) return _system->getMillis() - _engineStartTime; @@ -474,7 +482,7 @@ bool Engine::canLoadGameStateCurrently() { return false; } -Common::Error Engine::saveGameState(int slot, const char *desc) { +Common::Error Engine::saveGameState(int slot, const Common::String &desc) { // Do nothing by default return Common::kNoError; } diff --git a/engines/engine.h b/engines/engine.h index 375df2b0a3..06b7f7dedd 100644 --- a/engines/engine.h +++ b/engines/engine.h @@ -196,7 +196,7 @@ public: * @param desc a description for the savestate, entered by the user * @return returns kNoError on success, else an error code. */ - virtual Common::Error saveGameState(int slot, const char *desc); + virtual Common::Error saveGameState(int slot, const Common::String &desc); /** * Indicates whether a game state can be saved. @@ -252,6 +252,13 @@ public: void openMainMenuDialog(); /** + * Display a warning to the user that the game is not fully supported. + * + * @return true if the user chose to start anyway, false otherwise + */ + static bool warnUserAboutUnsupportedGame(); + + /** * Get the total play time. * * @return How long the player has been playing in ms. diff --git a/engines/engines.mk b/engines/engines.mk index f8ff823c13..dc09fbd54e 100644 --- a/engines/engines.mk +++ b/engines/engines.mk @@ -46,6 +46,11 @@ DEFINES += -DENABLE_DRASCULA=$(ENABLE_DRASCULA) MODULES += engines/drascula endif +ifdef ENABLE_DREAMWEB +DEFINES += -DENABLE_DREAMWEB=$(ENABLE_DREAMWEB) +MODULES += engines/dreamweb +endif + ifdef ENABLE_GOB DEFINES += -DENABLE_GOB=$(ENABLE_GOB) MODULES += engines/gob diff --git a/engines/game.cpp b/engines/game.cpp index a14edb8af4..8ea68bb681 100644 --- a/engines/game.cpp +++ b/engines/game.cpp @@ -38,20 +38,15 @@ GameDescriptor::GameDescriptor() { setVal("description", ""); } -GameDescriptor::GameDescriptor(const PlainGameDescriptor &pgd) { - setVal("gameid", pgd.gameid); - setVal("description", pgd.description); -} - -GameDescriptor::GameDescriptor(const PlainGameDescriptorGUIOpts &pgd) { +GameDescriptor::GameDescriptor(const PlainGameDescriptor &pgd, uint32 guioptions) { setVal("gameid", pgd.gameid); setVal("description", pgd.description); - if (pgd.guioptions != 0) - setVal("guioptions", Common::getGameGUIOptionsDescription(pgd.guioptions)); + if (guioptions != 0) + setVal("guioptions", Common::getGameGUIOptionsDescription(guioptions)); } -GameDescriptor::GameDescriptor(const Common::String &g, const Common::String &d, Common::Language l, Common::Platform p, uint32 guioptions) { +GameDescriptor::GameDescriptor(const Common::String &g, const Common::String &d, Common::Language l, Common::Platform p, uint32 guioptions, GameSupportLevel gsl) { setVal("gameid", g); setVal("description", d); if (l != Common::UNK_LANG) @@ -60,6 +55,8 @@ GameDescriptor::GameDescriptor(const Common::String &g, const Common::String &d, setVal("platform", Common::getPlatformCode(p)); if (guioptions != 0) setVal("guioptions", Common::getGameGUIOptionsDescription(guioptions)); + + setSupportLevel(gsl); } void GameDescriptor::setGUIOptions(uint32 guioptions) { @@ -74,9 +71,6 @@ void GameDescriptor::appendGUIOptions(const Common::String &str) { } void GameDescriptor::updateDesc(const char *extra) { - // TODO: The format used here (LANG/PLATFORM/EXTRA) is not set in stone. - // We may want to change the order (PLATFORM/EXTRA/LANG, anybody?), or - // the seperator (instead of '/' use ', ' or ' '). const bool hasCustomLanguage = (language() != Common::UNK_LANG); const bool hasCustomPlatform = (platform() != Common::kPlatformUnknown); const bool hasExtraDesc = (extra && extra[0]); @@ -102,3 +96,30 @@ void GameDescriptor::updateDesc(const char *extra) { setVal("description", descr); } } + +GameSupportLevel GameDescriptor::getSupportLevel() { + GameSupportLevel gsl = kStableGame; + if (contains("gsl")) { + Common::String gslString = getVal("gsl"); + if (gslString.equals("unstable")) + gsl = kUnstableGame; + else if (gslString.equals("testing")) + gsl = kTestingGame; + } + return gsl; +} + +void GameDescriptor::setSupportLevel(GameSupportLevel gsl) { + switch (gsl) { + case kUnstableGame: + setVal("gsl", "unstable"); + break; + case kTestingGame: + setVal("gsl", "testing"); + break; + case kStableGame: + // Fall Through intended + default: + erase("gsl"); + } +} diff --git a/engines/game.h b/engines/game.h index f9988c2965..9082d93793 100644 --- a/engines/game.h +++ b/engines/game.h @@ -40,24 +40,22 @@ struct PlainGameDescriptor { }; /** - * Same as PlainGameDsscriptor except it adds Game GUI options parameter - * This is a plain struct to make it possible to declare NULL-terminated C arrays - * consisting of PlainGameDescriptors. - */ -struct PlainGameDescriptorGUIOpts { - const char *gameid; - const char *description; - uint32 guioptions; -}; - -/** * Given a list of PlainGameDescriptors, returns the first PlainGameDescriptor * matching the given gameid. If not match is found return 0. - * The end of the list must marked by a PlainGameDescriptor with gameid equal to 0. + * The end of the list must be marked by an entry with gameid 0. */ const PlainGameDescriptor *findPlainGameDescriptor(const char *gameid, const PlainGameDescriptor *list); /** + * Ths is an enum to describe how done a game is. This also indicates what level of support is expected. + */ +enum GameSupportLevel { + kStableGame = 0, // the game is fully supported + kTestingGame, // the game is not supposed to end up in releases yet but is ready for public testing + kUnstableGame // the game is not even ready for public testing yet +}; + +/** * A hashmap describing details about a given game. In a sense this is a refined * version of PlainGameDescriptor, as it also contains a gameid and a description string. * But in addition, platform and language settings, as well as arbitrary other settings, @@ -67,22 +65,30 @@ const PlainGameDescriptor *findPlainGameDescriptor(const char *gameid, const Pla class GameDescriptor : public Common::StringMap { public: GameDescriptor(); - GameDescriptor(const PlainGameDescriptor &pgd); - GameDescriptor(const PlainGameDescriptorGUIOpts &pgd); + GameDescriptor(const PlainGameDescriptor &pgd, uint32 guioptions = 0); GameDescriptor(const Common::String &gameid, const Common::String &description, Common::Language language = Common::UNK_LANG, Common::Platform platform = Common::kPlatformUnknown, - uint32 guioptions = 0); + uint32 guioptions = 0, + GameSupportLevel gsl = kStableGame); /** - * Update the description string by appending (LANG/PLATFORM/EXTRA) to it. + * Update the description string by appending (EXTRA/PLATFORM/LANG) to it. + * Values that are missing are omitted, so e.g. (EXTRA/LANG) would be + * added if no platform has been specified but a language and an extra string. */ void updateDesc(const char *extra = 0); void setGUIOptions(uint32 options); void appendGUIOptions(const Common::String &str); + /** + * What level of support is expected of this game + */ + GameSupportLevel getSupportLevel(); + void setSupportLevel(GameSupportLevel gsl); + Common::String &gameid() { return getVal("gameid"); } Common::String &description() { return getVal("description"); } const Common::String &gameid() const { return getVal("gameid"); } @@ -102,7 +108,7 @@ public: GameList(const GameList &list) : Common::Array<GameDescriptor>(list) {} GameList(const PlainGameDescriptor *g) { while (g->gameid) { - push_back(GameDescriptor(g->gameid, g->description)); + push_back(GameDescriptor(*g)); g++; } } diff --git a/engines/gob/detection.cpp b/engines/gob/detection.cpp index be44c05bfb..9a554b5429 100644 --- a/engines/gob/detection.cpp +++ b/engines/gob/detection.cpp @@ -22,6 +22,7 @@ #include "base/plugins.h" #include "engines/advancedDetector.h" +#include "engines/obsolete.h" #include "gob/gob.h" @@ -78,7 +79,7 @@ static const PlainGameDescriptor gobGames[] = { {0, 0} }; -static const ADObsoleteGameID obsoleteGameIDsTable[] = { +static const Engines::ObsoleteGameID obsoleteGameIDsTable[] = { {"gob1", "gob", kPlatformUnknown}, {"gob2", "gob", kPlatformUnknown}, {0, 0, kPlatformUnknown} @@ -86,34 +87,20 @@ static const ADObsoleteGameID obsoleteGameIDsTable[] = { #include "gob/detection_tables.h" -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Gob::gameDescriptions, - // Size of that superset structure - sizeof(Gob::GOBGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - gobGames, - // Structure for autoupgrading obsolete targets - obsoleteGameIDsTable, - // Name of single gameid (optional) - "gob", - // List of files for file-based fallback detection (optional) - Gob::fileBased, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NOLAUNCHLOAD, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class GobMetaEngine : public AdvancedMetaEngine { public: - GobMetaEngine() : AdvancedMetaEngine(detectionParams) {} + GobMetaEngine() : AdvancedMetaEngine(Gob::gameDescriptions, sizeof(Gob::GOBGameDescription), gobGames) { + _singleid = "gob"; + _guioptions = Common::GUIO_NOLAUNCHLOAD; + } + + virtual GameDescriptor findGame(const char *gameid) const { + return Engines::findGameID(gameid, _gameids, obsoleteGameIDsTable); + } + + virtual const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const { + return detectGameFilebased(allFiles, Gob::fileBased); + } virtual const char *getName() const { return "Gob"; @@ -124,6 +111,11 @@ public: } virtual bool hasFeature(MetaEngineFeature f) const; + + virtual Common::Error createInstance(OSystem *syst, Engine **engine) const { + Engines::upgradeTargetIfNecessary(obsoleteGameIDsTable); + return AdvancedMetaEngine::createInstance(syst, engine); + } virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const; }; diff --git a/engines/gob/detection_tables.h b/engines/gob/detection_tables.h index 11cca2b65e..1c9811fe9e 100644 --- a/engines/gob/detection_tables.h +++ b/engines/gob/detection_tables.h @@ -5202,32 +5202,32 @@ static const GOBGameDescription fallbackDescs[] = { }; static const ADFileBasedFallback fileBased[] = { - { &fallbackDescs[ 0], { "intro.stk", "disk1.stk", "disk2.stk", "disk3.stk", "disk4.stk", 0 } }, - { &fallbackDescs[ 1], { "intro.stk", "gob.lic", 0 } }, - { &fallbackDescs[ 2], { "intro.stk", 0 } }, - { &fallbackDescs[ 2], { "intro.stk", "disk2.stk", "disk3.stk", 0 } }, - { &fallbackDescs[ 3], { "intro.stk", "disk2.stk", "disk3.stk", "musmac1.mid", 0 } }, - { &fallbackDescs[ 4], { "intro.stk", "gobnew.lic", 0 } }, - { &fallbackDescs[ 5], { "intro.stk", "scaa.imd", "scba.imd", "scbf.imd", 0 } }, - { &fallbackDescs[ 6], { "intro.stk", "imd.itk", 0 } }, - { &fallbackDescs[ 7], { "intro.stk", "mus_gob3.lic", 0 } }, - { &fallbackDescs[ 8], { "intro.stk", "woodruff.itk", 0 } }, - { &fallbackDescs[ 9], { "intro.stk", "commun1.itk", 0 } }, - { &fallbackDescs[10], { "intro.stk", "commun1.itk", "musmac1.mid", 0 } }, - { &fallbackDescs[11], { "intro.stk", "commun1.itk", "lost.lic", 0 } }, - { &fallbackDescs[12], { "intro.stk", "cd1.itk", "objet1.itk", 0 } }, - { &fallbackDescs[13], { "playtoon.stk", "archi.stk", 0 } }, - { &fallbackDescs[14], { "playtoon.stk", "spirou.stk", 0 } }, - { &fallbackDescs[15], { "playtoon.stk", "chato.stk", 0 } }, - { &fallbackDescs[16], { "playtoon.stk", "manda.stk", 0 } }, - { &fallbackDescs[17], { "playtoon.stk", "wakan.stk", 0 } }, - { &fallbackDescs[18], { "playtoon.stk", "dan.itk" } }, - { &fallbackDescs[19], { "intro.stk", "bambou.itk", 0 } }, - { &fallbackDescs[20], { "disk0.stk", "disk1.stk", "disk2.stk", "disk3.stk", 0 } }, - { &fallbackDescs[21], { "disk1.stk", "disk2.stk", "disk3.stk", 0 } }, - { &fallbackDescs[22], { "adi2.stk", 0 } }, - { &fallbackDescs[23], { "adif41.stk", "adim41.stk", 0 } }, - { &fallbackDescs[24], { "coktelplayer.scn", 0 } }, + { &fallbackDescs[ 0].desc, { "intro.stk", "disk1.stk", "disk2.stk", "disk3.stk", "disk4.stk", 0 } }, + { &fallbackDescs[ 1].desc, { "intro.stk", "gob.lic", 0 } }, + { &fallbackDescs[ 2].desc, { "intro.stk", 0 } }, + { &fallbackDescs[ 2].desc, { "intro.stk", "disk2.stk", "disk3.stk", 0 } }, + { &fallbackDescs[ 3].desc, { "intro.stk", "disk2.stk", "disk3.stk", "musmac1.mid", 0 } }, + { &fallbackDescs[ 4].desc, { "intro.stk", "gobnew.lic", 0 } }, + { &fallbackDescs[ 5].desc, { "intro.stk", "scaa.imd", "scba.imd", "scbf.imd", 0 } }, + { &fallbackDescs[ 6].desc, { "intro.stk", "imd.itk", 0 } }, + { &fallbackDescs[ 7].desc, { "intro.stk", "mus_gob3.lic", 0 } }, + { &fallbackDescs[ 8].desc, { "intro.stk", "woodruff.itk", 0 } }, + { &fallbackDescs[ 9].desc, { "intro.stk", "commun1.itk", 0 } }, + { &fallbackDescs[10].desc, { "intro.stk", "commun1.itk", "musmac1.mid", 0 } }, + { &fallbackDescs[11].desc, { "intro.stk", "commun1.itk", "lost.lic", 0 } }, + { &fallbackDescs[12].desc, { "intro.stk", "cd1.itk", "objet1.itk", 0 } }, + { &fallbackDescs[13].desc, { "playtoon.stk", "archi.stk", 0 } }, + { &fallbackDescs[14].desc, { "playtoon.stk", "spirou.stk", 0 } }, + { &fallbackDescs[15].desc, { "playtoon.stk", "chato.stk", 0 } }, + { &fallbackDescs[16].desc, { "playtoon.stk", "manda.stk", 0 } }, + { &fallbackDescs[17].desc, { "playtoon.stk", "wakan.stk", 0 } }, + { &fallbackDescs[18].desc, { "playtoon.stk", "dan.itk" } }, + { &fallbackDescs[19].desc, { "intro.stk", "bambou.itk", 0 } }, + { &fallbackDescs[20].desc, { "disk0.stk", "disk1.stk", "disk2.stk", "disk3.stk", 0 } }, + { &fallbackDescs[21].desc, { "disk1.stk", "disk2.stk", "disk3.stk", 0 } }, + { &fallbackDescs[22].desc, { "adi2.stk", 0 } }, + { &fallbackDescs[23].desc, { "adif41.stk", "adim41.stk", 0 } }, + { &fallbackDescs[24].desc, { "coktelplayer.scn", 0 } }, { 0, { 0 } } }; diff --git a/engines/gob/inter_playtoons.cpp b/engines/gob/inter_playtoons.cpp index d57d2f354b..e05cae354c 100644 --- a/engines/gob/inter_playtoons.cpp +++ b/engines/gob/inter_playtoons.cpp @@ -22,6 +22,7 @@ #include "common/endian.h" #include "common/str.h" +#include "common/translation.h" #include "gui/message.h" @@ -252,7 +253,7 @@ void Inter_Playtoons::oPlaytoons_readData(OpFuncParams ¶ms) { WRITE_VAR(1, 1); if (!_vm->_saveLoad->load(file.c_str(), dataVar, size, offset)) { - GUI::MessageDialog dialog("Failed to load game state from file."); + GUI::MessageDialog dialog(_("Failed to load game state from file.")); dialog.runModal(); } else WRITE_VAR(1, 0); diff --git a/engines/gob/inter_v2.cpp b/engines/gob/inter_v2.cpp index 84cae3b380..2fea18343d 100644 --- a/engines/gob/inter_v2.cpp +++ b/engines/gob/inter_v2.cpp @@ -22,6 +22,7 @@ #include "common/endian.h" #include "common/str.h" +#include "common/translation.h" #include "gui/message.h" @@ -1279,7 +1280,7 @@ void Inter_v2::o2_readData(OpFuncParams ¶ms) { if (!_vm->_saveLoad->load(file, dataVar, size, offset)) { - GUI::MessageDialog dialog("Failed to load game state from file."); + GUI::MessageDialog dialog(_("Failed to load game state from file.")); dialog.runModal(); } else @@ -1349,7 +1350,7 @@ void Inter_v2::o2_writeData(OpFuncParams ¶ms) { if (!_vm->_saveLoad->save(file, dataVar, size, offset)) { - GUI::MessageDialog dialog("Failed to save game state to file."); + GUI::MessageDialog dialog(_("Failed to save game state to file.")); dialog.runModal(); } else diff --git a/engines/gob/inter_v5.cpp b/engines/gob/inter_v5.cpp index ed371737bd..c0e8978afd 100644 --- a/engines/gob/inter_v5.cpp +++ b/engines/gob/inter_v5.cpp @@ -20,6 +20,8 @@ * */ +#include "common/translation.h" + #include "gui/message.h" #include "gob/gob.h" @@ -102,7 +104,7 @@ void Inter_v5::o5_deleteFile() { if (mode == SaveLoad::kSaveModeSave) { if (!_vm->_saveLoad->deleteFile(file)) { - GUI::MessageDialog dialog("Failed to delete file."); + GUI::MessageDialog dialog(_("Failed to delete file.")); dialog.runModal(); } diff --git a/engines/gob/resources.cpp b/engines/gob/resources.cpp index 92eec0ee25..d5497c25be 100644 --- a/engines/gob/resources.cpp +++ b/engines/gob/resources.cpp @@ -603,10 +603,7 @@ bool Resources::dumpResource(const Resource &resource, uint16 id, Common::String fileName = _fileBase; - char idStr[7]; - - snprintf(idStr, 7, "_%05d", id); - fileName += idStr; + fileName += Common::String::format("_%05d", id); fileName += "."; fileName += ext; diff --git a/engines/gob/save/saveconverter.cpp b/engines/gob/save/saveconverter.cpp index f24cb60005..ec8bcbcfea 100644 --- a/engines/gob/save/saveconverter.cpp +++ b/engines/gob/save/saveconverter.cpp @@ -301,7 +301,7 @@ bool SaveConverter::createStream(SaveWriter &writer) { } /* Stream functions. If the new save data stream is available, redirect the stream - * operations to that stream. Normal stream error behaviour if not. */ + * operations to that stream. Normal stream error behavior if not. */ bool SaveConverter::err() const { if (!_data || !_stream) diff --git a/engines/gob/save/savehandler.cpp b/engines/gob/save/savehandler.cpp index 9e46f1db6f..71de629f93 100644 --- a/engines/gob/save/savehandler.cpp +++ b/engines/gob/save/savehandler.cpp @@ -154,8 +154,7 @@ Common::String SlotFileIndexed::build(int slot) const { if ((slot < 0) || (((uint32) slot) >= _slotCount)) return Common::String(); - char buf[4]; - snprintf(buf, sizeof(buf), "%02d", slot); + Common::String buf = Common::String::format("%02d", slot); return _base + "." + _ext + buf; } diff --git a/engines/gob/sound/sound.cpp b/engines/gob/sound/sound.cpp index 0ad17c1e33..212116f689 100644 --- a/engines/gob/sound/sound.cpp +++ b/engines/gob/sound/sound.cpp @@ -667,15 +667,13 @@ void Sound::bgPlay(const char *base, const char *ext, SoundType type, int count) _bgatmos->stopBA(); _bgatmos->queueClear(); - int length = strlen(base) + 7; - char *fileName = new char[length]; SoundDesc *sndDesc; for (int i = 1; i <= count; i++) { - snprintf(fileName, length, "%s%02d.%s", base, i, ext); + Common::String fileName = Common::String::format("%s%02d.%s", base, i, ext); sndDesc = new SoundDesc; - if (sampleLoad(sndDesc, type, fileName)) + if (sampleLoad(sndDesc, type, fileName.c_str())) _bgatmos->queueSample(*sndDesc); else delete sndDesc; diff --git a/engines/groovie/detection.cpp b/engines/groovie/detection.cpp index 78ecac8dbb..62887bac1e 100644 --- a/engines/groovie/detection.cpp +++ b/engines/groovie/detection.cpp @@ -111,13 +111,27 @@ static const GroovieGameDescription gameDescriptions[] = { kGroovieT7G, 0 }, + { + { + "t7g", "", + { + { "script.grv", 0, "d1b8033b40aa67c076039881eccce90d", 16659}, + { "SeventhGuest", 0, NULL, -1}, + { NULL, 0, NULL, 0} + }, + Common::EN_ANY, Common::kPlatformIOS, ADGF_NO_FLAGS, + Common::GUIO_NOMIDI + }, + kGroovieT7G, 0 + }, + #ifdef ENABLE_GROOVIE2 // The 11th Hour DOS English { { "11h", "", AD_ENTRY1s("disk.1", "5c0428cd3659fc7bbcd0aa16485ed5da", 227), - Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, Common::GUIO_MIDIADLIB | Common::GUIO_MIDIMT32 | Common::GUIO_MIDIGM }, kGroovieV2, 1 @@ -128,7 +142,7 @@ static const GroovieGameDescription gameDescriptions[] = { { "11h", "Demo", AD_ENTRY1s("disk.1", "aacb32ce07e0df2894bd83a3dee40c12", 70), - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, Common::GUIO_NOLAUNCHLOAD | + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, Common::GUIO_NOLAUNCHLOAD | Common::GUIO_MIDIADLIB | Common::GUIO_MIDIMT32 | Common::GUIO_MIDIGM }, kGroovieV2, 1 @@ -139,7 +153,7 @@ static const GroovieGameDescription gameDescriptions[] = { { "11h", "Making Of", AD_ENTRY1s("disk.1", "5c0428cd3659fc7bbcd0aa16485ed5da", 227), - Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS, Common::GUIO_NOMIDI | Common::GUIO_NOLAUNCHLOAD + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, Common::GUIO_NOMIDI | Common::GUIO_NOLAUNCHLOAD }, kGroovieV2, 2 }, @@ -149,7 +163,7 @@ static const GroovieGameDescription gameDescriptions[] = { { "clandestiny", "Trailer", AD_ENTRY1s("disk.1", "5c0428cd3659fc7bbcd0aa16485ed5da", 227), - Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS, Common::GUIO_NOMIDI | Common::GUIO_NOLAUNCHLOAD + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, Common::GUIO_NOMIDI | Common::GUIO_NOLAUNCHLOAD }, kGroovieV2, 3 }, @@ -159,7 +173,7 @@ static const GroovieGameDescription gameDescriptions[] = { { "clandestiny", "", AD_ENTRY1s("disk.1", "f79fc1515174540fef6a34132efc4c53", 76), - Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS, Common::GUIO_NOMIDI + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, Common::GUIO_NOMIDI }, kGroovieV2, 1 }, @@ -169,7 +183,7 @@ static const GroovieGameDescription gameDescriptions[] = { { "unclehenry", "", AD_ENTRY1s("disk.1", "0e1b1d3cecc4fc7efa62a968844d1f7a", 72), - Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS, Common::GUIO_NOMIDI + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, Common::GUIO_NOMIDI }, kGroovieV2, 1 }, @@ -179,7 +193,7 @@ static const GroovieGameDescription gameDescriptions[] = { { "tlc", "", AD_ENTRY1s("disk.1", "32a1afa68478f1f9d2b25eeea427f2e3", 84), - Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS, Common::GUIO_NOMIDI + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, Common::GUIO_NOMIDI }, kGroovieV2, 1 }, @@ -188,35 +202,22 @@ static const GroovieGameDescription gameDescriptions[] = { {AD_TABLE_END_MARKER, kGroovieT7G, 0} }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)gameDescriptions, - // Size of that superset structure - sizeof(GroovieGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - groovieGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "groovie", - // List of files for file-based fallback detection (optional) - 0, - // Flags - kADFlagUseExtraAsHint, - // Additional GUI options (for every game} - Common::GUIO_NOSUBTITLES | Common::GUIO_NOSFX, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - - class GroovieMetaEngine : public AdvancedMetaEngine { public: - GroovieMetaEngine() : AdvancedMetaEngine(detectionParams) {} + GroovieMetaEngine() : AdvancedMetaEngine(gameDescriptions, sizeof(GroovieGameDescription), groovieGames) { + _singleid = "groovie"; + + // Use kADFlagUseExtraAsHint in order to distinguish the 11th hour from + // its "Making of" as well as the Clandestiny Trailer; they all share + // the same MD5. + // TODO: Is this the only reason, or are there others (like the three + // potentially sharing a single directory) ? In the former case, then + // perhaps a better solution would be to add additional files + // to the detection entries. In the latter case, this TODO should be + // replaced with an according explanation. + _flags = kADFlagUseExtraAsHint; + _guioptions = Common::GUIO_NOSUBTITLES | Common::GUIO_NOSFX; + } const char *getName() const { return "Groovie"; diff --git a/engines/groovie/groovie.cpp b/engines/groovie/groovie.cpp index 508049e1a0..5f95de649a 100644 --- a/engines/groovie/groovie.cpp +++ b/engines/groovie/groovie.cpp @@ -54,6 +54,15 @@ GroovieEngine::GroovieEngine(OSystem *syst, const GroovieGameDescription *gd) : SearchMan.addSubDirectoryMatching(gameDataDir, "media"); SearchMan.addSubDirectoryMatching(gameDataDir, "system"); + _modeSpeed = kGroovieSpeedNormal; + if (ConfMan.hasKey("t7g_speed")) { + Common::String speed = ConfMan.get("t7g_speed"); + if (speed.equals("im_an_ios")) + _modeSpeed = kGroovieSpeediOS; + else if (speed.equals("tweaked")) + _modeSpeed = kGroovieSpeedTweaked; + } + // Initialize the custom debug levels DebugMan.addDebugChannel(kGroovieDebugAll, "All", "Debug everything"); DebugMan.addDebugChannel(kGroovieDebugVideo, "Video", "Debug video and audio playback"); @@ -141,10 +150,20 @@ Common::Error GroovieEngine::run() { } // Create the music player - if (getPlatform() == Common::kPlatformMacintosh) + switch (getPlatform()) { + case Common::kPlatformMacintosh: + // TODO: The 11th Hour Mac uses QuickTime MIDI files + // Right now, since the XMIDI are present and it is still detected as + // the DOS version, we don't have to do anything here. _musicPlayer = new MusicPlayerMac(this); - else + break; + case Common::kPlatformIOS: + _musicPlayer = new MusicPlayerIOS(this); + break; + default: _musicPlayer = new MusicPlayerXMI(this, _gameDescription->version == kGroovieT7G ? "fat" : "sample"); + break; + } // Load volume levels syncSoundSettings(); @@ -207,17 +226,19 @@ Common::Error GroovieEngine::run() { _script->directGameLoad(slot); } - // Check that the game files and the audio tracks aren't together run from - // the same cd - checkCD(); - // Game timer counter uint16 tmr = 0; - // Initialize the CD - int cd_num = ConfMan.getInt("cdrom"); - if (cd_num >= 0) - _system->getAudioCDManager()->openCD(cd_num); + // Check that the game files and the audio tracks aren't together run from + // the same cd + if (getPlatform() != Common::kPlatformIOS) { + checkCD(); + + // Initialize the CD + int cd_num = ConfMan.getInt("cdrom"); + if (cd_num >= 0) + _system->getAudioCDManager()->openCD(cd_num); + } while (!shouldQuit()) { // Give the debugger a chance to act @@ -315,11 +336,6 @@ bool GroovieEngine::hasFeature(EngineFeature f) const { (f == kSupportsLoadingDuringRuntime); } -void GroovieEngine::errorString(const char *buf_input, char *buf_output, int buf_output_size) { - //snprintf(buf_output, buf_output_size, "%s%s\n", _script.getContext().c_str(), buf_input); - snprintf(buf_output, buf_output_size, "%s", buf_input); -} - void GroovieEngine::syncSoundSettings() { Engine::syncSoundSettings(); diff --git a/engines/groovie/groovie.h b/engines/groovie/groovie.h index 0ac9c4b956..df2f062757 100644 --- a/engines/groovie/groovie.h +++ b/engines/groovie/groovie.h @@ -72,6 +72,12 @@ enum DebugLevels { // the current limitation is 32 debug levels (1 << 31 is the last one) }; +enum GameSpeed { + kGroovieSpeedNormal, + kGroovieSpeediOS, + kGroovieSpeedTweaked +}; + struct GroovieGameDescription; class GroovieEngine : public Engine { @@ -85,7 +91,6 @@ protected: // Engine APIs Common::Error run(); - virtual void errorString(const char *buf_input, char *buf_output, int buf_output_size); virtual bool hasFeature(EngineFeature f) const; @@ -110,6 +115,8 @@ public: Common::MacResManager *_macResFork; + GameSpeed _modeSpeed; + private: const GroovieGameDescription *_gameDescription; Debugger *_debugger; diff --git a/engines/groovie/music.cpp b/engines/groovie/music.cpp index b8a78d9f56..33fc986193 100644 --- a/engines/groovie/music.cpp +++ b/engines/groovie/music.cpp @@ -31,6 +31,7 @@ #include "common/macresman.h" #include "common/memstream.h" #include "common/textconsole.h" +#include "audio/audiostream.h" #include "audio/midiparser.h" namespace Groovie { @@ -92,6 +93,7 @@ void MusicPlayer::playCD(uint8 track) { } else if ((track == 98) && (_prevCDtrack == 3)) { // Track 98 is used as a hack to stop the credits song g_system->getAudioCDManager()->stop(); + stopCreditsIOS(); return; } @@ -124,6 +126,8 @@ void MusicPlayer::playCD(uint8 track) { playSong((19 << 10) | 36); // XMI.GJD, file 36 } else if (track == 3) { // TODO: Credits MIDI fallback + if (_vm->getPlatform() == Common::kPlatformIOS) + playCreditsIOS(); } } } @@ -224,6 +228,20 @@ void MusicPlayer::unload() { _isPlaying = false; } +void MusicPlayer::playCreditsIOS() { + Audio::AudioStream *stream = Audio::SeekableAudioStream::openStreamFile("7th_Guest_Dolls_from_Hell_OC_ReMix"); + + if (!stream) { + warning("Could not find '7th_Guest_Dolls_from_Hell_OC_ReMix' audio file"); + return; + } + + _vm->_system->getMixer()->playStream(Audio::Mixer::kMusicSoundType, &_handleCreditsIOS, stream); +} + +void MusicPlayer::stopCreditsIOS() { + _vm->_system->getMixer()->stopHandle(_handleCreditsIOS); +} // MusicPlayerMidi @@ -747,4 +765,92 @@ Common::SeekableReadStream *MusicPlayerMac::decompressMidi(Common::SeekableReadS return new Common::MemoryReadStream(output, size, DisposeAfterUse::YES); } +MusicPlayerIOS::MusicPlayerIOS(GroovieEngine *vm) : MusicPlayer(vm) { + vm->getTimerManager()->installTimerProc(&onTimer, 50 * 1000, this); +} + +MusicPlayerIOS::~MusicPlayerIOS() { + _vm->getTimerManager()->removeTimerProc(&onTimer); +} + +void MusicPlayerIOS::updateVolume() { + // Just set the mixer volume for the music sound type + _vm->_system->getMixer()->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, _userVolume * _gameVolume / 100); +} + +void MusicPlayerIOS::unload() { + MusicPlayer::unload(); + + _vm->_system->getMixer()->stopHandle(_handle); +} + +bool MusicPlayerIOS::load(uint32 fileref, bool loop) { + // Find correct filename + ResInfo info; + _vm->_resMan->getResInfo(fileref, info); + uint len = info.filename.size(); + if (len < 4) + return false; // This shouldn't actually occur + /* + 19462 door + 19463 ?? + 19464 ?? + 19465 puzzle? + 19466 cake + 19467 maze + 19468 ambient (but not 69, amb b. odd) + 19470 puzzle + 19471 + 19473 + 19475 coffins or blood pump + 19476 blood pump or coffins + 19493 + 19499 chapel + 19509 downstair ambient + 19510 bedroom 'skip 3 and 5' puzzle (should loop from partway?) + 19514 + 19515 bathroom drain teeth + */ + if ((fileref >= 19462 && fileref <= 19468) || + fileref == 19470 || fileref == 19471 || + fileref == 19473 || fileref == 19475 || + fileref == 19476 || fileref == 19493 || + fileref == 19499 || fileref == 19509 || + fileref == 19510 || fileref == 19514 || + fileref == 19515) + loop = true; // XMIs for these refs self-loop + + // iOS port provides alternative intro sequence music + if (info.filename == "gu39.xmi") { + info.filename = "intro"; + } else if (info.filename == "gu32.xmi") { + info.filename = "foyer"; + } else { + // Remove the extension + info.filename.deleteLastChar(); + info.filename.deleteLastChar(); + info.filename.deleteLastChar(); + info.filename.deleteLastChar(); + } + + // Create the audio stream + Audio::AudioStream *audStream = Audio::SeekableAudioStream::openStreamFile(info.filename); + + if (!audStream) { + warning("Could not play audio file '%s'", info.filename.c_str()); + return false; + } + + // Loop if requested + if (loop) + audStream = Audio::makeLoopingAudioStream((Audio::RewindableAudioStream *)audStream, 0); + + // MIDI player handles volume reset on load, IOS player doesn't - force update here + updateVolume(); + + // Play! + _vm->_system->getMixer()->playStream(Audio::Mixer::kMusicSoundType, &_handle, audStream); + return true; +} + } // End of Groovie namespace diff --git a/engines/groovie/music.h b/engines/groovie/music.h index fa4150a83b..7af482e45d 100644 --- a/engines/groovie/music.h +++ b/engines/groovie/music.h @@ -26,6 +26,7 @@ #include "common/array.h" #include "common/mutex.h" #include "audio/mididrv.h" +#include "audio/mixer.h" class MidiParser; @@ -59,6 +60,11 @@ private: uint16 _backgroundDelay; + // T7G iOS credits mp3 stream + void playCreditsIOS(); + void stopCreditsIOS(); + Audio::SoundHandle _handleCreditsIOS; + // Volume fading uint32 _fadingStartTime; uint16 _fadingStartVolume; @@ -157,6 +163,20 @@ private: Common::SeekableReadStream *decompressMidi(Common::SeekableReadStream *stream); }; +class MusicPlayerIOS : public MusicPlayer { +public: + MusicPlayerIOS(GroovieEngine *vm); + ~MusicPlayerIOS(); + +protected: + void updateVolume(); + bool load(uint32 fileref, bool loop); + void unload(); + +private: + Audio::SoundHandle _handle; +}; + } // End of Groovie namespace #endif // GROOVIE_MUSIC_H diff --git a/engines/groovie/player.cpp b/engines/groovie/player.cpp index 11318d2e94..e2a1ff3d56 100644 --- a/engines/groovie/player.cpp +++ b/engines/groovie/player.cpp @@ -28,18 +28,19 @@ namespace Groovie { VideoPlayer::VideoPlayer(GroovieEngine *vm) : - _vm(vm), _syst(vm->_system), _file(NULL), _audioStream(NULL) { + _vm(vm), _syst(vm->_system), _file(NULL), _audioStream(NULL), _fps(0), _overrideSpeed(false) { } bool VideoPlayer::load(Common::SeekableReadStream *file, uint16 flags) { _file = file; _flags = flags; + _overrideSpeed = false; _audioStream = NULL; - uint16 fps = loadInternal(); + _fps = loadInternal(); - if (fps != 0) { - _millisBetweenFrames = 1000 / fps; + if (_fps != 0) { + setOverrideSpeed(_overrideSpeed); _begunPlaying = false; return true; } else { @@ -48,6 +49,16 @@ bool VideoPlayer::load(Common::SeekableReadStream *file, uint16 flags) { } } +void VideoPlayer::setOverrideSpeed(bool isOverride) { + _overrideSpeed = isOverride; + if (_fps != 0) { + if (isOverride) + _millisBetweenFrames = 1000 / 26; + else + _millisBetweenFrames = 1000 / _fps; + } +} + bool VideoPlayer::playFrame() { bool end = true; diff --git a/engines/groovie/player.h b/engines/groovie/player.h index c6d927f2c0..d8135a99b2 100644 --- a/engines/groovie/player.h +++ b/engines/groovie/player.h @@ -45,15 +45,21 @@ protected: virtual uint16 loadInternal() = 0; virtual bool playFrameInternal() = 0; + void setOverrideSpeed(bool isOverride); + bool getOverrideSpeed() const { return _overrideSpeed; } + GroovieEngine *_vm; OSystem *_syst; Common::SeekableReadStream *_file; uint16 _flags; Audio::QueuingAudioStream *_audioStream; - + + private: // Synchronization stuff bool _begunPlaying; + bool _overrideSpeed; + uint16 _fps; uint16 _millisBetweenFrames; uint32 _lastFrameTime; diff --git a/engines/groovie/resource.cpp b/engines/groovie/resource.cpp index 05359342f8..c26f04d6ee 100644 --- a/engines/groovie/resource.cpp +++ b/engines/groovie/resource.cpp @@ -169,10 +169,12 @@ bool ResMan_t7g::getResInfo(uint32 fileRef, ResInfo &resInfo) { error("Groovie::Resource: Invalid resource number: 0x%04X (%s)", resNum, rlFileName.c_str()); } - // Read the resource name (just for debugging purposes) - char resname[12]; + // Read the resource name + char resname[13]; rlFile->read(resname, 12); + resname[12] = 0; debugC(2, kGroovieDebugResource | kGroovieDebugAll, "Groovie::Resource: Resource name: %12s", resname); + resInfo.filename = resname; // Read the resource information resInfo.offset = rlFile->readUint32LE(); @@ -238,7 +240,7 @@ uint32 ResMan_v2::getRef(Common::String name, Common::String scriptname) { // Test whether it's the resource we're searching Common::String resname(readname, 18); if (resname.hasPrefix(name.c_str())) { - debugC(2, kGroovieDebugResource | kGroovieDebugAll, "Groovie::Resource: Resource %12s matches %s", readname, name.c_str()); + debugC(2, kGroovieDebugResource | kGroovieDebugAll, "Groovie::Resource: Resource %18s matches %s", readname, name.c_str()); found = true; } } @@ -277,10 +279,12 @@ bool ResMan_v2::getResInfo(uint32 fileRef, ResInfo &resInfo) { resInfo.size = rlFile.readUint32LE(); resInfo.gjd = rlFile.readUint16LE(); - // Read the resource name (just for debugging purposes) - char resname[12]; - rlFile.read(resname, 12); - debugC(2, kGroovieDebugResource | kGroovieDebugAll, "Groovie::Resource: Resource name: %12s", resname); + // Read the resource name + char resname[19]; + resname[18] = 0; + rlFile.read(resname, 18); + debugC(2, kGroovieDebugResource | kGroovieDebugAll, "Groovie::Resource: Resource name: %18s", resname); + resInfo.filename = resname; // 6 padding bytes? (it looks like they're always 0) diff --git a/engines/groovie/resource.h b/engines/groovie/resource.h index 2c215917cc..33e15e6b98 100644 --- a/engines/groovie/resource.h +++ b/engines/groovie/resource.h @@ -33,6 +33,7 @@ struct ResInfo { uint16 gjd; uint32 offset; uint32 size; + Common::String filename; }; class ResMan { @@ -40,11 +41,12 @@ public: virtual ~ResMan() {} Common::SeekableReadStream *open(uint32 fileRef); + virtual uint32 getRef(Common::String name, Common::String scriptname = "") = 0; + virtual bool getResInfo(uint32 fileRef, ResInfo &resInfo) = 0; protected: Common::Array<Common::String> _gjds; - virtual bool getResInfo(uint32 fileRef, ResInfo &resInfo) = 0; uint16 _lastGjd; }; diff --git a/engines/groovie/script.cpp b/engines/groovie/script.cpp index 3bd90a042e..f87e6bb91b 100644 --- a/engines/groovie/script.cpp +++ b/engines/groovie/script.cpp @@ -36,6 +36,7 @@ #include "common/events.h" #include "common/file.h" #include "common/macresman.h" +#include "common/translation.h" #include "gui/message.h" @@ -65,8 +66,9 @@ static void debugScript(int level, bool nl, const char *s, ...) { Script::Script(GroovieEngine *vm, EngineVersion version) : _code(NULL), _savedCode(NULL), _stacktop(0), _debugger(NULL), _vm(vm), - _videoFile(NULL), _videoRef(0), _staufsMove(NULL), - _random("GroovieScripts") { + _videoFile(NULL), _videoRef(0), _staufsMove(NULL), _lastCursor(0xff), + _version(version), _random("GroovieScripts") { + // Initialize the opcode set depending on the engine version switch (version) { case kGroovieT7G: @@ -385,6 +387,7 @@ bool Script::hotspot(Common::Rect rect, uint16 address, uint8 cursor) { // If clicked with the mouse, jump to the specified address if (_mouseClicked) { + _lastCursor = cursor; _inputAction = address; } } @@ -411,7 +414,7 @@ void Script::savegame(uint slot) { if (!file) { debugC(9, kGroovieDebugScript, "Save file pointer is null"); - GUI::MessageDialog dialog("Failed to save game", "OK"); + GUI::MessageDialog dialog(_("Failed to save game"), _("OK")); dialog.runModal(); return; } @@ -584,6 +587,10 @@ bool Script::playvideofromref(uint32 fileref) { if (_videoFile) { _videoRef = fileref; + // If teeth cursor, and in main script, mark video prefer low-speed + // filename check as sometimes teeth used for puzzle movements (bishops) + if (_version == kGroovieT7G && _lastCursor == 7 && _scriptFile == "script.grv") + _bitflags |= (1 << 15); _vm->_videoPlayer->load(_videoFile, _bitflags); } else { error("Couldn't open file"); diff --git a/engines/groovie/script.h b/engines/groovie/script.h index 95da96487e..8cd790af5e 100644 --- a/engines/groovie/script.h +++ b/engines/groovie/script.h @@ -72,6 +72,9 @@ private: Common::RandomSource _random; bool _firstbit; + uint8 _lastCursor; + + EngineVersion _version; // Script filename (for debugging purposes) Common::String _scriptFile; diff --git a/engines/groovie/vdx.cpp b/engines/groovie/vdx.cpp index ae1e9eebb3..b3fcf462b2 100644 --- a/engines/groovie/vdx.cpp +++ b/engines/groovie/vdx.cpp @@ -86,6 +86,11 @@ uint16 VDXPlayer::loadInternal() { _flagEight = ((_flags & (1 << 8)) != 0); _flagNine = ((_flags & (1 << 9)) != 0); + // Enable highspeed if we're not obeying fps, and not marked as special + // This will be disabled in chunk audio if we're actually an audio vdx + if ( _vm->_modeSpeed == kGroovieSpeediOS || (_vm->_modeSpeed == kGroovieSpeedTweaked && ((_flags & (1 << 15)) == 0))) + setOverrideSpeed(true); + if (_flagOnePrev && !_flagOne && !_flagEight) { _flagSeven = true; } @@ -522,6 +527,9 @@ void VDXPlayer::decodeBlockDelta(uint32 offset, byte *colors, uint16 imageWidth) } void VDXPlayer::chunkSound(Common::ReadStream *in) { + if (getOverrideSpeed()) + setOverrideSpeed(false); + if (!_audioStream) { _audioStream = Audio::makeQueuingAudioStream(22050, false); Audio::SoundHandle sound_handle; diff --git a/engines/hugo/console.cpp b/engines/hugo/console.cpp index 3d7449e51f..0a67b5cd0a 100644 --- a/engines/hugo/console.cpp +++ b/engines/hugo/console.cpp @@ -22,13 +22,131 @@ #include "hugo/console.h" #include "hugo/hugo.h" +#include "hugo/object.h" +#include "hugo/parser.h" +#include "hugo/schedule.h" +#include "hugo/text.h" namespace Hugo { HugoConsole::HugoConsole(HugoEngine *vm) : GUI::Debugger(), _vm(vm) { + DCmd_Register("listscreens", WRAP_METHOD(HugoConsole, Cmd_listScreens)); + DCmd_Register("listobjects", WRAP_METHOD(HugoConsole, Cmd_listObjects)); + DCmd_Register("getobject", WRAP_METHOD(HugoConsole, Cmd_getObject)); + DCmd_Register("getallobjects", WRAP_METHOD(HugoConsole, Cmd_getAllObjects)); + DCmd_Register("gotoscreen", WRAP_METHOD(HugoConsole, Cmd_gotoScreen)); + DCmd_Register("Boundaries", WRAP_METHOD(HugoConsole, Cmd_boundaries)); } HugoConsole::~HugoConsole() { } +static int strToInt(const char *s) { + if (!*s) + // No string at all + return 0; + else if (toupper(s[strlen(s) - 1]) != 'H') + // Standard decimal string + return atoi(s); + + // Hexadecimal string + uint tmp = 0; + int read = sscanf(s, "%xh", &tmp); + if (read < 1) + error("strToInt failed on string \"%s\"", s); + return (int)tmp; +} + +/** + * This command loads up the specified screen number + */ +bool HugoConsole::Cmd_gotoScreen(int argc, const char **argv) { + if ((argc != 2) || (strToInt(argv[1]) > _vm->_numScreens)){ + DebugPrintf("Usage: %s <screen number>\n", argv[0]); + return true; + } + + _vm->_scheduler->newScreen(strToInt(argv[1])); + return false; +} + +/** + * This command lists all the screens available + */ +bool HugoConsole::Cmd_listScreens(int argc, const char **argv) { + if (argc != 1) { + DebugPrintf("Usage: %s\n", argv[0]); + return true; + } + + DebugPrintf("Available screens for this game are:\n"); + for (int i = 0; i < _vm->_numScreens; i++) + DebugPrintf("%2d - %s\n", i, _vm->_text->getScreenNames(i)); + return true; +} + +/** + * This command lists all the objects available + */ +bool HugoConsole::Cmd_listObjects(int argc, const char **argv) { + if (argc != 1) { + DebugPrintf("Usage: %s\n", argv[0]); + return true; + } + + DebugPrintf("Available objects for this game are:\n"); + for (int i = 0; i < _vm->_object->_numObj; i++) { + if (_vm->_object->_objects[i].genericCmd & TAKE) + DebugPrintf("%2d - %s\n", i, _vm->_text->getNoun(_vm->_object->_objects[i].nounIndex, 2)); + } + return true; +} + +/** + * This command puts an object in the inventory + */ +bool HugoConsole::Cmd_getObject(int argc, const char **argv) { + if ((argc != 2) || (strToInt(argv[1]) > _vm->_object->_numObj)) { + DebugPrintf("Usage: %s <object number>\n", argv[0]); + return true; + } + + if (_vm->_object->_objects[strToInt(argv[1])].genericCmd & TAKE) + _vm->_parser->takeObject(&_vm->_object->_objects[strToInt(argv[1])]); + else + DebugPrintf("Object not available\n"); + + return true; +} + +/** + * This command puts all the available objects in the inventory + */ +bool HugoConsole::Cmd_getAllObjects(int argc, const char **argv) { + if (argc != 1) { + DebugPrintf("Usage: %s\n", argv[0]); + return true; + } + + for (int i = 0; i < _vm->_object->_numObj; i++) { + if (_vm->_object->_objects[i].genericCmd & TAKE) + _vm->_parser->takeObject(&_vm->_object->_objects[i]); + } + + return false; +} + +/** + * This command shows and hides boundaries + */ +bool HugoConsole::Cmd_boundaries(int argc, const char **argv) { + if (argc != 1) { + DebugPrintf("Usage: %s\n", argv[0]); + return true; + } + + _vm->getGameStatus().showBoundariesFl = !_vm->getGameStatus().showBoundariesFl; + return false; +} + } // End of namespace Hugo diff --git a/engines/hugo/console.h b/engines/hugo/console.h index 4743b791f3..16317e83d5 100644 --- a/engines/hugo/console.h +++ b/engines/hugo/console.h @@ -36,6 +36,12 @@ public: private: HugoEngine *_vm; + bool Cmd_listScreens(int argc, const char **argv); + bool Cmd_listObjects(int argc, const char **argv); + bool Cmd_getObject(int argc, const char **argv); + bool Cmd_getAllObjects(int argc, const char **argv); + bool Cmd_gotoScreen(int argc, const char **argv); + bool Cmd_boundaries(int argc, const char **argv); }; } // End of namespace Hugo diff --git a/engines/hugo/detection.cpp b/engines/hugo/detection.cpp index 25b8b16084..f70a21aa8f 100644 --- a/engines/hugo/detection.cpp +++ b/engines/hugo/detection.cpp @@ -131,34 +131,10 @@ static const HugoGameDescription gameDescriptions[] = { {AD_TABLE_END_MARKER, kGameTypeNone} }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)gameDescriptions, - // Size of that superset structure - sizeof(HugoGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - hugoGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - 0, - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NONE, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class HugoMetaEngine : public AdvancedMetaEngine { public: - HugoMetaEngine() : AdvancedMetaEngine(detectionParams) {} + HugoMetaEngine() : AdvancedMetaEngine(gameDescriptions, sizeof(HugoGameDescription), hugoGames) { + } const char *getName() const { return "Hugo"; diff --git a/engines/hugo/display.cpp b/engines/hugo/display.cpp index c731b23e59..c716e80d87 100644 --- a/engines/hugo/display.cpp +++ b/engines/hugo/display.cpp @@ -644,13 +644,13 @@ bool Screen::isOverlapping(const rect_t *rectA, const rect_t *rectB) const { } /** - * Display active boundaries in God Mode ('PPG') + * Display active boundaries (activated in the console) * Light Red = Exit hotspots * Light Green = Visible objects - * White = Fixed objects, parts of background + * White = Fix objects, parts of background */ void Screen::drawBoundaries() { - if (!_vm->getGameStatus().godModeFl) + if (!_vm->getGameStatus().showBoundariesFl) return; _vm->_mouse->drawHotspots(); diff --git a/engines/hugo/hugo.cpp b/engines/hugo/hugo.cpp index 7d35aec972..10d61f25a2 100644 --- a/engines/hugo/hugo.cpp +++ b/engines/hugo/hugo.cpp @@ -130,7 +130,7 @@ void HugoEngine::setMaxScore(const int newScore) { _maxscore = newScore; } -Common::Error HugoEngine::saveGameState(int slot, const char *desc) { +Common::Error HugoEngine::saveGameState(int slot, const Common::String &desc) { return (_file->saveGame(slot, desc) ? Common::kWritingFailed : Common::kNoError); } @@ -527,15 +527,16 @@ void HugoEngine::initPlaylist(bool playlist[kMaxTunes]) { */ void HugoEngine::initStatus() { debugC(1, kDebugEngine, "initStatus"); - _status.storyModeFl = false; // Not in story mode - _status.gameOverFl = false; // Hero not knobbled yet - _status.lookFl = false; // Toolbar "look" button - _status.recallFl = false; // Toolbar "recall" button - _status.newScreenFl = false; // Screen not just loaded - _status.godModeFl = false; // No special cheats allowed - _status.doQuitFl = false; - _status.skipIntroFl = false; - _status.helpFl = false; + _status.storyModeFl = false; // Not in story mode + _status.gameOverFl = false; // Hero not knobbled yet + _status.lookFl = false; // Toolbar "look" button + _status.recallFl = false; // Toolbar "recall" button + _status.newScreenFl = false; // Screen not just loaded + _status.godModeFl = false; // No special cheats allowed + _status.showBoundariesFl = false; // Boundaries hidden by default + _status.doQuitFl = false; + _status.skipIntroFl = false; + _status.helpFl = false; // Initialize every start of new game _status.tick = 0; // Tick count @@ -593,7 +594,7 @@ void HugoEngine::initialize() { _scheduler->initEventQueue(); // Init scheduler stuff _screen->initDisplay(); // Create Dibs and palette _file->openDatabaseFiles(); // Open database files - calcMaxScore(); // Initialise maxscore + calcMaxScore(); // Initialize maxscore _rnd = new Common::RandomSource("hugo"); _rnd->setSeed(42); // Kick random number generator diff --git a/engines/hugo/hugo.h b/engines/hugo/hugo.h index 61b002a2ee..81d194f1d6 100644 --- a/engines/hugo/hugo.h +++ b/engines/hugo/hugo.h @@ -177,6 +177,8 @@ struct status_t { // Game status (not saved) bool recallFl; // Toolbar "recall" button pressed bool newScreenFl; // New screen just loaded in dib_a bool godModeFl; // Allow DEBUG features in live version + bool showBoundariesFl; // Flag used to show and hide boundaries, + // used by the console bool doQuitFl; bool skipIntroFl; bool helpFl; @@ -299,7 +301,7 @@ public: void adjustScore(const int adjustment); int getMaxScore() const; void setMaxScore(const int newScore); - Common::Error saveGameState(int slot, const char *desc); + Common::Error saveGameState(int slot, const Common::String &desc); Common::Error loadGameState(int slot); bool hasFeature(EngineFeature f) const; const char *getCopyrightString() const; diff --git a/engines/hugo/object_v1d.cpp b/engines/hugo/object_v1d.cpp index 297a856203..ecdbb3b4c6 100644 --- a/engines/hugo/object_v1d.cpp +++ b/engines/hugo/object_v1d.cpp @@ -58,7 +58,7 @@ ObjectHandler_v1d::~ObjectHandler_v1d() { void ObjectHandler_v1d::updateImages() { debugC(5, kDebugObject, "updateImages"); - // Initialise the index array to visible objects in current screen + // Initialize the index array to visible objects in current screen int num_objs = 0; byte objindex[kMaxObjNumb]; // Array of indeces to objects diff --git a/engines/hugo/object_v1w.cpp b/engines/hugo/object_v1w.cpp index 098acdf367..11c09176e5 100644 --- a/engines/hugo/object_v1w.cpp +++ b/engines/hugo/object_v1w.cpp @@ -58,7 +58,7 @@ ObjectHandler_v1w::~ObjectHandler_v1w() { void ObjectHandler_v1w::updateImages() { debugC(5, kDebugObject, "updateImages"); - // Initialise the index array to visible objects in current screen + // Initialize the index array to visible objects in current screen int num_objs = 0; byte objindex[kMaxObjNumb]; // Array of indeces to objects diff --git a/engines/hugo/object_v2d.cpp b/engines/hugo/object_v2d.cpp index 3a98885ebe..c9e5104972 100644 --- a/engines/hugo/object_v2d.cpp +++ b/engines/hugo/object_v2d.cpp @@ -58,7 +58,7 @@ ObjectHandler_v2d::~ObjectHandler_v2d() { void ObjectHandler_v2d::updateImages() { debugC(5, kDebugObject, "updateImages"); - // Initialise the index array to visible objects in current screen + // Initialize the index array to visible objects in current screen int num_objs = 0; byte objindex[kMaxObjNumb]; // Array of indeces to objects diff --git a/engines/hugo/parser.cpp b/engines/hugo/parser.cpp index 4a53d67377..a79ec2c609 100644 --- a/engines/hugo/parser.cpp +++ b/engines/hugo/parser.cpp @@ -391,6 +391,8 @@ void Parser::command(const char *format, ...) { va_list marker; va_start(marker, format); +// TODO: +// _vm->_line = Common::String::vformat(format, marker); vsprintf(_vm->_line, format, marker); va_end(marker); diff --git a/engines/hugo/parser.h b/engines/hugo/parser.h index 6ad2b38234..faa6dc2303 100644 --- a/engines/hugo/parser.h +++ b/engines/hugo/parser.h @@ -97,6 +97,7 @@ public: virtual void lineHandler() = 0; virtual void showInventory() const = 0; + virtual void takeObject(object_t *obj) = 0; protected: HugoEngine *_vm; @@ -135,10 +136,10 @@ public: virtual void lineHandler(); virtual void showInventory() const; + virtual void takeObject(object_t *obj); protected: - virtual void dropObject(object_t *obj); - virtual void takeObject(object_t *obj); + virtual void dropObject(object_t *obj); const char *findNextNoun(const char *noun) const; bool isBackgroundWord_v1(const char *noun, const char *verb, objectList_t obj) const; diff --git a/engines/hugo/schedule.cpp b/engines/hugo/schedule.cpp index 7e66f34af2..a099bec21c 100644 --- a/engines/hugo/schedule.cpp +++ b/engines/hugo/schedule.cpp @@ -61,7 +61,7 @@ void Scheduler::initCypher() { } /** - * Initialise the timer event queue + * Initialize the timer event queue */ void Scheduler::initEventQueue() { debugC(1, kDebugSchedule, "initEventQueue"); @@ -159,7 +159,7 @@ void Scheduler::processBonus(const int bonusIndex) { * 2. Set the new screen (in the hero object and any carried objects) * 3. Read in the screen files for the new screen * 4. Schedule action list for new screen - * 5. Initialise prompt line and status line + * 5. Initialize prompt line and status line */ void Scheduler::newScreen(const int screenIndex) { debugC(1, kDebugSchedule, "newScreen(%d)", screenIndex); @@ -193,7 +193,7 @@ void Scheduler::newScreen(const int screenIndex) { // 4. Schedule action list for this screen _vm->_scheduler->screenActions(screenIndex); - // 5. Initialise prompt line and status line + // 5. Initialize prompt line and status line _vm->_screen->initNewScreenDisplay(); } @@ -201,7 +201,7 @@ void Scheduler::newScreen(const int screenIndex) { * Transition to a new screen as follows: * 1. Set the new screen (in the hero object and any carried objects) * 2. Read in the screen files for the new screen - * 3. Initialise prompt line and status line + * 3. Initialize prompt line and status line */ void Scheduler::restoreScreen(const int screenIndex) { debugC(1, kDebugSchedule, "restoreScreen(%d)", screenIndex); @@ -212,7 +212,7 @@ void Scheduler::restoreScreen(const int screenIndex) { // 2. Read in new screen files _vm->readScreenFiles(screenIndex); - // 3. Initialise prompt line and status line + // 3. Initialize prompt line and status line _vm->_screen->initNewScreenDisplay(); } @@ -1135,7 +1135,7 @@ void Scheduler::restoreEvents(Common::ReadStream *f) { void Scheduler::insertAction(act *action) { debugC(1, kDebugSchedule, "insertAction() - Action type A%d", action->a0.actType); - // First, get and initialise the event structure + // First, get and initialize the event structure event_t *curEvent = getQueue(); curEvent->action = action; switch (action->a0.actType) { // Assign whether local or global @@ -1208,7 +1208,7 @@ event_t *Scheduler::doAction(event_t *curEvent) { _vm->_object->_objects[action->a1.objIndex].cycleNumb = action->a1.cycleNumb; _vm->_object->_objects[action->a1.objIndex].cycling = action->a1.cycle; break; - case INIT_OBJXY: // act2: Initialise an object + case INIT_OBJXY: // act2: Initialize an object _vm->_object->_objects[action->a2.objIndex].x = action->a2.x; // Coordinates _vm->_object->_objects[action->a2.objIndex].y = action->a2.y; break; @@ -1218,13 +1218,13 @@ event_t *Scheduler::doAction(event_t *curEvent) { case BKGD_COLOR: // act4: Set new background color _vm->_screen->setBackgroundColor(action->a4.newBackgroundColor); break; - case INIT_OBJVXY: // act5: Initialise an object velocity + case INIT_OBJVXY: // act5: Initialize an object velocity _vm->_object->setVelocity(action->a5.objIndex, action->a5.vx, action->a5.vy); break; - case INIT_CARRY: // act6: Initialise an object + case INIT_CARRY: // act6: Initialize an object _vm->_object->setCarry(action->a6.objIndex, action->a6.carriedFl); // carried status break; - case INIT_HF_COORD: // act7: Initialise an object to hero's "feet" coords + case INIT_HF_COORD: // act7: Initialize an object to hero's "feet" coords _vm->_object->_objects[action->a7.objIndex].x = _vm->_hero->x - 1; _vm->_object->_objects[action->a7.objIndex].y = _vm->_hero->y + _vm->_hero->currImagePtr->y2 - 1; _vm->_object->_objects[action->a7.objIndex].screenIndex = *_vm->_screen_p; // Don't forget screen! @@ -1232,10 +1232,10 @@ event_t *Scheduler::doAction(event_t *curEvent) { case NEW_SCREEN: // act8: Start new screen newScreen(action->a8.screenIndex); break; - case INIT_OBJSTATE: // act9: Initialise an object state + case INIT_OBJSTATE: // act9: Initialize an object state _vm->_object->_objects[action->a9.objIndex].state = action->a9.newState; break; - case INIT_PATH: // act10: Initialise an object path and velocity + case INIT_PATH: // act10: Initialize an object path and velocity _vm->_object->setPath(action->a10.objIndex, (path_t) action->a10.newPathType, action->a10.vxPath, action->a10.vyPath); break; case COND_R: // act11: action lists conditional on object state @@ -1284,7 +1284,7 @@ event_t *Scheduler::doAction(event_t *curEvent) { // any objects are to be made invisible! gameStatus.gameOverFl = true; break; - case INIT_HH_COORD: // act22: Initialise an object to hero's actual coords + case INIT_HH_COORD: // act22: Initialize an object to hero's actual coords _vm->_object->_objects[action->a22.objIndex].x = _vm->_hero->x; _vm->_object->_objects[action->a22.objIndex].y = _vm->_hero->y; _vm->_object->_objects[action->a22.objIndex].screenIndex = *_vm->_screen_p;// Don't forget screen! diff --git a/engines/hugo/schedule.h b/engines/hugo/schedule.h index 003974f2fa..e3107809cf 100644 --- a/engines/hugo/schedule.h +++ b/engines/hugo/schedule.h @@ -73,7 +73,7 @@ enum action_t { // Parameters: INIT_MAZE, // 30 - Start special maze hotspot processing EXIT_MAZE, // 31 - Exit special maze processing INIT_PRIORITY, // 32 - Initialize fbg field - INIT_SCREEN, // 33 - Initialise screen field of object + INIT_SCREEN, // 33 - Initialize screen field of object AGSCHEDULE, // 34 - Global schedule - lasts over new screen REMAPPAL, // 35 - Remappe palette - palette index, color COND_NOUN, // 36 - Conditional on noun appearing in line @@ -106,7 +106,7 @@ struct act1 { // Type 1 - Start an object cycle_t cycle; // Direction to start cycling }; -struct act2 { // Type 2 - Initialise an object coords +struct act2 { // Type 2 - Initialize an object coords action_t actType; // The type of action int timer; // Time to set off the action int objIndex; // The object number @@ -129,21 +129,21 @@ struct act4 { // Type 4 - Set new backgrou long newBackgroundColor; // New color }; -struct act5 { // Type 5 - Initialise an object velocity +struct act5 { // Type 5 - Initialize an object velocity action_t actType; // The type of action int timer; // Time to set off the action int objIndex; // The object number int vx, vy; // velocity }; -struct act6 { // Type 6 - Initialise an object carrying +struct act6 { // Type 6 - Initialize an object carrying action_t actType; // The type of action int timer; // Time to set off the action int objIndex; // The object number bool carriedFl; // carrying }; -struct act7 { // Type 7 - Initialise an object to hero's coords +struct act7 { // Type 7 - Initialize an object to hero's coords action_t actType; // The type of action int timer; // Time to set off the action int objIndex; // The object number @@ -155,14 +155,14 @@ struct act8 { // Type 8 - switch to new sc int screenIndex; // The new screen number }; -struct act9 { // Type 9 - Initialise an object state +struct act9 { // Type 9 - Initialize an object state action_t actType; // The type of action int timer; // Time to set off the action int objIndex; // The object number byte newState; // New state }; -struct act10 { // Type 10 - Initialise an object path type +struct act10 { // Type 10 - Initialize an object path type action_t actType; // The type of action int timer; // Time to set off the action int objIndex; // The object number @@ -251,7 +251,7 @@ struct act21 { // Type 21 - Gameover. Disa int timer; // Time to set off the action }; -struct act22 { // Type 22 - Initialise an object to hero's coords +struct act22 { // Type 22 - Initialize an object to hero's coords action_t actType; // The type of action int timer; // Time to set off the action int objIndex; // The object number diff --git a/engines/kyra/animator_mr.cpp b/engines/kyra/animator_mr.cpp index 6db2e45b0e..84bda3f3fd 100644 --- a/engines/kyra/animator_mr.cpp +++ b/engines/kyra/animator_mr.cpp @@ -449,11 +449,10 @@ void KyraEngine_MR::showIdleAnim() { "A", "R", "R", "FR", "FX", "FL", "L", "L" }; - char filename[14]; - snprintf(filename, 14, "MI0%s%.02d.EMC", facingTable[_mainCharacter.facing], _characterShapeFile); + Common::String filename = Common::String::format( "MI0%s%.02d.EMC", facingTable[_mainCharacter.facing], _characterShapeFile); - if (_res->exists(filename)) - runAnimationScript(filename, 1, 1, 1, 1); + if (_res->exists(filename.c_str())) + runAnimationScript(filename.c_str(), 1, 1, 1, 1); } _nextIdleType = !_nextIdleType; diff --git a/engines/kyra/detection.cpp b/engines/kyra/detection.cpp index 47a086e08c..a6af584fb8 100644 --- a/engines/kyra/detection.cpp +++ b/engines/kyra/detection.cpp @@ -47,37 +47,15 @@ const char * const directoryGlobs[] = { 0 }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)adGameDescs, - // Size of that superset structure - sizeof(KYRAGameDescription), - // Number of bytes to compute MD5 sum for - 1024 * 1024, - // List of all engine targets - gameList, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - 0, - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NONE, - // Maximum directory depth - 2, - // List of directory globs - directoryGlobs -}; - } // End of anonymous namespace class KyraMetaEngine : public AdvancedMetaEngine { public: - KyraMetaEngine() : AdvancedMetaEngine(detectionParams) {} - + KyraMetaEngine() : AdvancedMetaEngine(adGameDescs, sizeof(KYRAGameDescription), gameList) { + _md5Bytes = 1024 * 1024; + _maxScanDepth = 2; + _directoryGlobs = directoryGlobs; + } const char *getName() const { return "Kyra"; } diff --git a/engines/kyra/detection_tables.h b/engines/kyra/detection_tables.h index 8a948eff00..47a3c4362a 100644 --- a/engines/kyra/detection_tables.h +++ b/engines/kyra/detection_tables.h @@ -47,6 +47,7 @@ namespace { #define KYRA3_CD_FAN_FLAGS(x, y) FLAGS_FAN(x, y, false, false, true, false, false, true, false, Kyra::GI_KYRA3) #define LOL_CD_FLAGS FLAGS(false, false, true, false, false, false, false, Kyra::GI_LOL) +#define LOL_CD_FAN_FLAGS(x, y) FLAGS_FAN(x, y, false, false, true, false, false, false, false, Kyra::GI_LOL) #define LOL_FLOPPY_FLAGS FLAGS(false, false, false, false, false, false, false, Kyra::GI_LOL) #define LOL_FLOPPY_CMP_FLAGS FLAGS(false, false, false, false, false, false, true, Kyra::GI_LOL) #define LOL_PC98_SJIS_FLAGS FLAGS(false, false, false, true, true, false, false, Kyra::GI_LOL) @@ -1056,6 +1057,109 @@ const KYRAGameDescription adGameDescs[] = { LOL_CD_FLAGS }, + // Italian fan translation + { + { + "lol", + "CD", + { + { "GENERAL.PAK", 0, "05a4f588fb81dc9c0ef1f2ec20d89e24", -1 }, + { "L01.PAK", 0, "898485c0eb7bb4403fdd63bf5191f37e", -1 }, + { 0, 0, 0, 0 } + }, + Common::IT_ITA, + Common::kPlatformPC, + ADGF_DROPLANGUAGE | ADGF_CD, + Common::GUIO_MIDIADLIB | Common::GUIO_MIDIMT32 | Common::GUIO_MIDIGM | Common::GUIO_MIDIPCSPK + }, + LOL_CD_FAN_FLAGS(Common::IT_ITA, Common::EN_ANY) + }, + + { + { + "lol", + "CD", + { + { "GENERAL.PAK", 0, "05a4f588fb81dc9c0ef1f2ec20d89e24", -1 }, + { "L01.PAK", 0, "898485c0eb7bb4403fdd63bf5191f37e", -1 }, + { 0, 0, 0, 0 } + }, + Common::DE_DEU, + Common::kPlatformPC, + ADGF_DROPLANGUAGE | ADGF_CD, + Common::GUIO_MIDIADLIB | Common::GUIO_MIDIMT32 | Common::GUIO_MIDIGM | Common::GUIO_MIDIPCSPK + }, + LOL_CD_FAN_FLAGS(Common::IT_ITA, Common::EN_ANY) + }, + + { + { + "lol", + "CD", + { + { "GENERAL.PAK", 0, "05a4f588fb81dc9c0ef1f2ec20d89e24", -1 }, + { "L01.PAK", 0, "898485c0eb7bb4403fdd63bf5191f37e", -1 }, + { 0, 0, 0, 0 } + }, + Common::FR_FRA, + Common::kPlatformPC, + ADGF_DROPLANGUAGE | ADGF_CD, + Common::GUIO_MIDIADLIB | Common::GUIO_MIDIMT32 | Common::GUIO_MIDIGM | Common::GUIO_MIDIPCSPK + }, + LOL_CD_FAN_FLAGS(Common::IT_ITA, Common::EN_ANY) + }, + + { + { + "lol", + "CD", + { + { "GENERAL.PAK", 0, "9e4bab499b7ea9337b91ac29fcba6d13", -1 }, + { "L01.PAK", 0, "898485c0eb7bb4403fdd63bf5191f37e", -1 }, + { 0, 0, 0, 0 } + }, + Common::IT_ITA, + Common::kPlatformPC, + ADGF_DROPLANGUAGE | ADGF_CD, + Common::GUIO_MIDIADLIB | Common::GUIO_MIDIMT32 | Common::GUIO_MIDIGM | Common::GUIO_MIDIPCSPK + }, + LOL_CD_FAN_FLAGS(Common::IT_ITA, Common::EN_ANY) + }, + + { + { + "lol", + "CD", + { + { "GENERAL.PAK", 0, "9e4bab499b7ea9337b91ac29fcba6d13", -1 }, + { "L01.PAK", 0, "898485c0eb7bb4403fdd63bf5191f37e", -1 }, + { 0, 0, 0, 0 } + }, + Common::DE_DEU, + Common::kPlatformPC, + ADGF_DROPLANGUAGE | ADGF_CD, + Common::GUIO_MIDIADLIB | Common::GUIO_MIDIMT32 | Common::GUIO_MIDIGM | Common::GUIO_MIDIPCSPK + }, + LOL_CD_FAN_FLAGS(Common::IT_ITA, Common::EN_ANY) + }, + + { + { + "lol", + "CD", + { + { "GENERAL.PAK", 0, "9e4bab499b7ea9337b91ac29fcba6d13", -1 }, + { "L01.PAK", 0, "898485c0eb7bb4403fdd63bf5191f37e", -1 }, + { 0, 0, 0, 0 } + }, + Common::FR_FRA, + Common::kPlatformPC, + ADGF_DROPLANGUAGE | ADGF_CD, + Common::GUIO_MIDIADLIB | Common::GUIO_MIDIMT32 | Common::GUIO_MIDIGM | Common::GUIO_MIDIPCSPK + }, + LOL_CD_FAN_FLAGS(Common::IT_ITA, Common::EN_ANY) + }, + { { "lol", @@ -1222,7 +1326,6 @@ const KYRAGameDescription adGameDescs[] = { LOL_KYRA2_DEMO_FLAGS }, #endif // ENABLE_LOL - { AD_TABLE_END_MARKER, FLAGS(0, 0, 0, 0, 0, 0, 0, 0) } }; diff --git a/engines/kyra/gui.cpp b/engines/kyra/gui.cpp index b9477c950a..f58ca0117c 100644 --- a/engines/kyra/gui.cpp +++ b/engines/kyra/gui.cpp @@ -643,32 +643,31 @@ void MainMenu::printString(const char *format, int x, int y, int col1, int col2, if (!format) return; - char string[512]; va_list vaList; va_start(vaList, flags); - vsprintf(string, format, vaList); + Common::String string = Common::String::vformat(format, vaList); va_end(vaList); if (flags & 1) - x -= _screen->getTextWidth(string) >> 1; + x -= _screen->getTextWidth(string.c_str()) >> 1; if (flags & 2) - x -= _screen->getTextWidth(string); + x -= _screen->getTextWidth(string.c_str()); if (_vm->gameFlags().use16ColorMode) flags &= 3; if (flags & 4) { - _screen->printText(string, x - 1, y, _static.altColor, col2); - _screen->printText(string, x, y + 1, _static.altColor, col2); + _screen->printText(string.c_str(), x - 1, y, _static.altColor, col2); + _screen->printText(string.c_str(), x, y + 1, _static.altColor, col2); } if (flags & 8) { - _screen->printText(string, x - 1, y, 227, col2); - _screen->printText(string, x, y + 1, 227, col2); + _screen->printText(string.c_str(), x - 1, y, 227, col2); + _screen->printText(string.c_str(), x, y + 1, 227, col2); } - _screen->printText(string, x, y, col1, col2); + _screen->printText(string.c_str(), x, y, col1, col2); } } // End of namespace Kyra diff --git a/engines/kyra/gui_lol.cpp b/engines/kyra/gui_lol.cpp index 4c4dc50503..fb11040168 100644 --- a/engines/kyra/gui_lol.cpp +++ b/engines/kyra/gui_lol.cpp @@ -2806,15 +2806,18 @@ int GUI_LoL::clickedOptionsMenu(Button *button) { case 0xfff3: _vm->_configVoice ^= 3; break; - case 0x4072: - char filename[13]; - snprintf(filename, sizeof(filename), "LEVEL%02d.%s", _vm->_currentLevel, _vm->_languageExt[_vm->_lang]); + case 0x4072: { + Common::String filename; + filename = Common::String::format("LEVEL%02d.%s", _vm->_currentLevel, _vm->_languageExt[_vm->_lang]); delete[] _vm->_levelLangFile; - _vm->_levelLangFile = _vm->resource()->fileData(filename, 0); - snprintf(filename, sizeof(filename), "LANDS.%s", _vm->_languageExt[_vm->_lang]); + _vm->_levelLangFile = _vm->resource()->fileData(filename.c_str(), 0); + filename = Common::String::format("LANDS.%s", _vm->_languageExt[_vm->_lang]); delete[] _vm->_landsFile; - _vm->_landsFile = _vm->resource()->fileData(filename, 0); + _vm->_landsFile = _vm->resource()->fileData(filename.c_str(), 0); _newMenu = _lastMenu; + } break; + default: + // TODO: Is there anything we should do if we hit this case? break; } diff --git a/engines/kyra/gui_mr.cpp b/engines/kyra/gui_mr.cpp index 25a77c6cc8..32eb02e06d 100644 --- a/engines/kyra/gui_mr.cpp +++ b/engines/kyra/gui_mr.cpp @@ -717,25 +717,25 @@ void KyraEngine_MR::showAlbum() { } void KyraEngine_MR::loadAlbumPage() { - char filename[16]; + Common::String filename; int num = _album.curPage / 2; if (num == 0) { - strcpy(filename, "ALBUM0.CPS"); + filename = "ALBUM0.CPS"; } else if (num >= 1 && num <= 6) { --num; num %= 2; - snprintf(filename, 16, "ALBUM%d.CPS", num+1); + filename = Common::String::format("ALBUM%d.CPS", num+1); } else { - strcpy(filename, "ALBUM3.CPS"); + filename = "ALBUM3.CPS"; } _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 4, Screen::CR_NO_P_CHECK); - _screen->loadBitmap(filename, 3, 3, 0); + _screen->loadBitmap(filename.c_str(), 3, 3, 0); } void KyraEngine_MR::loadAlbumPageWSA() { - char filename[16]; + Common::String filename; _album.leftPage.curFrame = 0; _album.leftPage.maxFrame = 0; @@ -746,14 +746,14 @@ void KyraEngine_MR::loadAlbumPageWSA() { _album.rightPage.wsa->close(); if (_album.curPage) { - snprintf(filename, 16, "PAGE%x.WSA", _album.curPage); - _album.leftPage.wsa->open(filename, 1, 0); + filename = Common::String::format("PAGE%x.WSA", _album.curPage); + _album.leftPage.wsa->open(filename.c_str(), 1, 0); _album.leftPage.maxFrame = _album.leftPage.wsa->frames()-1; } if (_album.curPage != 14) { - snprintf(filename, 16, "PAGE%x.WSA", _album.curPage+1); - _album.rightPage.wsa->open(filename, 1, 0); + filename = Common::String::format("PAGE%x.WSA", _album.curPage+1); + _album.rightPage.wsa->open(filename.c_str(), 1, 0); _album.rightPage.maxFrame = _album.leftPage.wsa->frames()-1; } } diff --git a/engines/kyra/items_lol.cpp b/engines/kyra/items_lol.cpp index b6388604f5..2cf2cb2c70 100644 --- a/engines/kyra/items_lol.cpp +++ b/engines/kyra/items_lol.cpp @@ -396,20 +396,20 @@ bool LoLEngine::launchObject(int objectType, Item item, int startX, int startY, return true; } -void LoLEngine::endObjectFlight(FlyingObject *t, int x, int y, int objectOnNextBlock) { +void LoLEngine::endObjectFlight(FlyingObject *t, int x, int y, int collisionObject) { int cx = x; int cy = y; uint16 block = calcBlockIndex(t->x, t->y); removeAssignedObjectFromBlock(&_levelBlockProperties[block], t->item); removeDrawObjectFromBlock(&_levelBlockProperties[block], t->item); - if (objectOnNextBlock == 1) { + if (collisionObject == 1) { cx = t->x; cy = t->y; } if (t->objectType == 0 || t->objectType == 1) { - objectFlightProcessHits(t, cx, cy, objectOnNextBlock); + objectFlightProcessHits(t, cx, cy, collisionObject); t->x = (cx & 0xffc0) | 0x40; t->y = (cy & 0xffc0) | 0x40; t->flyingHeight = 0; @@ -481,8 +481,24 @@ void LoLEngine::updateFlyingObject(FlyingObject *t) { int x = 0; int y = 0; getNextStepCoords(t->x, t->y, x, y, t->direction); - // WORKAROUND: The next line seems to be bugged in the original code. I have fixed it in a way that at least seems to work fine. - int objectOnNextBlock = checkBlockBeforeObjectPlacement(x, y, _itemProperties[_itemsInPlay[t->item].itemPropertyIndex].flags & 0x4000 ? 127 : 63, t->flags, t->wallFlags); + /* WORKAROUND: + Large fireballs cast by the "birds" in white tower level 2 and by the "wraith knights" in castle cimmeria + level 1 (or possible other objects with flag 0x4000) could not fly through corridors in ScummVM and would + be terminated prematurely. The original code (all versions) involuntarily circumvents this via a bug in the + next line of code. + The original checks for _itemProperties[t->item].flags instead of _itemProperties[_itemsInPlay[t->item].itemPropertyIndex].flags. + This leads to more or less unpredictable object widths. The large fireballs will usually get a width of 63 + instead of 256 making them work just fine in the original. + + I have fixed this by setting an object width of 63 of here. This produces results faithful to the original + at least. + + Other methods of working around this issue don't make too much sense. An object with a width of 256 + could never fly through corridors, since 256 is also the width of a block. Aligning the fireballs to the + middle of a block (or making the monsters align to the middle before casting them) wouldn't help here + (and wouldn't be faithful to the original either). + */ + int objectOnNextBlock = checkBlockBeforeObjectPlacement(x, y, /*_itemProperties[_itemsInPlay[t->item].itemPropertyIndex].flags & 0x4000 ? 256 :*/ 63, t->flags, t->wallFlags); if (objectOnNextBlock) { endObjectFlight(t, x, y, objectOnNextBlock); } else { diff --git a/engines/kyra/kyra_mr.cpp b/engines/kyra/kyra_mr.cpp index 4ce5c5b2cf..973ab25088 100644 --- a/engines/kyra/kyra_mr.cpp +++ b/engines/kyra/kyra_mr.cpp @@ -366,10 +366,9 @@ void KyraEngine_MR::uninitMainMenu() { void KyraEngine_MR::playVQA(const char *name) { VQAMovie vqa(this, _system); - char filename[20]; - snprintf(filename, sizeof(filename), "%s%d.VQA", name, _configVQAQuality); + Common::String filename = Common::String::format("%s%d.VQA", name, _configVQAQuality); - if (vqa.open(filename)) { + if (vqa.open(filename.c_str())) { for (int i = 0; i < 4; ++i) { if (i != _musicSoundChannel) _soundDigital->stopSound(i); @@ -444,12 +443,11 @@ void KyraEngine_MR::fadeOutMusic(int ticks) { void KyraEngine_MR::snd_playSoundEffect(int item, int volume) { if (_sfxFileMap[item*2+0] != 0xFF) { - char filename[16]; assert(_sfxFileMap[item*2+0] < _sfxFileListSize); - snprintf(filename, 16, "%s", _sfxFileList[_sfxFileMap[item*2+0]]); + Common::String filename = Common::String::format("%s", _sfxFileList[_sfxFileMap[item*2+0]]); uint8 priority = _sfxFileMap[item*2+1]; - _soundDigital->playSound(filename, priority, Audio::Mixer::kSFXSoundType, volume); + _soundDigital->playSound(filename.c_str(), priority, Audio::Mixer::kSFXSoundType, volume); } } @@ -458,11 +456,10 @@ void KyraEngine_MR::playVoice(int high, int low) { } void KyraEngine_MR::snd_playVoiceFile(int file) { - char filename[16]; - snprintf(filename, 16, "%.08u", (uint)file); + Common::String filename = Common::String::format("%.08u", (uint)file); if (speechEnabled()) - _voiceSoundChannel = _soundDigital->playSound(filename, 0xFE, Audio::Mixer::kSpeechSoundType, 255); + _voiceSoundChannel = _soundDigital->playSound(filename.c_str(), 0xFE, Audio::Mixer::kSpeechSoundType, 255); } bool KyraEngine_MR::snd_voiceIsPlaying() { @@ -1242,26 +1239,14 @@ void KyraEngine_MR::restoreGfxRect32x32(int x, int y) { #pragma mark - -char *KyraEngine_MR::appendLanguage(char *buf, int lang, int bufSize) { - assert(lang < _languageExtensionSize); - - const int size = Common::strlcat(buf, _languageExtension[lang], bufSize); - if (size >= bufSize) { - warning("buffer too small to append language extension"); - return 0; - } - - return buf; -} - int KyraEngine_MR::loadLanguageFile(const char *file, uint8 *&buffer) { delete[] buffer; buffer = 0; uint32 size = 0; - char nBuf[32]; - Common::strlcpy(nBuf, file, sizeof(nBuf)); - buffer = _res->fileData(appendLanguage(nBuf, _lang, sizeof(nBuf)), &size); + Common::String nBuf = file; + nBuf += _languageExtension[_lang]; + buffer = _res->fileData(nBuf.c_str(), &size); return buffer ? size : 0; } diff --git a/engines/kyra/kyra_mr.h b/engines/kyra/kyra_mr.h index 0d9d66ce95..b762648d29 100644 --- a/engines/kyra/kyra_mr.h +++ b/engines/kyra/kyra_mr.h @@ -662,8 +662,6 @@ private: static const char *_languageExtension[]; static const int _languageExtensionSize; - char *appendLanguage(char *buf, int lang, int bufSize); - int loadLanguageFile(const char *file, uint8 *&buffer); }; diff --git a/engines/kyra/kyra_v1.cpp b/engines/kyra/kyra_v1.cpp index 7f4f1ec2c7..f79fabf9eb 100644 --- a/engines/kyra/kyra_v1.cpp +++ b/engines/kyra/kyra_v1.cpp @@ -84,7 +84,7 @@ KyraEngine_v1::KyraEngine_v1(OSystem *system, const GameFlags &flags) } void KyraEngine_v1::pauseEngineIntern(bool pause) { - Engine::pauseEngineIntern(pause); + _sound->pause(pause); _timer->pause(pause); } @@ -93,15 +93,6 @@ Common::Error KyraEngine_v1::init() { syncSoundSettings(); if (!_flags.useDigSound) { - // In Kyra 1 users who have specified a default MT-32 device in the launcher settings - // will get MT-32 music, otherwise AdLib. In Kyra 2 and LoL users who have specified a - // default GM device in the launcher will get GM music, otherwise AdLib. Users who want - // MT-32 music in Kyra2 or LoL have to select this individually (since we assume that - // most users rather have a GM device than a MT-32 device). - // Users who want PC speaker sound always have to select this individually for all - // Kyra games. - MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_PCSPK | MDT_MIDI | MDT_ADLIB | ((_flags.gameID == GI_KYRA2 || _flags.gameID == GI_LOL) ? MDT_PREFER_GM : MDT_PREFER_MT32)); - if (_flags.platform == Common::kPlatformFMTowns) { if (_flags.gameID == GI_KYRA1) _sound = new SoundTowns(this, _mixer); @@ -114,43 +105,53 @@ Common::Error KyraEngine_v1::init() { _sound = new SoundTownsPC98_v2(this, _mixer); } else if (_flags.platform == Common::kPlatformAmiga) { _sound = new SoundAmiga(this, _mixer); - } else if (MidiDriver::getMusicType(dev) == MT_ADLIB) { - _sound = new SoundAdLibPC(this, _mixer); } else { - Sound::kType type; - const MusicType midiType = MidiDriver::getMusicType(dev); + // In Kyra 1 users who have specified a default MT-32 device in the launcher settings + // will get MT-32 music, otherwise AdLib. In Kyra 2 and LoL users who have specified a + // default GM device in the launcher will get GM music, otherwise AdLib. Users who want + // MT-32 music in Kyra2 or LoL have to select this individually (since we assume that + // most users rather have a GM device than a MT-32 device). + // Users who want PC speaker sound always have to select this individually for all + // Kyra games. + MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_PCSPK | MDT_MIDI | MDT_ADLIB | ((_flags.gameID == GI_KYRA2 || _flags.gameID == GI_LOL) ? MDT_PREFER_GM : MDT_PREFER_MT32)); + if (MidiDriver::getMusicType(dev) == MT_ADLIB) { + _sound = new SoundAdLibPC(this, _mixer); + } else { + Sound::kType type; + const MusicType midiType = MidiDriver::getMusicType(dev); - if (midiType == MT_PCSPK || midiType == MT_NULL) - type = Sound::kPCSpkr; - else if (midiType == MT_MT32 || ConfMan.getBool("native_mt32")) - type = Sound::kMidiMT32; - else - type = Sound::kMidiGM; + if (midiType == MT_PCSPK || midiType == MT_NULL) + type = Sound::kPCSpkr; + else if (midiType == MT_MT32 || ConfMan.getBool("native_mt32")) + type = Sound::kMidiMT32; + else + type = Sound::kMidiGM; - MidiDriver *driver = 0; + MidiDriver *driver = 0; - if (MidiDriver::getMusicType(dev) == MT_PCSPK) { - driver = new MidiDriver_PCSpeaker(_mixer); - } else { - driver = MidiDriver::createMidi(dev); - if (type == Sound::kMidiMT32) - driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); - } + if (MidiDriver::getMusicType(dev) == MT_PCSPK) { + driver = new MidiDriver_PCSpeaker(_mixer); + } else { + driver = MidiDriver::createMidi(dev); + if (type == Sound::kMidiMT32) + driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); + } - assert(driver); + assert(driver); - SoundMidiPC *soundMidiPc = new SoundMidiPC(this, _mixer, driver, type); - _sound = soundMidiPc; - assert(_sound); + SoundMidiPC *soundMidiPc = new SoundMidiPC(this, _mixer, driver, type); + _sound = soundMidiPc; + assert(_sound); - // Unlike some SCUMM games, it's not that the MIDI sounds are - // missing. It's just that at least at the time of writing they - // are decidedly inferior to the AdLib ones. - if (ConfMan.getBool("multi_midi")) { - SoundAdLibPC *adlib = new SoundAdLibPC(this, _mixer); - assert(adlib); + // Unlike some SCUMM games, it's not that the MIDI sounds are + // missing. It's just that at least at the time of writing they + // are decidedly inferior to the AdLib ones. + if (ConfMan.getBool("multi_midi")) { + SoundAdLibPC *adlib = new SoundAdLibPC(this, _mixer); + assert(adlib); - _sound = new MixedSoundDriver(this, _mixer, soundMidiPc, adlib); + _sound = new MixedSoundDriver(this, _mixer, soundMidiPc, adlib); + } } } @@ -350,23 +351,43 @@ int KyraEngine_v1::checkInput(Button *buttonList, bool mainLoop, int eventFlag) } void KyraEngine_v1::setupKeyMap() { - static const Common::KeyCode keyboardEvents[] = { - Common::KEYCODE_SPACE, Common::KEYCODE_RETURN, Common::KEYCODE_UP, Common::KEYCODE_KP8, - Common::KEYCODE_RIGHT, Common::KEYCODE_KP6, Common::KEYCODE_DOWN, Common::KEYCODE_KP2, - Common::KEYCODE_KP5, Common::KEYCODE_LEFT, Common::KEYCODE_KP4, Common::KEYCODE_HOME, - Common::KEYCODE_KP7, Common::KEYCODE_PAGEUP, Common::KEYCODE_KP9, Common::KEYCODE_F1, - Common::KEYCODE_F2, Common::KEYCODE_F3, Common::KEYCODE_o, Common::KEYCODE_r, - Common::KEYCODE_SLASH, Common::KEYCODE_ESCAPE + struct KeyMapEntry { + Common::KeyCode kcScummVM; + int16 kcDOS; + int16 kcPC98; }; - static const int16 keyCodesDOS[] = { 61, 43, 96, 96, 102, 102, 98, 98, 97, 92, 92, 91, 91, 101, 101, 112, 113, 114, 25, 20, 55, 110}; - static const int16 keyCodesPC98[] = { 53, 29, 68, 68, 73, 73, 76, 76, 72, 71, 71, 67, 67, 69, 69, 99, 100, 101, 25, 20, 55, 1 }; +#define KC(x) Common::KEYCODE_##x + static const KeyMapEntry keys[] = { + { KC(SPACE), 61, 53 }, + { KC(RETURN), 43, 29 }, + { KC(UP), 96, 68 }, + { KC(KP8), 96, 68 }, + { KC(RIGHT), 102, 73 }, + { KC(KP6), 102, 73 }, + { KC(DOWN), 98, 76 }, + { KC(KP2), 98, 76 }, + { KC(KP5), 97, 72 }, + { KC(LEFT), 92, 71 }, + { KC(KP4), 92, 71 }, + { KC(HOME), 91, 67 }, + { KC(KP7), 91, 67 }, + { KC(PAGEUP), 101, 69 }, + { KC(KP9), 101, 69 }, + { KC(F1), 112, 99 }, + { KC(F2), 113, 100 }, + { KC(F3), 114, 101 }, + { KC(o), 25, 25 }, + { KC(r), 20, 20 }, + { KC(SLASH), 55, 55 }, + { KC(ESCAPE), 110, 1 }, + }; +#undef KC - const int16 *keyCodes = _flags.platform == Common::kPlatformPC98 ? keyCodesPC98 : keyCodesDOS; _keyMap.clear(); - for (int i = 0; i < ARRAYSIZE(keyboardEvents); i++) - _keyMap[keyboardEvents[i]] = keyCodes[i]; + for (int i = 0; i < ARRAYSIZE(keys); i++) + _keyMap[keys[i].kcScummVM] = (_flags.platform == Common::kPlatformPC98) ? keys[i].kcPC98 : keys[i].kcDOS; } void KyraEngine_v1::updateInput() { diff --git a/engines/kyra/kyra_v1.h b/engines/kyra/kyra_v1.h index bb533b14a5..5b4f3385a4 100644 --- a/engines/kyra/kyra_v1.h +++ b/engines/kyra/kyra_v1.h @@ -99,7 +99,7 @@ class KyraMetaEngine; * - The Legend of Kyrandia (fully supported, except for Macintosh port, which lacks sound) * - (The) Hand of Fate (fully supported) * - Malcolm's Revenge (fully supported) - * - Lands of Lore: The Throne of Chaos (completable, still work in progress) + * - Lands of Lore: The Throne of Chaos (fully supported) */ namespace Kyra { @@ -418,7 +418,7 @@ protected: void loadGameStateCheck(int slot); virtual Common::Error loadGameState(int slot) = 0; - Common::Error saveGameState(int slot, const char *saveName) { return saveGameStateIntern(slot, saveName, 0); } + Common::Error saveGameState(int slot, const Common::String &desc) { return saveGameStateIntern(slot, desc.c_str(), 0); } virtual Common::Error saveGameStateIntern(int slot, const char *saveName, const Graphics::Surface *thumbnail) = 0; Common::SeekableReadStream *openSaveForReading(const char *filename, SaveHeader &header); diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp index 9b0ae173d5..c567cbb037 100644 --- a/engines/kyra/lol.cpp +++ b/engines/kyra/lol.cpp @@ -42,9 +42,13 @@ LoLEngine::LoLEngine(OSystem *system, const GameFlags &flags) : KyraEngine_v1(sy _gui = 0; _txt = 0; _tim = 0; - _animator = 0; - switch (_flags.lang) { + _lang = 0; + Common::Language lang = Common::parseLanguage(ConfMan.get("language")); + if (lang == _flags.fanLang && _flags.replacedLang != Common::UNK_LANG) + lang = _flags.replacedLang; + + switch (lang) { case Common::EN_ANY: case Common::EN_USA: case Common::EN_GRB: @@ -576,7 +580,6 @@ Common::Error LoLEngine::go() { _tim = new TIMInterpreter_LoL(this, _screen, _system); assert(_tim); - _animator = _tim->animator(); if (shouldQuit()) return Common::kNoError; @@ -613,11 +616,11 @@ void LoLEngine::preInit() { loadTalkFile(0); - char filename[32]; - snprintf(filename, sizeof(filename), "LANDS.%s", _languageExt[_lang]); - _res->exists(filename, true); + Common::String filename; + filename = Common::String::format("LANDS.%s", _languageExt[_lang]); + _res->exists(filename.c_str(), true); delete[] _landsFile; - _landsFile = _res->fileData(filename, 0); + _landsFile = _res->fileData(filename.c_str(), 0); loadItemIconShapes(); } @@ -1163,9 +1166,8 @@ void LoLEngine::loadCharFaceShapes(int charNum, int id) { if (id < 0) id = -id; - char file[13]; - snprintf(file, sizeof(file), "FACE%02d.SHP", id); - _screen->loadBitmap(file, 3, 3, 0); + Common::String file = Common::String::format("FACE%02d.SHP", id); + _screen->loadBitmap(file.c_str(), 3, 3, 0); const uint8 *p = _screen->getCPagePtr(3); for (int i = 0; i < 40; i++) { @@ -1811,29 +1813,26 @@ void LoLEngine::createTransparencyTables() { } void LoLEngine::updateSequenceBackgroundAnimations() { - if (_updateFlags & 8 || !_animator) + if (_updateFlags & 8 || !_tim) + return; + if (!_tim->animator()) return; for (int i = 0; i < 6; i++) - _animator->update(i); + _tim->animator()->update(i); } void LoLEngine::loadTalkFile(int index) { - char file[8]; - if (index == _curTlkFile) return; - if (_curTlkFile > 0 && index > 0) { - snprintf(file, sizeof(file), "%02d.TLK", _curTlkFile); - _res->unloadPakFile(file); - } + if (_curTlkFile > 0 && index > 0) + _res->unloadPakFile(Common::String::format("%02d.TLK", _curTlkFile)); if (index > 0) _curTlkFile = index; - snprintf(file, sizeof(file), "%02d.TLK", index); - _res->loadPakFile(file); + _res->loadPakFile(Common::String::format("%02d.TLK", index)); } int LoLEngine::characterSays(int track, int charId, bool redraw) { @@ -2702,12 +2701,11 @@ int LoLEngine::processMagicMistOfDoom(int charNum, int spellLevel) { snd_playSoundEffect(155, -1); - char wsafile[13]; - snprintf(wsafile, 13, "mists%0d.wsa", spellLevel + 1); + Common::String wsafile = Common::String::format("mists%0d.wsa", spellLevel + 1); WSAMovie_v2 *mov = new WSAMovie_v2(this); - mov->open(wsafile, 1, 0); + mov->open(wsafile.c_str(), 1, 0); if (!mov->opened()) - error("Mist: Unable to load mists.wsa"); + error("Mist: Unable to load %s", wsafile.c_str()); snd_playSoundEffect(_mistAnimData[spellLevel].sound, -1); playSpellAnimation(mov, _mistAnimData[spellLevel].part1First, _mistAnimData[spellLevel].part1Last, 7, 112, 0, 0, 0, 0, 0, false); @@ -2720,7 +2718,7 @@ int LoLEngine::processMagicMistOfDoom(int charNum, int spellLevel) { _screen->copyPage(12, 0); updateDrawPage2(); - this->snd_playQueuedEffects(); + snd_playQueuedEffects(); return 1; } @@ -2734,12 +2732,11 @@ int LoLEngine::processMagicLightning(int charNum, int spellLevel) { _lightningDiv = _lightningProps[spellLevel].frameDiv; _lightningFirstSfx = 0; - char wsafile[13]; - snprintf(wsafile, 13, "litning%d.wsa", spellLevel + 1); + Common::String wsafile = Common::String::format("litning%d.wsa", spellLevel + 1); WSAMovie_v2 *mov = new WSAMovie_v2(this); - mov->open(wsafile, 1, 0); + mov->open(wsafile.c_str(), 1, 0); if (!mov->opened()) - error("Litning: Unable to load litning.wsa"); + error("Litning: Unable to load %s", wsafile.c_str()); for (int i = 0; i < 4; i++) playSpellAnimation(mov, 0, _lightningProps[spellLevel].lastFrame, 3, 93, 0, &LoLEngine::callbackProcessMagicLightning, 0, 0, 0, false); @@ -3139,11 +3136,10 @@ void LoLEngine::transferSpellToScollAnimation(int charNum, int spell, int slot) int vX = _updateSpellBookCoords[slot << 1] + 32; int vY = _updateSpellBookCoords[(slot << 1) + 1] + 5; - char wsaFile[13]; + Common::String wsaFile = Common::String::format("write%0d", spell); if (_flags.isTalkie) - snprintf(wsaFile, 13, "write%0d%c.wsa", spell, (_lang == 1) ? 'f' : (_lang == 0 ? 'e' : 'g')); - else - snprintf(wsaFile, 13, "write%0d.wsa", spell); + wsaFile += (_lang == 1) ? 'f' : (_lang == 0 ? 'e' : 'g'); + wsaFile += ".wsa"; snd_playSoundEffect(_updateSpellBookAnimData[(spell << 2) + 3], -1); snd_playSoundEffect(95, -1); @@ -3187,7 +3183,7 @@ void LoLEngine::transferSpellToScollAnimation(int charNum, int spell, int slot) playSpellAnimation(mov, 0, 6, 5, _updateSpellBookCoords[slot << 1], _updateSpellBookCoords[(slot << 1) + 1], 0, 0, 0, 0, false); mov->close(); - mov->open(wsaFile, 0, 0); + mov->open(wsaFile.c_str(), 0, 0); if (!mov->opened()) error("SpellBook: Unable to load spellbook anim"); snd_playSoundEffect(_updateSpellBookAnimData[(spell << 2) + 3], -1); @@ -4160,10 +4156,9 @@ void LoLEngine::loadMapLegendData(int level) { legendData[i * 6 + 5] = 0xffff; } - char file[13]; + Common::String file = Common::String::format("level%d.xxx", level); uint32 size = 0; - snprintf(file, 12, "level%d.xxx", level); - uint8 *data = _res->fileData(file, &size); + uint8 *data = _res->fileData(file.c_str(), &size); uint8 *pos = data; size = MIN<uint32>(size / 12, 32); @@ -4531,10 +4526,9 @@ void LoLEngine::generateTempData() { _lvlTempData[l]->monsters = new MonsterInPlay[30]; _lvlTempData[l]->flyingObjects = new FlyingObject[8]; - char filename[13]; - snprintf(filename, sizeof(filename), "LEVEL%d.CMZ", _currentLevel); + Common::String filename = Common::String::format("LEVEL%d.CMZ", _currentLevel); - _screen->loadBitmap(filename, 15, 15, 0); + _screen->loadBitmap(filename.c_str(), 15, 15, 0); const uint8 *p = _screen->getCPagePtr(14); uint16 len = READ_LE_UINT16(p + 4); p += 6; diff --git a/engines/kyra/lol.h b/engines/kyra/lol.h index a815fa1a37..06a4f29f63 100644 --- a/engines/kyra/lol.h +++ b/engines/kyra/lol.h @@ -315,7 +315,6 @@ private: GUI_LoL *_gui; TIMInterpreter *_tim; - TimAnimator *_animator; Common::Error init(); Common::Error go(); @@ -718,7 +717,7 @@ private: int olol_setScriptTimer(EMCState *script); int olol_createHandItem(EMCState *script); int olol_playAttackSound(EMCState *script); - int olol_characterJoinsParty(EMCState *script); + int olol_addRemoveCharacter(EMCState *script); int olol_giveItem(EMCState *script); int olol_loadTimScript(EMCState *script); int olol_runTimScript(EMCState *script); @@ -1215,7 +1214,7 @@ private: void setItemPosition(Item item, uint16 x, uint16 y, int flyingHeight, int b); void removeLevelItem(Item item, int block); bool launchObject(int objectType, Item item, int startX, int startY, int flyingHeight, int direction, int, int attackerId, int c); - void endObjectFlight(FlyingObject *t, int x, int y, int objectOnNextBlock); + void endObjectFlight(FlyingObject *t, int x, int y, int collisionObject); void processObjectFlight(FlyingObject *t, int x, int y); void updateObjectFlightPosition(FlyingObject *t); void objectFlightProcessHits(FlyingObject *t, int x, int y, int objectOnNextBlock); diff --git a/engines/kyra/scene_lol.cpp b/engines/kyra/scene_lol.cpp index 305036fc51..165919dff2 100644 --- a/engines/kyra/scene_lol.cpp +++ b/engines/kyra/scene_lol.cpp @@ -67,18 +67,17 @@ void LoLEngine::loadLevel(int index) { loadLevelWallData(index, true); _loadLevelFlag = 1; - char filename[13]; - snprintf(filename, sizeof(filename), "LEVEL%d.INI", index); + Common::String filename = Common::String::format("LEVEL%d.INI", index); int f = _hasTempDataFlags & (1 << (index - 1)); - runInitScript(filename, f ? 0 : 1); + runInitScript(filename.c_str(), f ? 0 : 1); if (f) restoreBlockTempData(index); - snprintf(filename, sizeof(filename), "LEVEL%d.INF", index); - runInfScript(filename); + filename = Common::String::format("LEVEL%d.INF", index); + runInfScript(filename.c_str()); addLevelItems(); deleteMonstersFromBlock(_currentBlock); @@ -142,11 +141,10 @@ void LoLEngine::assignBlockObject(LevelBlockProperty *l, uint16 item) { } void LoLEngine::loadLevelWallData(int index, bool mapShapes) { - char filename[13]; - snprintf(filename, sizeof(filename), "LEVEL%d.WLL", index); + Common::String filename = Common::String::format("LEVEL%d.WLL", index); uint32 size; - uint8 *file = _res->fileData(filename, &size); + uint8 *file = _res->fileData(filename.c_str(), &size); uint16 c = READ_LE_UINT16(file); loadLevelShpDat(_levelShpList[c], _levelDatList[c], false); @@ -241,10 +239,9 @@ void LoLEngine::restoreBlockTempData(int index) { memcpy(_monsters, _lvlTempData[l]->monsters, sizeof(MonsterInPlay) * 30); memcpy(_flyingObjects, _lvlTempData[l]->flyingObjects, sizeof(FlyingObject) * 8); - char filename[13]; - snprintf(filename, sizeof(filename), "LEVEL%d.CMZ", index); + Common::String filename = Common::String::format("LEVEL%d.CMZ", index); - _screen->loadBitmap(filename, 3, 3, 0); + _screen->loadBitmap(filename.c_str(), 3, 3, 0); const uint8 *p = _screen->getCPagePtr(2); uint16 len = READ_LE_UINT16(p + 4); p += 6; @@ -366,13 +363,13 @@ void LoLEngine::loadLevelGraphics(const char *file, int specialColor, int weight _lastSpecialColor = 0x44; } - char fname[13]; + Common::String fname; const uint8 *v = 0; int tlen = 0; if (_flags.use16ColorMode) { - snprintf(fname, sizeof(fname), "%s.VCF", _lastBlockDataFile); - _screen->loadBitmap(fname, 3, 3, 0); + fname = Common::String::format("%s.VCF", _lastBlockDataFile); + _screen->loadBitmap(fname.c_str(), 3, 3, 0); v = _screen->getCPagePtr(2); tlen = READ_LE_UINT16(v) << 5; v += 2; @@ -383,8 +380,8 @@ void LoLEngine::loadLevelGraphics(const char *file, int specialColor, int weight memcpy(_vcfBlocks, v, tlen); } - snprintf(fname, sizeof(fname), "%s.VCN", _lastBlockDataFile); - _screen->loadBitmap(fname, 3, 3, 0); + fname = Common::String::format("%s.VCN", _lastBlockDataFile); + _screen->loadBitmap(fname.c_str(), 3, 3, 0); v = _screen->getCPagePtr(2); tlen = READ_LE_UINT16(v); v += 2; @@ -434,8 +431,8 @@ void LoLEngine::loadLevelGraphics(const char *file, int specialColor, int weight memcpy(_vcnBlocks, v, vcnLen); v += vcnLen; - snprintf(fname, sizeof(fname), "%s.VMP", _lastBlockDataFile); - _screen->loadBitmap(fname, 3, 3, 0); + fname = Common::String::format("%s.VMP", _lastBlockDataFile); + _screen->loadBitmap(fname.c_str(), 3, 3, 0); v = _screen->getCPagePtr(2); if (vmpLen == -1) @@ -503,9 +500,7 @@ void LoLEngine::loadLevelGraphics(const char *file, int specialColor, int weight generateBrightnessPalette(_screen->getPalette(0), _screen->getPalette(1), _brightness, _lampEffect); if (_flags.isTalkie) { - char tname[13]; - snprintf(tname, sizeof(tname), "LEVEL%.02d.TLC", _currentLevel); - Common::SeekableReadStream *s = _res->createReadStream(tname); + Common::SeekableReadStream *s = _res->createReadStream(Common::String::format("LEVEL%.02d.TLC", _currentLevel)); s->read(_transparencyTable1, 256); s->read(_transparencyTable2, 5120); delete s; @@ -1375,9 +1370,8 @@ void LoLEngine::processGasExplosion(int soundId) { if (dist) { WSAMovie_v2 *mov = new WSAMovie_v2(this); - char file[13]; - snprintf(file, 13, "gasexp%0d.wsa", dist); - mov->open(file, 1, 0); + Common::String file = Common::String::format("gasexp%0d.wsa", dist); + mov->open(file.c_str(), 1, 0); if (!mov->opened()) error("Gas: Unable to load gasexp.wsa"); diff --git a/engines/kyra/script_lol.cpp b/engines/kyra/script_lol.cpp index 2261ef8389..1afefcffa4 100644 --- a/engines/kyra/script_lol.cpp +++ b/engines/kyra/script_lol.cpp @@ -524,7 +524,7 @@ int LoLEngine::olol_initAnimStruct(EMCState *script) { int LoLEngine::olol_playAnimationPart(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_playAnimationPart(%p) (%d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3)); - _animator->playPart(stackPos(0), stackPos(1), stackPos(2), stackPos(3)); + _tim->animator()->playPart(stackPos(0), stackPos(1), stackPos(2), stackPos(3)); return 1; } @@ -593,13 +593,13 @@ int LoLEngine::olol_clearDialogueField(EMCState *script) { int LoLEngine::olol_setupBackgroundAnimationPart(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_setupBackgroundAnimationPart(%p) (%d, %d, %d, %d, %d, %d, %d, %d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6), stackPos(7), stackPos(8), stackPos(9)); - _animator->setupPart(stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6), stackPos(7), stackPos(8), stackPos(9)); + _tim->animator()->setupPart(stackPos(0), stackPos(1), stackPos(2), stackPos(3), stackPos(4), stackPos(5), stackPos(6), stackPos(7), stackPos(8), stackPos(9)); return 0; } int LoLEngine::olol_startBackgroundAnimation(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_startBackgroundAnimation(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1)); - _animator->start(stackPos(0), stackPos(1)); + _tim->animator()->start(stackPos(0), stackPos(1)); return 1; } @@ -629,7 +629,7 @@ int LoLEngine::olol_loadBitmap(EMCState *script) { int LoLEngine::olol_stopBackgroundAnimation(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_stopBackgroundAnimation(%p) (%d)", (const void *)script, stackPos(0)); - _animator->stop(stackPos(0)); + _tim->animator()->stop(stackPos(0)); return 1; } @@ -1088,33 +1088,27 @@ int LoLEngine::olol_playAttackSound(EMCState *script) { return 1; } -int LoLEngine::olol_characterJoinsParty(EMCState *script) { - debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_characterJoinsParty(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2)); +int LoLEngine::olol_addRemoveCharacter(EMCState *script) { + debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_addRemoveCharacter(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2)); int16 id = stackPos(0); - if (id < 0) + if (id < 0) { id = -id; + for (int i = 0; i < 4; i++) { + if (!(_characters[i].flags & 1) || _characters[i].id != id) + continue; - for (int i = 0; i < 4; i++) { - if (!(_characters[i].flags & 1) || _characters[i].id != id) - continue; - - _characters[i].flags &= 0xfffe; - calcCharPortraitXpos(); + _characters[i].flags &= 0xfffe; + calcCharPortraitXpos(); - if (!_updateFlags) { - gui_enableDefaultPlayfieldButtons(); - gui_drawPlayField(); + if (_selectedCharacter == i) + _selectedCharacter = 0; + break; } - - if (_selectedCharacter == i) - _selectedCharacter = 0; - - return 1; + } else { + addCharacter(id); } - addCharacter(id); - if (!_updateFlags) { gui_enableDefaultPlayfieldButtons(); gui_drawPlayField(); @@ -1136,9 +1130,8 @@ int LoLEngine::olol_loadTimScript(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_loadTimScript(%p) (%d, %s)", (const void *)script, stackPos(0), stackPosString(1)); if (_activeTim[stackPos(0)]) return 1; - char file[13]; - snprintf(file, sizeof(file), "%s.TIM", stackPosString(1)); - _activeTim[stackPos(0)] = _tim->load(file, &_timIngameOpcodes); + Common::String file = Common::String::format("%s.TIM", stackPosString(1)); + _activeTim[stackPos(0)] = _tim->load(file.c_str(), &_timIngameOpcodes); return 1; } @@ -1185,10 +1178,9 @@ int LoLEngine::olol_giveItemToMonster(EMCState *script) { int LoLEngine::olol_loadLangFile(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_loadLangFile(%p) (%s)", (const void *)script, stackPosString(0)); - char filename[13]; - snprintf(filename, sizeof(filename), "%s.%s", stackPosString(0), _languageExt[_lang]); + Common::String filename = Common::String::format("%s.%s", stackPosString(0), _languageExt[_lang]); delete[] _levelLangFile; - _levelLangFile = _res->fileData(filename, 0); + _levelLangFile = _res->fileData(filename.c_str(), 0); return 1; } @@ -1440,7 +1432,10 @@ int LoLEngine::olol_playEndSequence(EMCState *script){ _screen->getPalette(1).clear(); showOutro(c, (_monsterDifficulty == 2)); - quitGame(); + // Don't call quitGame() on a RTL request (because this would + // make the next game launched from the launcher quit instantly. + if (!shouldQuit()) + quitGame(); return 0; } @@ -1983,7 +1978,7 @@ int LoLEngine::olol_removeInventoryItem(EMCState *script) { int LoLEngine::olol_getAnimationLastPart(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_getAnimationLastPart(%p) (%d)", (const void *)script, stackPos(0)); - return _animator->resetLastPart(stackPos(0)); + return _tim->animator()->resetLastPart(stackPos(0)); } int LoLEngine::olol_assignSpecialGuiShape(EMCState *script) { @@ -2406,16 +2401,16 @@ int LoLEngine::tlol_processWsaFrame(const TIM *tim, const uint16 *param) { const int y2 = param[3]; const int factor = MAX<int>(0, (int16)param[4]); - const int x1 = _animator->getAnimX(animIndex); - const int y1 = _animator->getAnimY(animIndex); - const Movie *wsa = _animator->getWsaCPtr(animIndex); + const int x1 = _tim->animator()->getAnimX(animIndex); + const int y1 = _tim->animator()->getAnimY(animIndex); + const Movie *wsa = _tim->animator()->getWsaCPtr(animIndex); int w1 = wsa->width(); int h1 = wsa->height(); int w2 = (w1 * factor) / 100; int h2 = (h1 * factor) / 100; - _animator->displayFrame(animIndex, 2, frame); + _tim->animator()->displayFrame(animIndex, 2, frame); _screen->wsaFrameAnimationStep(x1, y1, x2, y2, w1, h1, w2, h2, 2, _flags.isDemo && _flags.platform != Common::kPlatformPC98 ? 0 : 8, 0); if (!_flags.isDemo && _flags.platform != Common::kPlatformPC98) _screen->checkedPageUpdate(8, 4); @@ -2584,13 +2579,13 @@ int LoLEngine::tlol_playSoundEffect(const TIM *tim, const uint16 *param) { int LoLEngine::tlol_startBackgroundAnimation(const TIM *tim, const uint16 *param) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_startBackgroundAnimation(%p, %p) (%d, %d)", (const void *)tim, (const void *)param, param[0], param[1]); - _animator->start(param[0], param[1]); + _tim->animator()->start(param[0], param[1]); return 1; } int LoLEngine::tlol_stopBackgroundAnimation(const TIM *tim, const uint16 *param) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_stopBackgroundAnimation(%p, %p) (%d)", (const void *)tim, (const void *)param, param[0]); - _animator->stop(param[0]); + _tim->animator()->stop(param[0]); return 1; } @@ -2674,12 +2669,12 @@ int LoLEngine::tlol_displayAnimFrame(const TIM *tim, const uint16 *param) { debugC(3, kDebugLevelScriptFuncs, "LoLEngine::tlol_displayAnimFrame(%p, %p) (%d, %d)", (const void *)tim, (const void *)param, param[0], param[1]); const int animIndex = tim->wsa[param[0]].anim - 1; - const Movie *wsa = _animator->getWsaCPtr(animIndex); + const Movie *wsa = _tim->animator()->getWsaCPtr(animIndex); if (param[1] == 0xFFFF) { _screen->copyRegion(0, 0, 0, 0, 320, 200, 0, 2, Screen::CR_NO_P_CHECK); } else { - _animator->displayFrame(animIndex, 2, param[1], 0); + _tim->animator()->displayFrame(animIndex, 2, param[1], 0); _screen->copyRegion(wsa->xAdd(), wsa->yAdd(), wsa->xAdd(), wsa->yAdd(), wsa->width(), wsa->height(), 2, 0); } @@ -2822,7 +2817,7 @@ void LoLEngine::setupOpcodeTable() { Opcode(olol_setScriptTimer); Opcode(olol_createHandItem); Opcode(olol_playAttackSound); - Opcode(olol_characterJoinsParty); + Opcode(olol_addRemoveCharacter); // 0x4C Opcode(olol_giveItem); diff --git a/engines/kyra/script_tim.cpp b/engines/kyra/script_tim.cpp index 501ae2defd..6f0f0ab083 100644 --- a/engines/kyra/script_tim.cpp +++ b/engines/kyra/script_tim.cpp @@ -482,17 +482,16 @@ int TIMInterpreter::initAnimStruct(int index, const char *filename, int x, int y wsaOpenFlags = 1; } - char file[32]; - snprintf(file, 32, "%s.WSA", filename); + Common::String file = Common::String::format("%s.WSA", filename); - if (_vm->resource()->exists(file)) { + if (_vm->resource()->exists(file.c_str())) { if (isLoLDemo) wsa = new WSAMovie_v1(_vm); else wsa = new WSAMovie_v2(_vm); assert(wsa); - wsa->open(file, wsaOpenFlags, (index == 1) ? &_screen->getPalette(0) : 0); + wsa->open(file.c_str(), wsaOpenFlags, (index == 1) ? &_screen->getPalette(0) : 0); } if (wsa && wsa->opened()) { @@ -526,10 +525,10 @@ int TIMInterpreter::initAnimStruct(int index, const char *filename, int x, int y } if (wsaFlags & 4) { - snprintf(file, 32, "%s.CPS", filename); + file = Common::String::format("%s.CPS", filename); - if (_vm->resource()->exists(file)) { - _screen->loadBitmap(file, 3, 3, &_screen->getPalette(0)); + if (_vm->resource()->exists(file.c_str())) { + _screen->loadBitmap(file.c_str(), 3, 3, &_screen->getPalette(0)); _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, _drawPage2, Screen::CR_NO_P_CHECK); if (_drawPage2) _screen->checkedPageUpdate(8, 4); @@ -550,10 +549,10 @@ int TIMInterpreter::initAnimStruct(int index, const char *filename, int x, int y _screen->updateScreen(); } - snprintf(file, 32, "%s.CPS", filename); + file = Common::String::format("%s.CPS", filename); - if (_vm->resource()->exists(file)) { - _screen->loadBitmap(file, 3, 3, &_screen->getPalette(0)); + if (_vm->resource()->exists(file.c_str())) { + _screen->loadBitmap(file.c_str(), 3, 3, &_screen->getPalette(0)); _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, _drawPage2, Screen::CR_NO_P_CHECK); if (_drawPage2) _screen->checkedPageUpdate(8, 4); @@ -922,13 +921,12 @@ int TIMInterpreter_LoL::initAnimStruct(int index, const char *filename, int x, i if (wsaFlags & 8) wsaOpenFlags |= 1; - char file[32]; - snprintf(file, 32, "%s.WSA", filename); + Common::String file = Common::String::format("%s.WSA", filename); - if (_vm->resource()->exists(file)) { + if (_vm->resource()->exists(file.c_str())) { wsa = new WSAMovie_v2(_vm); assert(wsa); - wsa->open(file, wsaOpenFlags, &_screen->getPalette(3)); + wsa->open(file.c_str(), wsaOpenFlags, &_screen->getPalette(3)); } if (!_vm->_flags.use16ColorMode) { diff --git a/engines/kyra/sequences_lol.cpp b/engines/kyra/sequences_lol.cpp index d11403ad9f..01bf3c5e26 100644 --- a/engines/kyra/sequences_lol.cpp +++ b/engines/kyra/sequences_lol.cpp @@ -202,8 +202,7 @@ void LoLEngine::setupPrologueData(bool load) { void LoLEngine::showIntro() { _tim = new TIMInterpreter(this, _screen, _system); assert(_tim); - _animator = _tim->animator(); - + if (_flags.platform == Common::kPlatformPC98) showStarcraftLogo(); @@ -262,7 +261,6 @@ void LoLEngine::showIntro() { delete _tim; _tim = 0; - _animator = 0; _screen->fadePalette(_screen->getPalette(1), 30, 0); } @@ -270,7 +268,6 @@ void LoLEngine::showIntro() { int LoLEngine::chooseCharacter() { _tim = new TIMInterpreter(this, _screen, _system); assert(_tim); - _animator = _tim->animator(); _tim->setLangData("LOLINTRO.DIP"); @@ -309,9 +306,8 @@ int LoLEngine::chooseCharacter() { Screen::FontId old = _screen->setFont(Screen::FID_SJIS_FNT); for (int j = 0; j < 3; ++j) { - char buffer[3]; - snprintf(buffer, sizeof(buffer), "%2d", _charPreviews[i].attrib[j]); - _screen->printText(buffer, _charPosXPC98[i] + 16, 176 + j * 8, 0x81, 0x00); + Common::String attribString = Common::String::format("%2d", _charPreviews[i].attrib[j]); + _screen->printText(attribString.c_str(), _charPosXPC98[i] + 16, 176 + j * 8, 0x81, 0x00); } _screen->setFont(old); } @@ -387,7 +383,6 @@ int LoLEngine::chooseCharacter() { delete _tim; _tim = 0; - _animator = 0; return _charSelection; } @@ -1061,7 +1056,6 @@ void LoLEngine::showOutro(int character, bool maxDifficulty) { setupEpilogueData(true); TIMInterpreter *timBackUp = _tim; _tim = new TIMInterpreter(this, _screen, _system); - _animator = _tim->animator(); _screen->getPalette(0).clear(); _screen->setScreenPalette(_screen->getPalette(0)); @@ -1117,47 +1111,49 @@ void LoLEngine::showOutro(int character, bool maxDifficulty) { _screen->fadeToBlack(30); - showCredits(); + if (!shouldQuit()) + showCredits(); _eventList.clear(); + + if (!shouldQuit()) { + switch (character) { + case 0: + _screen->loadBitmap("KIERAN.CPS", 3, 3, &_screen->getPalette(0)); + break; - switch (character) { - case 0: - _screen->loadBitmap("KIERAN.CPS", 3, 3, &_screen->getPalette(0)); - break; - - case 1: - _screen->loadBitmap("AK'SHEL.CPS", 3, 3, &_screen->getPalette(0)); - break; + case 1: + _screen->loadBitmap("AK'SHEL.CPS", 3, 3, &_screen->getPalette(0)); + break; - case 2: - _screen->loadBitmap("MICHAEL.CPS", 3, 3, &_screen->getPalette(0)); - break; + case 2: + _screen->loadBitmap("MICHAEL.CPS", 3, 3, &_screen->getPalette(0)); + break; - case 3: - _screen->loadBitmap("CONRAD.CPS", 3, 3, &_screen->getPalette(0)); - break; + case 3: + _screen->loadBitmap("CONRAD.CPS", 3, 3, &_screen->getPalette(0)); + break; - default: - _screen->clearPage(3); - _screen->getPalette(0).clear(); - } + default: + _screen->clearPage(3); + _screen->getPalette(0).clear(); + } - _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0, Screen::CR_NO_P_CHECK); - if (maxDifficulty && !_flags.use16ColorMode) - _tim->displayText(0x8000, 0, 0xDC); - _screen->updateScreen(); - _screen->fadePalette(_screen->getPalette(0), 30, 0); + _screen->copyRegion(0, 0, 0, 0, 320, 200, 2, 0, Screen::CR_NO_P_CHECK); + if (maxDifficulty && !_flags.use16ColorMode) + _tim->displayText(0x8000, 0, 0xDC); + _screen->updateScreen(); + _screen->fadePalette(_screen->getPalette(0), 30, 0); - while (!checkInput(0) && !shouldQuit()) - delay(_tickLength); + while (!checkInput(0) && !shouldQuit()) + delay(_tickLength); - _screen->fadeToBlack(30); + _screen->fadeToBlack(30); + } _tim->clearLangData(); delete _tim; _tim = timBackUp; - _animator = 0; setupEpilogueData(false); } @@ -1245,7 +1241,7 @@ void LoLEngine::processCredits(char *t, int dimState, int page, int delayTime) { int curShapeFile = 0; uint8 *shapes[12]; - memset(&shapes, 0, sizeof(shapes)); + memset(shapes, 0, sizeof(shapes)); loadOutroShapes(curShapeFile++, shapes); uint8 *monsterPal = 0; diff --git a/engines/kyra/sound.cpp b/engines/kyra/sound.cpp index 4da35cc28b..3713537afd 100644 --- a/engines/kyra/sound.cpp +++ b/engines/kyra/sound.cpp @@ -43,6 +43,10 @@ Sound::Sound(KyraEngine_v1 *vm, Audio::Mixer *mixer) Sound::~Sound() { } +void Sound::pause(bool paused) { + _mixer->pauseAll(paused); +} + bool Sound::voiceFileIsPresent(const char *file) { for (int i = 0; _supportedCodecs[i].fileext; ++i) { Common::String f = file; diff --git a/engines/kyra/sound.h b/engines/kyra/sound.h index 4f8e54212f..566b37ff43 100644 --- a/engines/kyra/sound.h +++ b/engines/kyra/sound.h @@ -101,7 +101,7 @@ public: /** * Load a sound file for playing music - * (and somtimes sound effects) from. + * (and sometimes sound effects) from. */ virtual void loadSoundFile(Common::String file) = 0; @@ -153,6 +153,11 @@ public: */ virtual void beginFadeOut() = 0; + /** + * Stops all audio playback when paused. Continues after end of pause. + */ + virtual void pause(bool paused); + void enableMusic(int enable) { _musicEnabled = enable; } int musicEnabled() const { return _musicEnabled; } void enableSFX(bool enable) { _sfxEnabled = enable; } @@ -275,6 +280,7 @@ public: void stopAllSoundEffects() { _sfx->stopAllSoundEffects(); } void beginFadeOut() { _music->beginFadeOut(); } + void pause(bool paused) { _music->pause(paused); _sfx->pause(paused); } private: Sound *_music, *_sfx; }; diff --git a/engines/kyra/sound_adlib.cpp b/engines/kyra/sound_adlib.cpp index 6ca01c65f3..75041b8161 100644 --- a/engines/kyra/sound_adlib.cpp +++ b/engines/kyra/sound_adlib.cpp @@ -1558,7 +1558,7 @@ int AdLibDriver::update_changeExtraLevel2(uint8 *&dataptr, Channel &channel, uin return 0; } -// Apart from initialising to zero, these two functions are the only ones that +// Apart from initializing to zero, these two functions are the only ones that // modify _vibratoAndAMDepthBits. int AdLibDriver::update_setAMDepth(uint8 *&dataptr, Channel &channel, uint8 value) { diff --git a/engines/kyra/sound_intern.h b/engines/kyra/sound_intern.h index 488dbc3742..2ba0890789 100644 --- a/engines/kyra/sound_intern.h +++ b/engines/kyra/sound_intern.h @@ -71,6 +71,8 @@ public: void stopAllSoundEffects(); void beginFadeOut(); + + void pause(bool paused); private: static void onTimer(void *data); @@ -139,8 +141,6 @@ private: TownsEuphonyDriver *_driver; - Common::Mutex _mutex; - bool _cdaPlaying; const uint8 *_musicFadeTable; diff --git a/engines/kyra/sound_lok.cpp b/engines/kyra/sound_lok.cpp index 95a632c08c..b2a9c2fd93 100644 --- a/engines/kyra/sound_lok.cpp +++ b/engines/kyra/sound_lok.cpp @@ -74,9 +74,8 @@ void KyraEngine_LoK::snd_playWanderScoreViaMap(int command, int restart) { } void KyraEngine_LoK::snd_playVoiceFile(int id) { - char vocFile[9]; - snprintf(vocFile, sizeof(vocFile), "%03d", id); - _speechPlayTime = _sound->voicePlay(vocFile, &_speechHandle); + Common::String vocFile = Common::String::format("%03d", id); + _speechPlayTime = _sound->voicePlay(vocFile.c_str(), &_speechHandle); } void KyraEngine_LoK::snd_voiceWaitForFinish(bool ingame) { diff --git a/engines/kyra/sound_lol.cpp b/engines/kyra/sound_lol.cpp index a7776f0ab6..7262635728 100644 --- a/engines/kyra/sound_lol.cpp +++ b/engines/kyra/sound_lol.cpp @@ -50,36 +50,34 @@ bool LoLEngine::snd_playCharacterSpeech(int id, int8 speaker, int) { _lastSpeaker = speaker; _nextSpeechId = _nextSpeaker = -1; - char pattern1[8]; - char pattern2[5]; - char file1[13]; - char file2[13]; - char file3[13]; - file3[0] = 0; + Common::String pattern1; + Common::String file1; + Common::String file2; + Common::String file3; SpeechList newSpeechList; - snprintf(pattern2, sizeof(pattern2), "%02d", id & 0x4000 ? 0 : _curTlkFile); + Common::String pattern2 = Common::String::format("%02d", id & 0x4000 ? 0 : _curTlkFile); if (id & 0x4000) { - snprintf(pattern1, sizeof(pattern1), "%03X", id & 0x3fff); + pattern1 = Common::String::format("%03X", id & 0x3fff); } else if (id < 1000) { - snprintf(pattern1, sizeof(pattern1), "%03d", id); + pattern1 = Common::String::format("%03d", id); } else { - snprintf(file3, sizeof(file3), "@%04d%c.%s", id - 1000, (char)speaker, pattern2); - if (_sound->isVoicePresent(file3)) - newSpeechList.push_back(_sound->getVoiceStream(file3)); + file3 = Common::String::format("@%04d%c.%s", id - 1000, (char)speaker, pattern2.c_str()); + if (_sound->isVoicePresent(file3.c_str())) + newSpeechList.push_back(_sound->getVoiceStream(file3.c_str())); } - if (!file3[0]) { + if (file3.empty()) { for (char i = 0; ; i++) { char symbol = '0' + i; - snprintf(file1, sizeof(file1), "%s%c%c.%s", pattern1, (char)speaker, symbol, pattern2); - snprintf(file2, sizeof(file2), "%s%c%c.%s", pattern1, '_', symbol, pattern2); - if (_sound->isVoicePresent(file1)) - newSpeechList.push_back(_sound->getVoiceStream(file1)); - else if (_sound->isVoicePresent(file2)) - newSpeechList.push_back(_sound->getVoiceStream(file2)); + file1 = Common::String::format("%s%c%c.%s", pattern1.c_str(), (char)speaker, symbol, pattern2.c_str()); + file2 = Common::String::format("%s%c%c.%s", pattern1.c_str(), '_', symbol, pattern2.c_str()); + if (_sound->isVoicePresent(file1.c_str())) + newSpeechList.push_back(_sound->getVoiceStream(file1.c_str())); + else if (_sound->isVoicePresent(file2.c_str())) + newSpeechList.push_back(_sound->getVoiceStream(file2.c_str())); else break; } @@ -260,9 +258,7 @@ void LoLEngine::snd_loadSoundFile(int track) { int t = (track - 250) * 3; if (_curMusicFileIndex != _musicTrackMap[t] || _curMusicFileExt != (char)_musicTrackMap[t + 1]) { snd_stopMusic(); - char filename[13]; - snprintf(filename, sizeof(filename), "LORE%02d%c", _musicTrackMap[t], (char)_musicTrackMap[t + 1]); - _sound->loadSoundFile(filename); + _sound->loadSoundFile(Common::String::format("LORE%02d%c", _musicTrackMap[t], (char)_musicTrackMap[t + 1])); _curMusicFileIndex = _musicTrackMap[t]; _curMusicFileExt = (char)_musicTrackMap[t + 1]; } else { diff --git a/engines/kyra/sound_midi.cpp b/engines/kyra/sound_midi.cpp index 00f6c9329e..dc0f8c11ec 100644 --- a/engines/kyra/sound_midi.cpp +++ b/engines/kyra/sound_midi.cpp @@ -25,6 +25,7 @@ #include "common/system.h" #include "common/config-manager.h" +#include "common/translation.h" #include "gui/message.h" @@ -471,11 +472,11 @@ SoundMidiPC::SoundMidiPC(KyraEngine_v1 *vm, Audio::Mixer *mixer, MidiDriver *dri // (This will only happen in The Legend of Kyrandia 1 though, all other // supported games include special General MIDI tracks). if (_type == kMidiMT32 && !_nativeMT32) { - ::GUI::MessageDialog dialog("You appear to be using a General MIDI device,\n" + ::GUI::MessageDialog dialog(_("You appear to be using a General MIDI device,\n" "but your game only supports Roland MT32 MIDI.\n" "We try to map the Roland MT32 instruments to\n" "General MIDI ones. After all it might happen\n" - "that a few tracks will not be correctly played."); + "that a few tracks will not be correctly played.")); dialog.runModal(); } } @@ -714,6 +715,26 @@ void SoundMidiPC::beginFadeOut() { _fadeStartTime = _vm->_system->getMillis(); } +void SoundMidiPC::pause(bool paused) { + // Stop all mixer related sounds + Sound::pause(paused); + + Common::StackLock lock(_mutex); + + if (paused) { + _music->setMidiDriver(0); + for (int i = 0; i < 3; i++) + _sfx[i]->setMidiDriver(0); + for (int i = 0; i < 16; i++) + _output->stopNotesOnChannel(i); + } else { + _music->setMidiDriver(_output); + for (int i = 0; i < 3; ++i) + _sfx[i]->setMidiDriver(_output); + // Possible TODO (IMHO unnecessary): restore notes and/or update _fadeStartTime + } +} + void SoundMidiPC::onTimer(void *data) { SoundMidiPC *midi = (SoundMidiPC *)data; diff --git a/engines/kyra/sound_towns.cpp b/engines/kyra/sound_towns.cpp index 9a9892c9a4..73d435f3e5 100644 --- a/engines/kyra/sound_towns.cpp +++ b/engines/kyra/sound_towns.cpp @@ -297,8 +297,6 @@ bool SoundTowns::loadInstruments() { if (!twm) return false; - Common::StackLock lock(_mutex); - Screen::decodeFrame4(twm, _musicTrackData, 50570); for (int i = 0; i < 128; i++) _driver->loadInstrument(0, i, &_musicTrackData[i * 48 + 8]); @@ -322,8 +320,6 @@ bool SoundTowns::loadInstruments() { } void SoundTowns::playEuphonyTrack(uint32 offset, int loop) { - Common::StackLock lock(_mutex); - uint8 *twm = _vm->resource()->fileData("twmusic.pak", 0); Screen::decodeFrame4(twm + 19312 + offset, _musicTrackData, 50570); delete[] twm; diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp index 499cc6f301..d56abc5d47 100644 --- a/engines/kyra/staticres.cpp +++ b/engines/kyra/staticres.cpp @@ -38,7 +38,7 @@ namespace Kyra { -#define RESFILE_VERSION 73 +#define RESFILE_VERSION 74 namespace { bool checkKyraDat(Common::SeekableReadStream *file) { diff --git a/engines/kyra/text_hof.cpp b/engines/kyra/text_hof.cpp index 393fa8d11f..4406f3ec41 100644 --- a/engines/kyra/text_hof.cpp +++ b/engines/kyra/text_hof.cpp @@ -436,15 +436,16 @@ void KyraEngine_HoF::updateDlgBuffer() { _npcTalkChpIndex = _currentChapter; _npcTalkDlgIndex = _mainCharacter.dlgIndex; - char filename[13]; - snprintf(filename, 13, "CH%.02d-S%.02d.DLG", _currentChapter, _npcTalkDlgIndex); + Common::String filename = Common::String::format("CH%.02d-S%.02d.DL", _currentChapter, _npcTalkDlgIndex); const char *suffix = _flags.isTalkie ? suffixTalkie : suffixTowns; if (_flags.platform != Common::kPlatformPC || _flags.isTalkie) - filename[11] = suffix[_lang]; + filename += suffix[_lang]; + else + filename += 'G'; delete[] _dlgBuffer; - _dlgBuffer = _res->fileData(filename, 0); + _dlgBuffer = _res->fileData(filename.c_str(), 0); } void KyraEngine_HoF::loadDlgHeader(int &csEntry, int &vocH, int &scIndex1, int &scIndex2) { diff --git a/engines/kyra/text_mr.cpp b/engines/kyra/text_mr.cpp index 2cb752fdb3..d690b70266 100644 --- a/engines/kyra/text_mr.cpp +++ b/engines/kyra/text_mr.cpp @@ -625,24 +625,20 @@ void KyraEngine_MR::malcolmSceneStartupChat() { } void KyraEngine_MR::updateDlgBuffer() { - char dlgFile[16]; - char cnvFile[16]; - if (_cnvFile) _cnvFile->seek(0, SEEK_SET); if (_curDlgIndex == _mainCharacter.dlgIndex && _curDlgChapter == _currentChapter && _curDlgLang == _lang) return; - snprintf(dlgFile, 16, "CH%.02d-S%.02d.", _currentChapter, _mainCharacter.dlgIndex); - appendLanguage(dlgFile, _lang, 16); - snprintf(cnvFile, 16, "CH%.02d-S%.02d.CNV", _currentChapter, _mainCharacter.dlgIndex); + Common::String dlgFile = Common::String::format("CH%.02d-S%.02d.%s", _currentChapter, _mainCharacter.dlgIndex, _languageExtension[_lang]); + Common::String cnvFile = Common::String::format("CH%.02d-S%.02d.CNV", _currentChapter, _mainCharacter.dlgIndex); delete _cnvFile; delete _dlgBuffer; - _res->exists(cnvFile, true); - _res->exists(dlgFile, true); + _res->exists(cnvFile.c_str(), true); + _res->exists(dlgFile.c_str(), true); _cnvFile = _res->createReadStream(cnvFile); _dlgBuffer = _res->createReadStream(dlgFile); assert(_cnvFile); diff --git a/engines/lastexpress/data/animation.cpp b/engines/lastexpress/data/animation.cpp index 8ce73993c3..1cbf7672d1 100644 --- a/engines/lastexpress/data/animation.cpp +++ b/engines/lastexpress/data/animation.cpp @@ -94,7 +94,7 @@ bool Animation::load(Common::SeekableReadStream *stream, int flag) { } _currentChunk = _chunks.begin(); _changed = false; - _startTime = g_engine->_system->getMillis(); + _startTime = g_system->getMillis(); return true; } @@ -110,7 +110,7 @@ bool Animation::process() { // - Re-implement to be closer to the original engine // - Add support for subtitles // - Use engine sound queue instead of our own appendable sound instance - int32 currentFrame = (g_engine->_system->getMillis() - _startTime) * 3 / 100; + int32 currentFrame = (g_system->getMillis() - _startTime) * 3 / 100; // Process all chunks until the current frame while (!_changed && _currentChunk != NULL && currentFrame > _currentChunk->frame && !hasEnded()) { @@ -180,7 +180,7 @@ bool Animation::process() { // Synchronize the audio by resetting the start time if (_currentChunk->frame == 0) - _startTime = g_engine->_system->getMillis(); + _startTime = g_system->getMillis(); break; case kChunkTypeAudioEnd: @@ -260,7 +260,8 @@ void Animation::processChunkAudio(Common::SeekableReadStream *in, const Chunk &c // TODO: this method will probably go away and be integrated in the main loop void Animation::play() { - while (!hasEnded() && !g_engine->getEventManager()->shouldQuit() && !g_engine->getEventManager()->shouldRTL()) { + Common::EventManager *eventMan = g_system->getEventManager(); + while (!hasEnded() && !Engine::shouldQuit()) { process(); if (_changed) { @@ -283,11 +284,11 @@ void Animation::play() { g_system->updateScreen(); //FIXME: implement subtitles - g_engine->_system->delayMillis(20); + g_system->delayMillis(20); // Handle right-click to interrupt animations Common::Event ev = Common::Event(); - while (g_engine->getEventManager()->pollEvent(ev)) { + while (eventMan->pollEvent(ev)) { if (ev.type == Common::EVENT_RBUTTONUP) { // Stop audio if (_audio) diff --git a/engines/lastexpress/debug.cpp b/engines/lastexpress/debug.cpp index e1bd9494a9..4b7c5f6a9a 100644 --- a/engines/lastexpress/debug.cpp +++ b/engines/lastexpress/debug.cpp @@ -865,7 +865,7 @@ bool Debugger::cmdBeetle(int argc, const char **argv) { askForRedraw(); redrawScreen(); - while (g_engine->getEventManager()->pollEvent(ev)) { + while (g_system->getEventManager()->pollEvent(ev)) { switch (ev.type) { default: diff --git a/engines/lastexpress/detection.cpp b/engines/lastexpress/detection.cpp index 7c7c6b0a36..de80e75341 100644 --- a/engines/lastexpress/detection.cpp +++ b/engines/lastexpress/detection.cpp @@ -21,6 +21,7 @@ */ #include "lastexpress/lastexpress.h" +#include "engines/advancedDetector.h" namespace LastExpress { @@ -46,7 +47,7 @@ static const ADGameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, @@ -64,7 +65,7 @@ static const ADGameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, @@ -82,7 +83,7 @@ static const ADGameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, @@ -97,7 +98,7 @@ static const ADGameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformUnknown, - ADGF_DEMO, + ADGF_DEMO | ADGF_UNSTABLE, Common::GUIO_NONE }, @@ -115,7 +116,7 @@ static const ADGameDescription gameDescriptions[] = { }, Common::FR_FRA, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, @@ -133,7 +134,7 @@ static const ADGameDescription gameDescriptions[] = { }, Common::DE_DEU, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, @@ -151,7 +152,7 @@ static const ADGameDescription gameDescriptions[] = { }, Common::ES_ESP, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, @@ -169,42 +170,20 @@ static const ADGameDescription gameDescriptions[] = { }, Common::IT_ITA, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, AD_TABLE_END_MARKER }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)gameDescriptions, - // Size of that superset structure - sizeof(ADGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - lastExpressGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "lastexpress", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NOSUBTITLES | Common::GUIO_NOSFX, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class LastExpressMetaEngine : public AdvancedMetaEngine { public: - LastExpressMetaEngine() : AdvancedMetaEngine(detectionParams) {} + LastExpressMetaEngine() : AdvancedMetaEngine(gameDescriptions, sizeof(ADGameDescription), lastExpressGames) { + _singleid = "lastexpress"; + _guioptions = Common::GUIO_NOSUBTITLES | Common::GUIO_NOSFX; + } const char *getName() const { return "Lastexpress"; @@ -224,6 +203,10 @@ bool LastExpressMetaEngine::createInstance(OSystem *syst, Engine **engine, const return gd != 0; } +bool LastExpressEngine::isDemo() const { + return (bool)(_gameDescription->flags & ADGF_DEMO); +} + } // End of namespace LastExpress #if PLUGIN_ENABLED_DYNAMIC(LASTEXPRESS) diff --git a/engines/lastexpress/game/sound.cpp b/engines/lastexpress/game/sound.cpp index 81ed97481c..3f98ac79ea 100644 --- a/engines/lastexpress/game/sound.cpp +++ b/engines/lastexpress/game/sound.cpp @@ -699,7 +699,6 @@ bool SoundManager::playSoundWithSubtitles(Common::String filename, FlagType flag } void SoundManager::playSoundEvent(EntityIndex entity, byte action, byte a3) { - char filename[12]; int values[5]; if (getEntityData(entity)->car != getEntityData(kEntityPlayer)->car) @@ -821,12 +820,8 @@ void SoundManager::playSoundEvent(EntityIndex entity, byte action, byte a3) { break; } - if (_action) { - sprintf((char *)&filename, "LIB%03d.SND", _action); - - if (flag) - playSoundWithSubtitles((char*)&filename, flag, kEntityPlayer, a3); - } + if (_action && flag) + playSoundWithSubtitles(Common::String::format("LIB%03d.SND", _action), flag, kEntityPlayer, a3); } void SoundManager::playSteam(CityIndex index) { @@ -846,7 +841,6 @@ void SoundManager::playSteam(CityIndex index) { void SoundManager::playFightSound(byte action, byte a4) { int _action = (int)action; - char filename[12]; int values[5]; switch (action) { @@ -885,10 +879,8 @@ void SoundManager::playFightSound(byte action, byte a4) { break; } - if (_action) { - sprintf((char *)&filename, "LIB%03d.SND", _action); - playSound(kEntityTrain, (char*)&filename, kFlagDefault, a4); - } + if (_action) + playSound(kEntityTrain, Common::String::format("LIB%03d.SND", _action), kFlagDefault, a4); } void SoundManager::playDialog(EntityIndex entity, EntityIndex entityDialog, FlagType flag, byte a4) { diff --git a/engines/lastexpress/lastexpress.cpp b/engines/lastexpress/lastexpress.cpp index d195fcfad3..e162998719 100644 --- a/engines/lastexpress/lastexpress.cpp +++ b/engines/lastexpress/lastexpress.cpp @@ -37,6 +37,8 @@ #include "common/config-manager.h" #include "common/debug-channels.h" +#include "common/error.h" +#include "common/fs.h" #include "engines/util.h" @@ -314,8 +316,4 @@ bool LastExpressEngine::hasFeature(EngineFeature f) const { return (f == kSupportsRTL); } -void LastExpressEngine::errorString(const char *buf_input, char *buf_output, int buf_output_size) { - snprintf(buf_output, (uint)buf_output_size, "%s", buf_input); -} - } // End of namespace LastExpress diff --git a/engines/lastexpress/lastexpress.h b/engines/lastexpress/lastexpress.h index 270ab655a1..f8f38788a0 100644 --- a/engines/lastexpress/lastexpress.h +++ b/engines/lastexpress/lastexpress.h @@ -29,11 +29,12 @@ #include "common/random.h" #include "common/timer.h" -#include "engines/advancedDetector.h" #include "engines/engine.h" #include "graphics/pixelformat.h" +struct ADGameDescription; + /** * This is the namespace of the LastExpress engine. * @@ -71,7 +72,6 @@ class LastExpressEngine : public Engine { protected: // Engine APIs Common::Error run(); - virtual void errorString(const char *buf_input, char *buf_output, int buf_output_size); virtual bool hasFeature(EngineFeature f) const; virtual Debugger *getDebugger() { return _debugger; } @@ -102,7 +102,7 @@ public: void restoreEventHandlers(); void setEventHandlers(EventHandler::EventFunction *eventMouse, EventHandler::EventFunction *eventTick); - bool isDemo() const { return (bool)(_gameDescription->flags & ADGF_DEMO); } + bool isDemo() const; // Frame Counter uint32 getFrameCounter() { return _frameCounter; } diff --git a/engines/lure/debugger.cpp b/engines/lure/debugger.cpp index 9d54bccb49..68410875f7 100644 --- a/engines/lure/debugger.cpp +++ b/engines/lure/debugger.cpp @@ -534,7 +534,7 @@ bool Debugger::cmd_showAnim(int argc, const char **argv) { } // Bottle object is used as a handy hotspot holder that doesn't have any - // tick proc behaviour that we need to worry about + // tick proc behavior that we need to worry about Hotspot *hotspot = res.activateHotspot(BOTTLE_HOTSPOT_ID); hotspot->setLayer(0xfe); hotspot->setSize(width, height); diff --git a/engines/lure/decode.cpp b/engines/lure/decode.cpp index 3e139a10d6..59390e6e91 100644 --- a/engines/lure/decode.cpp +++ b/engines/lure/decode.cpp @@ -131,7 +131,7 @@ MemoryBlock *PictureDecoder::egaDecode(MemoryBlock *src, uint32 maxOutputSize) { READ_BIT_DX if (!bitFlag) { - // Get the favourite color + // Get the favorite color v = popTable[tableOffset]; } else { @@ -143,7 +143,7 @@ MemoryBlock *PictureDecoder::egaDecode(MemoryBlock *src, uint32 maxOutputSize) { READ_BIT_DX if (bitFlag) { - // We have no favourite. Could this be a repeat? + // We have no favorite. Could this be a repeat? al = dx >> 11; READ_BITS(5); @@ -184,7 +184,7 @@ MemoryBlock *PictureDecoder::egaDecode(MemoryBlock *src, uint32 maxOutputSize) { } } else { - // Fourth favourite + // Fourth favorite v = popTable[tableOffset + 96]; } @@ -193,10 +193,10 @@ MemoryBlock *PictureDecoder::egaDecode(MemoryBlock *src, uint32 maxOutputSize) { READ_BIT_DX if (bitFlag) { - // Third favourite + // Third favorite v = popTable[tableOffset + 64]; } else { - // Second favourite + // Second favorite v = popTable[tableOffset + 32]; } } diff --git a/engines/lure/detection.cpp b/engines/lure/detection.cpp index 4d03148e31..081625863d 100644 --- a/engines/lure/detection.cpp +++ b/engines/lure/detection.cpp @@ -175,34 +175,17 @@ static const LureGameDescription gameDescriptions[] = { } // End of namespace Lure -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Lure::gameDescriptions, - // Size of that superset structure - sizeof(Lure::LureGameDescription), - // Number of bytes to compute MD5 sum for - 1024, - // List of all engine targets - lureGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "lure", - // List of files for file-based fallback detection (optional) - 0, - // Flags - kADFlagUseExtraAsHint, - // Additional GUI options (for every game} - Common::GUIO_NOSPEECH, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class LureMetaEngine : public AdvancedMetaEngine { public: - LureMetaEngine() : AdvancedMetaEngine(detectionParams) {} + LureMetaEngine() : AdvancedMetaEngine(Lure::gameDescriptions, sizeof(Lure::LureGameDescription), lureGames) { + _md5Bytes = 1024; + _singleid = "lure"; + + // Use kADFlagUseExtraAsHint to distinguish between EGA and VGA versions + // of italian Lure when their datafiles sit in the same directory. + _flags = kADFlagUseExtraAsHint; + _guioptions = Common::GUIO_NOSPEECH; + } virtual const char *getName() const { return "Lure"; @@ -271,11 +254,8 @@ SaveStateList LureMetaEngine::listSaves(const char *target) const { int LureMetaEngine::getMaximumSaveSlot() const { return 999; } void LureMetaEngine::removeSaveState(const char *target, int slot) const { - char extension[6]; - snprintf(extension, sizeof(extension), ".%03d", slot); - Common::String filename = target; - filename += extension; + filename += Common::String::format(".%03d", slot); g_system->getSavefileManager()->removeSavefile(filename); } diff --git a/engines/lure/lure.cpp b/engines/lure/lure.cpp index c6be5c48fe..3217cf039d 100644 --- a/engines/lure/lure.cpp +++ b/engines/lure/lure.cpp @@ -51,7 +51,7 @@ LureEngine::LureEngine(OSystem *system, const LureGameDescription *gameDesc) Common::Error LureEngine::init() { int_engine = this; - _initialised = false; + _initialized = false; _saveLoadAllowed = false; initGraphics(FULL_SCREEN_WIDTH, FULL_SCREEN_HEIGHT, false); @@ -85,12 +85,12 @@ Common::Error LureEngine::init() { _mouse = new Mouse(); _events = new Events(); _menu = new Menu(); - Surface::initialise(); + Surface::initialize(); _room = new Room(); _fights = new FightsManager(); _gameToLoad = -1; - _initialised = true; + _initialized = true; // Setup mixer syncSoundSettings(); @@ -102,9 +102,9 @@ LureEngine::~LureEngine() { // Remove all of our debug levels here DebugMan.clearAllDebugChannels(); - if (_initialised) { - // Delete and deinitialise subsystems - Surface::deinitialise(); + if (_initialized) { + // Delete and deinitialize subsystems + Surface::deinitialize(); Sound.destroy(); delete _fights; delete _room; diff --git a/engines/lure/lure.h b/engines/lure/lure.h index 53fdb8c713..34bb9f1639 100644 --- a/engines/lure/lure.h +++ b/engines/lure/lure.h @@ -65,7 +65,7 @@ struct LureGameDescription; class LureEngine : public Engine { private: - bool _initialised; + bool _initialized; int _gameToLoad; uint8 _saveVersion; Disk *_disk; @@ -123,7 +123,7 @@ public: virtual Common::Error loadGameState(int slot) { return loadGame(slot) ? Common::kReadingFailed : Common::kNoError; } - virtual Common::Error saveGameState(int slot, const char *desc) { + virtual Common::Error saveGameState(int slot, const Common::String &desc) { Common::String s(desc); return saveGame(slot, s) ? Common::kReadingFailed : Common::kNoError; } diff --git a/engines/lure/res.cpp b/engines/lure/res.cpp index 31c4efa2aa..fbf9f33b87 100644 --- a/engines/lure/res.cpp +++ b/engines/lure/res.cpp @@ -345,7 +345,7 @@ void Resources::reloadData() { } delete mb; - // Initialise delay list + // Initialize delay list _delayList.clear(true); // Load miscellaneous data diff --git a/engines/lure/res_struct.cpp b/engines/lure/res_struct.cpp index 0d9d75b00b..222f55b5dc 100644 --- a/engines/lure/res_struct.cpp +++ b/engines/lure/res_struct.cpp @@ -415,7 +415,7 @@ HotspotData::HotspotData(HotspotResource *rec) { flags2 = READ_LE_UINT16(&rec->flags2); headerFlags = READ_LE_UINT16(&rec->hdrFlags); - // Initialise runtime fields + // Initialize runtime fields actionCtr = 0; blockedState = BS_NONE; blockedFlag = false; diff --git a/engines/lure/sound.h b/engines/lure/sound.h index 58b4a68966..9fa9a91260 100644 --- a/engines/lure/sound.h +++ b/engines/lure/sound.h @@ -153,7 +153,7 @@ public: uint sfxVolume() const { return _sfxVolume; } // The following methods implement the external sound player module - void musicInterface_Initialise(); + void musicInterface_Initialize(); void musicInterface_Play(uint8 soundNumber, uint8 channelNumber, uint8 numChannels = 4); void musicInterface_Stop(uint8 soundNumber); bool musicInterface_CheckPlaying(uint8 soundNumber); diff --git a/engines/lure/surface.cpp b/engines/lure/surface.cpp index 106b62b7a4..bfada8fde6 100644 --- a/engines/lure/surface.cpp +++ b/engines/lure/surface.cpp @@ -33,8 +33,8 @@ namespace Lure { -// These variables hold resources commonly used by the Surfaces, and must be initialised and freed -// by the static Surface methods initialise and deinitailse +// These variables hold resources commonly used by the Surfaces, and must be initialized and freed +// by the static Surface methods initialize and deinitailse static MemoryBlock *int_font = NULL; static MemoryBlock *int_dialog_frame = NULL; @@ -45,7 +45,7 @@ static const byte char8A[8] = {0x40, 0x20, 0x00, 0x90, 0x90, 0x90, 0x68, 0x00}; static const byte char8D[8] = {0x80, 0x40, 0x00, 0xc0, 0x40, 0x40, 0x60, 0x00}; // accented `i static const byte char95[8] = {0x40, 0x20, 0x00, 0x60, 0x90, 0x90, 0x60, 0x00}; // accented `o -void Surface::initialise() { +void Surface::initialize() { Disk &disk = Disk::getReference(); int_font = disk.getEntry(FONT_RESOURCE_ID); int_dialog_frame = disk.getEntry(DIALOG_RESOURCE_ID); @@ -80,7 +80,7 @@ void Surface::initialise() { } } -void Surface::deinitialise() { +void Surface::deinitialize() { delete int_font; delete int_dialog_frame; } diff --git a/engines/lure/surface.h b/engines/lure/surface.h index 56af37c049..d56e37632b 100644 --- a/engines/lure/surface.h +++ b/engines/lure/surface.h @@ -49,8 +49,8 @@ public: static void getDialogBounds(Common::Point &size, int charWidth, int numLines, bool squashedLines = true); - static void initialise(); - static void deinitialise(); + static void initialize(); + static void deinitialize(); uint16 width() { return _width; } uint16 height() { return _height; } diff --git a/engines/m4/animation.cpp b/engines/m4/animation.cpp index c89f74bd0a..39a3f175cd 100644 --- a/engines/m4/animation.cpp +++ b/engines/m4/animation.cpp @@ -61,9 +61,9 @@ MadsAnimation::~MadsAnimation() { #define FILENAME_SIZE 13 /** - * Initialises and loads the data of an animation + * Initializes and loads the data of an animation */ -void MadsAnimation::initialise(const Common::String &filename, uint16 flags, M4Surface *surface, M4Surface *depthSurface) { +void MadsAnimation::initialize(const Common::String &filename, uint16 flags, M4Surface *surface, M4Surface *depthSurface) { MadsPack anim(filename.c_str(), _vm); bool madsRes = filename[0] == '*'; char buffer[20]; @@ -131,7 +131,7 @@ void MadsAnimation::initialise(const Common::String &filename, uint16 flags, M4S if (flags & 0x100) loadInterface(surface, depthSurface); - // Initialise the reference list + // Initialize the reference list for (int i = 0; i < spriteListCount; ++i) _spriteListIndexes.push_back(-1); @@ -266,7 +266,7 @@ void MadsAnimation::initialise(const Common::String &filename, uint16 flags, M4S * Loads an animation file for display */ void MadsAnimation::load(const Common::String &filename, int abortTimers) { - initialise(filename, 0, NULL, NULL); + initialize(filename, 0, NULL, NULL); _messageCtr = 0; _skipLoad = true; @@ -279,7 +279,7 @@ void MadsAnimation::load(const Common::String &filename, int abortTimers) { } */ - // Initialise miscellaneous fields + // Initialize miscellaneous fields _currentFrame = 0; _oldFrameEntry = 0; _nextFrameTimer = _madsVm->_currentTimer; @@ -289,7 +289,7 @@ void MadsAnimation::load(const Common::String &filename, int abortTimers) { if (_madsVm->_scene) _actionNouns = _madsVm->scene()->_action._action; - // Initialise kernel message list + // Initialize kernel message list for (uint i = 0; i < _messages.size(); ++i) _messages[i].kernelMsgIndex = -1; } diff --git a/engines/m4/animation.h b/engines/m4/animation.h index ed6f49786d..68a2883241 100644 --- a/engines/m4/animation.h +++ b/engines/m4/animation.h @@ -111,7 +111,7 @@ public: MadsAnimation(MadsM4Engine *vm, MadsView *view); virtual ~MadsAnimation(); - virtual void initialise(const Common::String &filename, uint16 flags, M4Surface *surface, M4Surface *depthSurface); + virtual void initialize(const Common::String &filename, uint16 flags, M4Surface *surface, M4Surface *depthSurface); virtual void load(const Common::String &filename, int abortTimers); virtual void update(); virtual void setCurrentFrame(int frameNumber); diff --git a/engines/m4/compression.cpp b/engines/m4/compression.cpp index 4ec9fae32f..65a25c14e3 100644 --- a/engines/m4/compression.cpp +++ b/engines/m4/compression.cpp @@ -44,16 +44,16 @@ bool MadsPack::isCompressed(Common::SeekableReadStream *stream) { } MadsPack::MadsPack(Common::SeekableReadStream *stream) { - initialise(stream); + initialize(stream); } MadsPack::MadsPack(const char *resourceName, MadsM4Engine* vm) { Common::SeekableReadStream *stream = vm->_resourceManager->get(resourceName); - initialise(stream); + initialize(stream); vm->_resourceManager->toss(resourceName); } -void MadsPack::initialise(Common::SeekableReadStream *stream) { +void MadsPack::initialize(Common::SeekableReadStream *stream) { if (!MadsPack::isCompressed(stream)) error("Attempted to decompress a resource that was not MadsPacked"); @@ -121,7 +121,7 @@ void FabDecompressor::decompress(const byte *srcData, int srcSize, byte *destDat copyOfs = 0xFFFF0000; destP = destData; - // Initialise data fields + // Initialize data fields _srcData = srcData; _srcP = _srcData + 6; _srcSize = srcSize; diff --git a/engines/m4/compression.h b/engines/m4/compression.h index a24a41da3c..cb0ef74eb7 100644 --- a/engines/m4/compression.h +++ b/engines/m4/compression.h @@ -45,7 +45,7 @@ private: int _count; int _dataOffset; - void initialise(Common::SeekableReadStream *stream); + void initialize(Common::SeekableReadStream *stream); public: static bool isCompressed(Common::SeekableReadStream *stream); MadsPack(Common::SeekableReadStream *stream); diff --git a/engines/m4/console.cpp b/engines/m4/console.cpp index 6f45f11f5a..fa4ca6d121 100644 --- a/engines/m4/console.cpp +++ b/engines/m4/console.cpp @@ -267,7 +267,7 @@ bool MadsConsole::cmdObject(int argc, const char **argv) { DebugPrintf("%2d - ", objStart); for (uint objId = objStart; objId < MIN<uint>(_vm->globals()->getObjectsSize(), objStart + 5); ++objId) { if (objId != objStart) DebugPrintf(", "); - uint16 descId = _vm->globals()->getObject(objId)->descId; + uint16 descId = _vm->globals()->getObject(objId)->_descId; DebugPrintf("%s", _vm->globals()->getVocab(descId)); } @@ -297,15 +297,15 @@ bool MadsConsole::cmdObject(int argc, const char **argv) { else { const MadsObject *obj = _vm->globals()->getObject(objNum); - DebugPrintf("Object #%d (%s) room=%d article=%d/%s vocabs=%d", objNum, _vm->globals()->getVocab(obj->descId), - obj->roomNumber, (int)obj->article, englishMADSArticleList[obj->article], obj->vocabCount); + DebugPrintf("Object #%d (%s) room=%d article=%d/%s vocabs=%d", objNum, _vm->globals()->getVocab(obj->_descId), + obj->_roomNumber, (int)obj->_article, englishMADSArticleList[obj->_article], obj->_vocabCount); - if (obj->vocabCount > 0) { + if (obj->_vocabCount > 0) { DebugPrintf(" - "); - for (int i = 0; i < obj->vocabCount; ++i) { + for (int i = 0; i < obj->_vocabCount; ++i) { if (i != 0) DebugPrintf(", "); - DebugPrintf("%s (%d)/%d,%d", _vm->globals()->getVocab(obj->vocabList[i].vocabId), - obj->vocabList[i].vocabId, obj->vocabList[i].flags1, obj->vocabList[i].flags2); + DebugPrintf("%s (%d)/%d,%d", _vm->globals()->getVocab(obj->_vocabList[i].vocabId), + obj->_vocabList[i].vocabId, obj->_vocabList[i].flags1, obj->_vocabList[i].flags2); } } DebugPrintf("\n"); diff --git a/engines/m4/detection.cpp b/engines/m4/detection.cpp index 1aefe3d02d..9c359c081f 100644 --- a/engines/m4/detection.cpp +++ b/engines/m4/detection.cpp @@ -79,7 +79,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NONE }, GType_Burger, @@ -95,7 +95,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::DE_DEU, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NONE }, GType_Burger, @@ -111,7 +111,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::RU_RUS, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NONE }, GType_Burger, @@ -127,7 +127,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_DEMO, + ADGF_DEMO | ADGF_UNSTABLE, GUIO_NONE }, GType_Burger, @@ -143,7 +143,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_DEMO, + ADGF_DEMO | ADGF_UNSTABLE, GUIO_NONE }, GType_Burger, @@ -159,7 +159,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NONE }, GType_Riddle, @@ -175,7 +175,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NONE }, GType_Riddle, @@ -191,7 +191,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::DE_DEU, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NONE }, GType_Riddle, @@ -207,7 +207,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::FR_FRA, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NONE }, GType_Riddle, @@ -223,7 +223,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::ES_ESP, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NONE }, GType_Riddle, @@ -239,7 +239,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_DEMO, + ADGF_DEMO | ADGF_UNSTABLE, GUIO_NONE }, GType_Riddle, @@ -255,7 +255,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NOSPEECH }, GType_RexNebular, @@ -271,7 +271,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_DEMO, + ADGF_DEMO | ADGF_UNSTABLE, GUIO_NONE }, GType_RexNebular, @@ -287,7 +287,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NOSPEECH }, GType_DragonSphere, @@ -304,7 +304,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NONE }, GType_DragonSphere, @@ -320,7 +320,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_DEMO, + ADGF_DEMO | ADGF_UNSTABLE, GUIO_NONE }, GType_DragonSphere, @@ -336,7 +336,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NOSPEECH }, GType_Phantom, @@ -352,7 +352,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NONE }, GType_Phantom, @@ -368,7 +368,7 @@ static const M4GameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_DEMO, + ADGF_DEMO | ADGF_UNSTABLE, GUIO_NONE }, GType_Phantom, @@ -384,34 +384,14 @@ static const char *directoryGlobs[] = { 0 }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)M4::gameDescriptions, - // Size of that superset structure - sizeof(M4::M4GameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - m4Games, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "m4", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NOMIDI, - // Maximum directory depth - 2, - // List of directory globs - directoryGlobs -}; - class M4MetaEngine : public AdvancedMetaEngine { public: - M4MetaEngine() : AdvancedMetaEngine(detectionParams) {} + M4MetaEngine() : AdvancedMetaEngine(M4::gameDescriptions, sizeof(M4::M4GameDescription), m4Games) { + _singleid = "m4"; + _guioptions = Common::GUIO_NOMIDI; + _maxScanDepth = 2; + _directoryGlobs = directoryGlobs; + } virtual const char *getName() const { return "MADS/M4"; diff --git a/engines/m4/globals.cpp b/engines/m4/globals.cpp index 58cadb3c9f..bf2c3abe1c 100644 --- a/engines/m4/globals.cpp +++ b/engines/m4/globals.cpp @@ -154,24 +154,24 @@ void Kernel::loadGlobalScriptFunctions() { } void Kernel::loadSectionScriptFunctions() { - char tempFnName[128]; - snprintf(tempFnName, 128, "section_init_%d", currentSection); + Common::String tempFnName; + tempFnName = Common::String::format("section_init_%d", currentSection); _sectionInitFn = _vm->_script->loadFunction(tempFnName); - snprintf(tempFnName, 128, "section_daemon_%d", currentSection); + tempFnName = Common::String::format("section_daemon_%d", currentSection); _sectionDaemonFn = _vm->_script->loadFunction(tempFnName); - snprintf(tempFnName, 128, "section_parser_%d", currentSection); + tempFnName = Common::String::format("section_parser_%d", currentSection); _sectionParserFn = _vm->_script->loadFunction(tempFnName); } void Kernel::loadRoomScriptFunctions() { - char tempFnName[128]; - snprintf(tempFnName, 128, "room_init_%d", currentRoom); + Common::String tempFnName; + tempFnName = Common::String::format("room_init_%d", currentRoom); _roomInitFn = _vm->_script->loadFunction(tempFnName); - snprintf(tempFnName, 128, "room_daemon_%d", currentRoom); + tempFnName = Common::String::format("room_daemon_%d", currentRoom); _roomDaemonFn = _vm->_script->loadFunction(tempFnName); - snprintf(tempFnName, 128, "room_pre_parser_%d", currentRoom); + tempFnName = Common::String::format("room_pre_parser_%d", currentRoom); _roomPreParserFn = _vm->_script->loadFunction(tempFnName); - snprintf(tempFnName, 128, "room_parser_%d", currentRoom); + tempFnName = Common::String::format("room_parser_%d", currentRoom); _roomParserFn = _vm->_script->loadFunction(tempFnName); } @@ -523,19 +523,23 @@ void MadsObject::load(Common::SeekableReadStream *stream) { stream->read(obj, 0x30); // Extract object data fields - descId = READ_LE_UINT16(&obj[0]); - roomNumber = READ_LE_UINT16(&obj[2]); - article = (MADSArticles)obj[4]; - vocabCount = obj[5] & 0x7f; + _descId = READ_LE_UINT16(&obj[0]); + _roomNumber = READ_LE_UINT16(&obj[2]); + _article = (MADSArticles)obj[4]; + _vocabCount = obj[5] & 0x7f; // Phantom / Dragon - if (vocabCount > 3) - warning("MadsObject::load(), vocab cound > 3 (it's %d)", vocabCount); + if (_vocabCount > 3) + warning("MadsObject::load(), vocab cound > 3 (it's %d)", _vocabCount); - for (int i = 0; i < vocabCount; ++i) { - vocabList[i].flags1 = obj[6 + i * 4]; - vocabList[i].flags2 = obj[7 + i * 4]; - vocabList[i].vocabId = READ_LE_UINT16(&obj[8 + i * 4]); + for (int i = 0; i < _vocabCount; ++i) { + _vocabList[i].flags1 = obj[6 + i * 4]; + _vocabList[i].flags2 = obj[7 + i * 4]; + _vocabList[i].vocabId = READ_LE_UINT16(&obj[8 + i * 4]); } } +void MadsObject::setRoom(int roomNumber) { + +} + } // End of namespace M4 diff --git a/engines/m4/globals.h b/engines/m4/globals.h index a95e5169be..ae2941c169 100644 --- a/engines/m4/globals.h +++ b/engines/m4/globals.h @@ -177,13 +177,14 @@ public: MadsObject() {} MadsObject(Common::SeekableReadStream *stream); void load(Common::SeekableReadStream *stream); - bool isInInventory() const { return roomNumber == PLAYER_INVENTORY; } - - uint16 descId; - uint16 roomNumber; - MADSArticles article; - uint8 vocabCount; - VocabEntry vocabList[3]; + bool isInInventory() const { return _roomNumber == PLAYER_INVENTORY; } + void setRoom(int roomNumber); + + uint16 _descId; + uint16 _roomNumber; + MADSArticles _article; + uint8 _vocabCount; + VocabEntry _vocabList[3]; }; typedef Common::Array<Common::SharedPtr<MadsObject> > MadsObjectArray; diff --git a/engines/m4/gui.h b/engines/m4/gui.h index 99b44a3af7..2b673d624c 100644 --- a/engines/m4/gui.h +++ b/engines/m4/gui.h @@ -443,7 +443,7 @@ public: GameInterfaceView(MadsM4Engine *vm, const Common::Rect &rect): View(vm, rect) {} ~GameInterfaceView() {} - virtual void initialise() {} + virtual void initialize() {} virtual void setSelectedObject(int objectNumber) {} virtual void addObjectToInventory(int objectNumber) {} }; diff --git a/engines/m4/m4.cpp b/engines/m4/m4.cpp index d456accca1..93f5ab4cba 100644 --- a/engines/m4/m4.cpp +++ b/engines/m4/m4.cpp @@ -530,7 +530,7 @@ Common::Error MadsEngine::run() { //debugCN(kDebugCore, "%s\n----------\n", _globals->loadMessage(i)); if (getGameType() == GType_RexNebular) { - MadsGameLogic::initialiseGlobals(); + MadsGameLogic::initializeGlobals(); _scene = NULL; loadMenu(MAIN_MENU); diff --git a/engines/m4/m4.h b/engines/m4/m4.h index 4c9b100117..18c3936db8 100644 --- a/engines/m4/m4.h +++ b/engines/m4/m4.h @@ -223,7 +223,7 @@ public: void startScene(int sceneNum) { if (!_scene) { _scene = new MadsScene(this); - ((MadsScene *)_scene)->initialise(); + ((MadsScene *)_scene)->initialize(); } _scene->show(); _scene->loadScene(101); diff --git a/engines/m4/m4_menus.cpp b/engines/m4/m4_menus.cpp index 787d8666f6..3384a82c8b 100644 --- a/engines/m4/m4_menus.cpp +++ b/engines/m4/m4_menus.cpp @@ -22,6 +22,7 @@ #include "common/algorithm.h" // for find() #include "common/textconsole.h" +#include "common/translation.h" #include "gui/dialog.h" #include "gui/message.h" @@ -134,7 +135,7 @@ void OrionCallbacks::saveLoadSaveFn(DialogView *view, MenuObject *item) { bool succeeded = view->vm()->_saveLoad->save(view->_selectedSlot + 1, textItem->getText()); if (!succeeded) { - GUI::MessageDialog dialog("Save game failed!"); + GUI::MessageDialog dialog(_("Save game failed!")); dialog.runModal(); } diff --git a/engines/m4/mads_anim.cpp b/engines/m4/mads_anim.cpp index dc2758bedc..d35b31943a 100644 --- a/engines/m4/mads_anim.cpp +++ b/engines/m4/mads_anim.cpp @@ -603,7 +603,7 @@ static bool tempFlag = true;//****DEBUG - Temporarily allow me to skip several i flags |= 0x100; _activeAnimation = new MadsAnimation(_vm, this); - _activeAnimation->initialise(_currentLine, flags, &_backgroundSurface, &_codeSurface); + _activeAnimation->initialize(_currentLine, flags, &_backgroundSurface, &_codeSurface); if (_startFrame != -1) _activeAnimation->setCurrentFrame(_startFrame); diff --git a/engines/m4/mads_logic.cpp b/engines/m4/mads_logic.cpp index a28d38080b..b1e57bd7f3 100644 --- a/engines/m4/mads_logic.cpp +++ b/engines/m4/mads_logic.cpp @@ -31,7 +31,7 @@ namespace M4 { -void MadsGameLogic::initialiseGlobals() { +void MadsGameLogic::initializeGlobals() { // Clear the entire globals list Common::set_to(&_madsVm->globals()->_globals[0], &_madsVm->globals()->_globals[TOTAL_NUM_VARIABLES], 0); @@ -170,7 +170,7 @@ const char *MadsSceneLogic::_opcodeStrings[] = { * convert game specific offsets for various fields in the original game's data segment into a generic data index * that will be common across all the MADS games -void MadsSceneLogic::initialiseDataMap() { +void MadsSceneLogic::initializeDataMap() { // The unique order of these items must be maintained } */ @@ -382,7 +382,7 @@ void MadsSceneLogic::getPlayerSpritesPrefix2() { /** * Loads the MADS.DAT file and loads the script data for the correct game/language */ -void MadsSceneLogic::initialiseScripts() { +void MadsSceneLogic::initializeScripts() { Common::File f; if (!f.open("mads.dat")) { warning("Could not locate mads.dat file"); @@ -951,7 +951,7 @@ void MadsSceneLogic::callSubroutine(int subIndex, Common::Stack<ScriptVar> &stac // object_is_present EXTRACT_PARAMS(1); const MadsObject *obj = _madsVm->globals()->getObject(p[0]); - stack.push(ScriptVar((obj->roomNumber == _madsVm->scene()->_currentScene))); + stack.push(ScriptVar((obj->_roomNumber == _madsVm->scene()->_currentScene))); break; } @@ -978,6 +978,14 @@ void MadsSceneLogic::callSubroutine(int subIndex, Common::Stack<ScriptVar> &stac break; } + case 26: { + // object_set_room + EXTRACT_PARAMS(2); + MadsObject *obj = _madsVm->globals()->getObject(p[0]); + obj->setRoom(p[1]); + break; + } + default: error("Unknown subroutine %d called", subIndex); break; diff --git a/engines/m4/mads_logic.h b/engines/m4/mads_logic.h index 016adb2ebf..3132094252 100644 --- a/engines/m4/mads_logic.h +++ b/engines/m4/mads_logic.h @@ -92,7 +92,7 @@ public: MadsSceneLogic() { _scriptsData = NULL; } ~MadsSceneLogic() { delete _scriptsData; } - void initialiseScripts(); + void initializeScripts(); void selectScene(int sceneNum); void setupScene(); @@ -109,7 +109,7 @@ public: class MadsGameLogic { public: - static void initialiseGlobals(); + static void initializeGlobals(); }; } diff --git a/engines/m4/mads_menus.cpp b/engines/m4/mads_menus.cpp index a6e2b77253..fa65329d76 100644 --- a/engines/m4/mads_menus.cpp +++ b/engines/m4/mads_menus.cpp @@ -596,18 +596,18 @@ RexDialogView::RexDialogView(): View(_madsVm, Common::Rect(0, 0, _madsVm->_scree MadsView(this) { _screenType = VIEWID_MENU; - // Initialise class variables + // Initialize class variables _priorSceneId = _madsVm->_scene->getCurrentScene(); _dialogType = DIALOG_NONE; // Load necessary quotes _madsVm->globals()->loadQuoteRange(1, 48); - initialiseLines(); - initialiseGraphics(); + initializeLines(); + initializeGraphics(); } -void RexDialogView::initialiseLines() { +void RexDialogView::initializeLines() { // Set up a list of blank entries for use in the various dialogs for (int i = 0; i < DIALOG_LINES_SIZE; ++i) { DialogTextEntry rec; @@ -622,7 +622,7 @@ void RexDialogView::initialiseLines() { _spriteSlots[0].seqIndex = -1; } -void RexDialogView::initialiseGraphics() { +void RexDialogView::initializeGraphics() { // Set needed palette entries _madsVm->_palette->blockRange(0, 16); _madsVm->_palette->setEntry(10, 0, 255, 0); diff --git a/engines/m4/mads_menus.h b/engines/m4/mads_menus.h index 766767dc84..4d3ea5da39 100644 --- a/engines/m4/mads_menus.h +++ b/engines/m4/mads_menus.h @@ -117,8 +117,8 @@ class RexDialogView : public View, public MadsView { private: int _priorSceneId; - void initialiseLines(); - void initialiseGraphics(); + void initializeLines(); + void initializeGraphics(); void loadBackground(); void loadMenuSprites(); protected: diff --git a/engines/m4/mads_scene.cpp b/engines/m4/mads_scene.cpp index b305242bbb..a0acbdd69d 100644 --- a/engines/m4/mads_scene.cpp +++ b/engines/m4/mads_scene.cpp @@ -94,12 +94,12 @@ void MadsScene::loadScene2(const char *aaName, int sceneNumber) { // Load scene walk paths loadSceneCodes(_currentScene); - // Initialise the scene animation + // Initialize the scene animation uint16 flags = 0x4100; if (_madsVm->globals()->_config.textWindowStill) flags |= 0x200; - _sceneAnimation->initialise(aaName, flags, _interfaceSurface, NULL); + _sceneAnimation->initialize(aaName, flags, _interfaceSurface, NULL); } /** @@ -113,7 +113,7 @@ void MadsScene::loadSceneTemporary() { {0x00<<2, 0x10<<2, 0x16<<2}}; _vm->_palette->setPalette(&sysColors[0], 4, 3); - _interfaceSurface->initialise(); + _interfaceSurface->initialize(); loadSceneHotspots(_currentScene); @@ -428,7 +428,29 @@ void MadsScene::doSceneStep() { } void MadsScene::doAction() { - warning("TODO MadsScene::doAction"); + AbortTimerMode mode = ABORTMODE_0; + _abortTimersMode2 = mode; + + if ((_action._inProgress || (_abortTimers != 0)) && !_action._v8453A) { + _sceneLogic.doAction(); + mode = _action._inProgress ? ABORTMODE_0 : ABORTMODE_1; + } + + if (_screenObjects._v832EC) + _action._inProgress = false; + else { + if ((_action._inProgress || (_abortTimers != 0)) && (mode == ABORTMODE_0) && (_action._v8453A == mode)) { + // TODO: sound_fn_p(); + mode = _action._inProgress ? ABORTMODE_0 : ABORTMODE_1; + + } + + if ((_action._inProgress || (_abortTimers != 0)) && (mode == ABORTMODE_0) && (_action._v8453A == mode)) { + // Perform a core scene-indepedant action on an object + // object_do_action + } + } + } @@ -596,7 +618,7 @@ void MadsSceneResources::load(int sceneNumber, const char *resName, int v0, M4Su char buffer1[80]; const char *sceneName; - // TODO: Initialise spriteSet / xp_list + // TODO: Initialize spriteSet / xp_list if (sceneNumber > 0) { sceneName = MADSResourceManager::getResourceName(RESPREFIX_RM, sceneNumber, ".DAT"); @@ -668,7 +690,7 @@ void MadsSceneResources::load(int sceneNumber, const char *resName, int v0, M4Su delete stream; - // Initialise a copy of the surfaces if they weren't provided + // Initialize a copy of the surfaces if they weren't provided bool dsFlag = false, ssFlag = false; if (!surface) { surface = new M4Surface(_width, _height); @@ -864,13 +886,13 @@ void MadsInterfaceView::setFontMode(InterfaceFontMode newMode) { } } -void MadsInterfaceView::initialise() { +void MadsInterfaceView::initialize() { // Build up the inventory list _inventoryList.clear(); for (uint i = 0; i < _madsVm->globals()->getObjectsSize(); ++i) { MadsObject *obj = _madsVm->globals()->getObject(i); - if (obj->roomNumber == PLAYER_INVENTORY) + if (obj->_roomNumber == PLAYER_INVENTORY) _inventoryList.push_back(i); } @@ -919,7 +941,7 @@ void MadsInterfaceView::setSelectedObject(int objectNumber) { void MadsInterfaceView::addObjectToInventory(int objectNumber) { if (_inventoryList.indexOf(objectNumber) == -1) { - _madsVm->globals()->getObject(objectNumber)->roomNumber = PLAYER_INVENTORY; + _madsVm->globals()->getObject(objectNumber)->_roomNumber = PLAYER_INVENTORY; _inventoryList.push_back(objectNumber); } @@ -972,7 +994,7 @@ void MadsInterfaceView::onRefresh(RectList *rects, M4Surface *destSurface) { break; const char *descStr = _madsVm->globals()->getVocab(_madsVm->globals()->getObject( - _inventoryList[_topIndex + i])->descId); + _inventoryList[_topIndex + i])->_descId); strcpy(buffer, descStr); if ((buffer[0] >= 'a') && (buffer[0] <= 'z')) buffer[0] -= 'a' - 'A'; @@ -1002,13 +1024,13 @@ void MadsInterfaceView::onRefresh(RectList *rects, M4Surface *destSurface) { // List the vocab actions for the currently selected object MadsObject *obj = _madsVm->globals()->getObject(_selectedObject); - int yIndex = MIN(_highlightedElement - VOCAB_START, obj->vocabCount - 1); + int yIndex = MIN(_highlightedElement - VOCAB_START, obj->_vocabCount - 1); - for (int i = 0; i < obj->vocabCount; ++i) { + for (int i = 0; i < obj->_vocabCount; ++i) { const Common::Rect r(_screenObjects[VOCAB_START + i]); // Get the vocab description and capitalise it - const char *descStr = _madsVm->globals()->getVocab(obj->vocabList[i].vocabId); + const char *descStr = _madsVm->globals()->getVocab(obj->_vocabList[i].vocabId); strcpy(buffer, descStr); if ((buffer[0] >= 'a') && (buffer[0] <= 'z')) buffer[0] -= 'a' - 'A'; @@ -1060,12 +1082,12 @@ bool MadsInterfaceView::onEvent(M4EventType eventType, int32 param1, int x, int } else if ((_highlightedElement >= VOCAB_START) && (_highlightedElement < (VOCAB_START + 5))) { // A vocab action was selected MadsObject *obj = _madsVm->globals()->getObject(_selectedObject); - int vocabIndex = MIN(_highlightedElement - VOCAB_START, obj->vocabCount - 1); + int vocabIndex = MIN(_highlightedElement - VOCAB_START, obj->_vocabCount - 1); if (vocabIndex >= 0) { act._actionMode = ACTMODE_OBJECT; act._actionMode2 = ACTMODE2_2; - act._flags1 = obj->vocabList[1].flags1; - act._flags2 = obj->vocabList[1].flags2; + act._flags1 = obj->_vocabList[1].flags1; + act._flags2 = obj->_vocabList[1].flags2; act._action.verbId = _selectedObject; act._articleNumber = act._flags2; diff --git a/engines/m4/mads_scene.h b/engines/m4/mads_scene.h index 12d7088a2f..9835de4daf 100644 --- a/engines/m4/mads_scene.h +++ b/engines/m4/mads_scene.h @@ -108,8 +108,8 @@ public: public: MadsScene(MadsEngine *vm); virtual ~MadsScene(); - void initialise() { - _sceneLogic.initialiseScripts(); + void initialize() { + _sceneLogic.initializeScripts(); } // Methods that differ between engines @@ -177,7 +177,7 @@ public: MadsInterfaceView(MadsM4Engine *vm); ~MadsInterfaceView(); - virtual void initialise(); + virtual void initialize(); virtual void setSelectedObject(int objectNumber); virtual void addObjectToInventory(int objectNumber); int getSelectedObject() { return _selectedObject; } diff --git a/engines/m4/mads_views.cpp b/engines/m4/mads_views.cpp index 7628c0d650..b66591a207 100644 --- a/engines/m4/mads_views.cpp +++ b/engines/m4/mads_views.cpp @@ -100,8 +100,8 @@ void MadsAction::set() { int selectedObject = _madsVm->scene()->getInterface()->getSelectedObject(); MadsObject *objEntry = _madsVm->globals()->getObject(selectedObject); - _action.objectNameId = objEntry->descId; - _currentAction = objEntry->vocabList[_selectedRow].vocabId; + _action.objectNameId = objEntry->_descId; + _currentAction = objEntry->_vocabList[_selectedRow].vocabId; // Set up the status text stirng strcpy(_statusText, useStr); @@ -119,7 +119,7 @@ void MadsAction::set() { int selectedObject = _madsVm->scene()->getInterface()->getSelectedObject(); MadsObject *objEntry = _madsVm->globals()->getObject(selectedObject); - _currentAction = objEntry->vocabList[_selectedRow].vocabId; + _currentAction = objEntry->_vocabList[_selectedRow].vocabId; } appendVocab(_currentAction, true); @@ -165,7 +165,7 @@ void MadsAction::set() { if ((_actionMode2 == ACTMODE2_2) || (_actionMode2 == ACTMODE2_5)) { // Get name from given inventory object int objectId = _madsVm->scene()->getInterface()->getInventoryObject(_hotspotId); - _action.objectNameId = _madsVm->globals()->getObject(objectId)->descId; + _action.objectNameId = _madsVm->globals()->getObject(objectId)->_descId; } else if (_hotspotId < hotspotCount) { // Get name from scene hotspot _action.objectNameId = (*_madsVm->scene()->getSceneResources().hotspots)[_hotspotId].getVocabID(); @@ -184,7 +184,7 @@ void MadsAction::set() { if ((_v86F42 == 2) || (_v86F42 == 5)) { int objectId = _madsVm->scene()->getInterface()->getInventoryObject(_hotspotId); - articleNum = _madsVm->globals()->getObject(objectId)->article; + articleNum = _madsVm->globals()->getObject(objectId)->_article; } else if (_v86F3A < hotspotCount) { articleNum = (*_madsVm->scene()->getSceneResources().hotspots)[_hotspotId].getArticle(); } else { @@ -256,7 +256,7 @@ void MadsAction::startAction() { _madsVm->_player.moveComplete(); _inProgress = true; - _v8453A = 0; + _v8453A = ABORTMODE_0; _savedFields.selectedRow = _selectedRow; _savedFields.articleNumber = _articleNumber; _savedFields.actionMode = _actionMode; @@ -271,7 +271,7 @@ void MadsAction::startAction() { strcpy(_dialogTitle, _statusText); if ((_savedFields.actionMode2 == ACTMODE2_4) && (savedV86F42 == 0)) - _v8453A = true; + _v8453A = ABORTMODE_1; _startWalkFlag = false; int hotspotId = -1; diff --git a/engines/m4/mads_views.h b/engines/m4/mads_views.h index 72a70cfbc0..6be2283a32 100644 --- a/engines/m4/mads_views.h +++ b/engines/m4/mads_views.h @@ -34,7 +34,8 @@ namespace M4 { class MadsView; enum MadsActionMode {ACTMODE_NONE = 0, ACTMODE_VERB = 1, ACTMODE_OBJECT = 3, ACTMODE_TALK = 6}; -enum MAdsActionMode2 {ACTMODE2_0 = 0, ACTMODE2_2 = 2, ACTMODE2_4 = 4, ACTMODE2_5 = 5}; +enum MadsActionMode2 {ACTMODE2_0 = 0, ACTMODE2_2 = 2, ACTMODE2_4 = 4, ACTMODE2_5 = 5}; +enum AbortTimerMode {ABORTMODE_0 = 0, ABORTMODE_1 = 1, ABORTMODE_2 = 2}; struct ActionDetails { int verbId; @@ -62,7 +63,7 @@ public: int _currentAction; int8 _flags1, _flags2; MadsActionMode _actionMode; - MAdsActionMode2 _actionMode2; + MadsActionMode2 _actionMode2; int _articleNumber; bool _lookFlag; int _selectedRow; @@ -82,7 +83,7 @@ public: int16 _v86F4C; int _v83338; bool _inProgress; - bool _v8453A; + AbortTimerMode _v8453A; public: MadsAction(MadsView &owner); @@ -96,8 +97,6 @@ public: bool isAction(int verbId, int objectNameId = 0, int indirectObjectId = 0); }; -enum AbortTimerMode {ABORTMODE_0 = 0, ABORTMODE_1 = 1, ABORTMODE_2 = 2}; - class SpriteSlotSubset { public: int spriteListIndex; @@ -447,7 +446,7 @@ protected: public: Animation(MadsM4Engine *vm); virtual ~Animation(); - virtual void initialise(const Common::String &filename, uint16 flags, M4Surface *surface, M4Surface *depthSurface) = 0; + virtual void initialize(const Common::String &filename, uint16 flags, M4Surface *surface, M4Surface *depthSurface) = 0; virtual void load(const Common::String &filename, int v0) = 0; virtual void update() = 0; virtual void setCurrentFrame(int frameNumber) = 0; diff --git a/engines/m4/rails.cpp b/engines/m4/rails.cpp index d706af8ef1..f51d81c8f4 100644 --- a/engines/m4/rails.cpp +++ b/engines/m4/rails.cpp @@ -61,9 +61,7 @@ void Rails::clearRails() { delete tempNode; } - for (i = 0; i < _edges.size(); i++) { - _edges.remove_at(i); - } + _edges.clear(); for (j = _noWalkRects.begin(); j != _noWalkRects.end(); ++j) delete (*j); @@ -246,7 +244,7 @@ void Rails::createEdge(int32 node1, int32 node2) { } else { distance = SqrtF16(FixedMul(deltaX, deltaX) + FixedMul(deltaY, deltaY)) << 8; } - _edges.insert_at(index, (int16*)(distance >> 16)); + _edges.insert_at(index, distance >> 16); } debugCN(kDebugCore, "node1 = %d, node2 = %d, valid = %d\n", node1, node2, valid); @@ -312,7 +310,7 @@ int16 Rails::getEdgeLength(int32 node1, int32 node2) { // Find the table entry i.e. tableWidth * node1 + node2 and then subtract // n(n+1)/2, since only the upper triangle of the table is stored index = (MAXRAILNODES-1)*node1 + node2 - 1 - (node1*(node1+1)>>1); - return *_edges[index]; + return _edges[index]; } void Rails::disposePath(RailNode *pathStart) { diff --git a/engines/m4/rails.h b/engines/m4/rails.h index ccc9e00536..80bb55e9de 100644 --- a/engines/m4/rails.h +++ b/engines/m4/rails.h @@ -73,7 +73,7 @@ public: private: Common::Array<RailNode *> _nodes; - Common::Array<int16 *> _edges; + Common::Array<int16> _edges; Common::List<NoWalkRect *> _noWalkRects; M4Surface *_walkCodes; diff --git a/engines/made/database.cpp b/engines/made/database.cpp index 6e5a3228f3..1151339d49 100644 --- a/engines/made/database.cpp +++ b/engines/made/database.cpp @@ -106,7 +106,7 @@ void Object::setVectorItem(int16 index, int16 value) { } } -void Object::dump(const char *filename) { +void Object::dump(const Common::String &filename) { /* FILE *o = fopen(filename, "wb"); fwrite(_objData, _objSize, 1, o); @@ -373,9 +373,7 @@ int16 GameDatabase::setObjectProperty(int16 objectIndex, int16 propertyId, int16 void GameDatabase::dumpObject(int16 index) { Object *obj = getObject(index); - char fn[512]; - sprintf(fn, "obj%04X.0", index); - obj->dump(fn); + obj->dump(Common::String::format("obj%04X.0", index)); } diff --git a/engines/made/database.h b/engines/made/database.h index 94acef98cd..3bf69ca116 100644 --- a/engines/made/database.h +++ b/engines/made/database.h @@ -62,7 +62,7 @@ public: int16 getVectorItem(int16 index); void setVectorItem(int16 index, int16 value); - void dump(const char *filename); + void dump(const Common::String &filename); protected: bool _freeData; diff --git a/engines/made/detection.cpp b/engines/made/detection.cpp index 4576e2b5ce..e8c948af4e 100644 --- a/engines/made/detection.cpp +++ b/engines/made/detection.cpp @@ -525,34 +525,11 @@ static MadeGameDescription g_fallbackDesc = { } // End of namespace Made -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Made::gameDescriptions, - // Size of that superset structure - sizeof(Made::MadeGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - madeGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "made", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NONE, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class MadeMetaEngine : public AdvancedMetaEngine { public: - MadeMetaEngine() : AdvancedMetaEngine(detectionParams) {} + MadeMetaEngine() : AdvancedMetaEngine(Made::gameDescriptions, sizeof(Made::MadeGameDescription), madeGames) { + _singleid = "made"; + } virtual const char *getName() const { return "MADE"; @@ -565,7 +542,7 @@ public: virtual bool hasFeature(MetaEngineFeature f) const; virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const; - const ADGameDescription *fallbackDetect(const Common::FSList &fslist) const; + const ADGameDescription *fallbackDetect(const Common::FSList &fslist, const FileMap &allFiles) const; }; @@ -587,7 +564,7 @@ bool MadeMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGame return gd != 0; } -const ADGameDescription *MadeMetaEngine::fallbackDetect(const Common::FSList &fslist) const { +const ADGameDescription *MadeMetaEngine::fallbackDetect(const Common::FSList &fslist, const FileMap &allFiles) const { // Set the default values for the fallback descriptor's ADGameDescription part. Made::g_fallbackDesc.desc.language = Common::UNK_LANG; Made::g_fallbackDesc.desc.platform = Common::kPlatformPC; diff --git a/engines/made/made.cpp b/engines/made/made.cpp index a9c4587b4c..75d39fa205 100644 --- a/engines/made/made.cpp +++ b/engines/made/made.cpp @@ -181,9 +181,7 @@ void MadeEngine::resetAllTimers() { } Common::String MadeEngine::getSavegameFilename(int16 saveNum) { - char filename[256]; - snprintf(filename, 256, "%s.%03d", getTargetName().c_str(), saveNum); - return filename; + return Common::String::format("%s.%03d", getTargetName().c_str(), saveNum); } void MadeEngine::handleEvents() { diff --git a/engines/made/script.cpp b/engines/made/script.cpp index 85e1a6ec6b..2776008828 100644 --- a/engines/made/script.cpp +++ b/engines/made/script.cpp @@ -639,10 +639,9 @@ void ScriptInterpreter::dumpScript(int16 objectIndex, int *opcodeStats, int *ext const char *sig = _commands[opcode - 1].sig; int valueType; /* 0: dec; 1: hex; 2: extended function */ int16 value; - char tempStr[32]; opcodeStats[opcode - 1]++; - snprintf(tempStr, 32, "[%04X] ", (uint16)(code - codeStart - 1)); - codeLine += tempStr; + + codeLine += Common::String::format("[%04X] ", (uint16)(code - codeStart - 1)); codeLine += desc; for (; *sig != '\0'; sig++) { codeLine += " "; @@ -670,19 +669,21 @@ void ScriptInterpreter::dumpScript(int16 objectIndex, int *opcodeStats, int *ext value = *code++; break; } + + Common::String tempStr; switch (valueType) { case 0: - snprintf(tempStr, 32, "%d", value); + tempStr = Common::String::format("%d", value); break; case 1: - snprintf(tempStr, 32, "0x%X", value); + tempStr = Common::String::format("0x%X", value); break; case 2: if (value < _functions->getCount()) { - snprintf(tempStr, 32, "%s", _functions->getFuncName(value)); + tempStr = Common::String::format("%s", _functions->getFuncName(value)); externStats[value]++; } else { - snprintf(tempStr, 32, "invalid: %d", value); + tempStr = Common::String::format("invalid: %d", value); } break; } diff --git a/engines/made/scriptfuncs.cpp b/engines/made/scriptfuncs.cpp index 98cfb647ac..aa172bbe74 100644 --- a/engines/made/scriptfuncs.cpp +++ b/engines/made/scriptfuncs.cpp @@ -502,28 +502,28 @@ int16 ScriptFunctions::sfDrawText(int16 argc, int16 *argv) { } if (text) { - char finalText[1024]; + Common::String finalText; switch (argc) { case 1: - snprintf(finalText, 1024, "%s", text); + finalText = text; break; case 2: - snprintf(finalText, 1024, text, argv[0]); + finalText = Common::String::format(text, argv[0]); break; case 3: - snprintf(finalText, 1024, text, argv[1], argv[0]); + finalText = Common::String::format(text, argv[1], argv[0]); break; case 4: - snprintf(finalText, 1024, text, argv[2], argv[1], argv[0]); + finalText = Common::String::format(text, argv[2], argv[1], argv[0]); break; case 5: - snprintf(finalText, 1024, text, argv[3], argv[2], argv[1], argv[0]); + finalText = Common::String::format(text, argv[3], argv[2], argv[1], argv[0]); break; default: - finalText[0] = '\0'; + // Leave it empty break; } - _vm->_screen->printText(finalText); + _vm->_screen->printText(finalText.c_str()); } return 0; diff --git a/engines/module.mk b/engines/module.mk index 643310002f..7849c2ff25 100644 --- a/engines/module.mk +++ b/engines/module.mk @@ -5,6 +5,7 @@ MODULE_OBJS := \ dialogs.o \ engine.o \ game.o \ + obsolete.o \ savestate.o # Include common rules diff --git a/engines/mohawk/cstime_ui.cpp b/engines/mohawk/cstime_ui.cpp index ee08384590..de7d5bde80 100644 --- a/engines/mohawk/cstime_ui.cpp +++ b/engines/mohawk/cstime_ui.cpp @@ -643,7 +643,7 @@ void CSTimeInterface::startDragging(uint16 id) { _vm->getView()->dragFeature((NewFeature *)invObj->feature, _grabPoint, 4, dragFlags, NULL); if (_vm->getCase()->getId() == 1 && id == 2) { - // Hardcoded behaviour for the torch in the first case. + // Hardcoded behavior for the torch in the first case. if (_vm->getCase()->getCurrScene()->getId() == 4) { // This is the dark tomb. // FIXME: apply torch hack @@ -810,7 +810,7 @@ void CSTimeInterface::stopDragging() { } if (_vm->getCase()->getId() == 1 && _vm->getCase()->getCurrScene()->getId() == 4) { - // Hardcoded behaviour for torches in the dark tomb, in the first case. + // Hardcoded behavior for torches in the dark tomb, in the first case. if (_draggedItem == 1 && foundInvObjHotspot == 0xffff) { // Trying to drag an unlit torch around? _vm->addEvent(CSTimeEvent(kCSTimeEventCharStartFlapping, 0, 16352)); diff --git a/engines/mohawk/cursors.cpp b/engines/mohawk/cursors.cpp index f95084de8e..a797e4e127 100644 --- a/engines/mohawk/cursors.cpp +++ b/engines/mohawk/cursors.cpp @@ -274,6 +274,7 @@ void PECursorManager::setCursor(uint16 id) { Graphics::WinCursor *cursor = cursorGroup->cursors[0].cursor; CursorMan.replaceCursor(cursor->getSurface(), cursor->getWidth(), cursor->getHeight(), cursor->getHotspotX(), cursor->getHotspotY(), cursor->getKeyColor()); CursorMan.replaceCursorPalette(cursor->getPalette(), 0, 256); + delete cursorGroup; return; } } diff --git a/engines/mohawk/detection.cpp b/engines/mohawk/detection.cpp index 6a73b28246..f0c657897d 100644 --- a/engines/mohawk/detection.cpp +++ b/engines/mohawk/detection.cpp @@ -158,34 +158,17 @@ static const char *directoryGlobs[] = { 0 }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Mohawk::gameDescriptions, - // Size of that superset structure - sizeof(Mohawk::MohawkGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - mohawkGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "mohawk", - // List of files for file-based fallback detection (optional) - Mohawk::fileBased, - // Flags - 0, - // Additional GUI options (for every game) - Common::GUIO_NONE, - // Maximum directory depth - 2, - // List of directory globs - directoryGlobs -}; - class MohawkMetaEngine : public AdvancedMetaEngine { public: - MohawkMetaEngine() : AdvancedMetaEngine(detectionParams) {} + MohawkMetaEngine() : AdvancedMetaEngine(Mohawk::gameDescriptions, sizeof(Mohawk::MohawkGameDescription), mohawkGames) { + _singleid = "mohawk"; + _maxScanDepth = 2; + _directoryGlobs = directoryGlobs; + } + + virtual const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const { + return detectGameFilebased(allFiles, Mohawk::fileBased); + } virtual const char *getName() const { return "Mohawk"; diff --git a/engines/mohawk/detection_tables.h b/engines/mohawk/detection_tables.h index 5510643d04..2243dd1c1d 100644 --- a/engines/mohawk/detection_tables.h +++ b/engines/mohawk/detection_tables.h @@ -33,7 +33,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MYST.DAT", "ae3258c9c90128d274aa6a790b3ad181"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -51,7 +51,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("DEMO.DAT", "c39303dd53fb5c4e7f3c23231c606cd0"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_DEMO, + ADGF_DEMO | ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -69,7 +69,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MYST.DAT", "4beb3366ed3f3b9bfb6e81a14a43bdcc"), Common::DE_DEU, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -87,7 +87,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MYST.DAT", "e0937cca1ab125e48e30dc3cd5046ddf"), Common::DE_DEU, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -105,7 +105,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MYST.DAT", "f7e7d7ca69934f1351b5acd4fe4d44c2"), Common::ES_ESP, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -123,7 +123,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MYST.DAT", "032c88e3b7e8db4ca475e7b7db9a66bb"), Common::JA_JPN, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -141,7 +141,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MYST.DAT", "d631d42567a941c67c78f2e491f4ea58"), Common::FR_FRA, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -159,7 +159,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MAKING.DAT", "f6387e8f0f7b8a3e42c95294315d6a0e"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MAKINGOF, @@ -177,7 +177,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MAKING.DAT", "03ff62607e64419ab2b6ebf7b7bcdf63"), Common::JA_JPN, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MAKINGOF, @@ -195,7 +195,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MYST.DAT", "c4cae9f143b5947262e6cb2397e1617e"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -213,7 +213,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MYST.DAT", "c4cae9f143b5947262e6cb2397e1617e"), Common::EN_ANY, Common::kPlatformMacintosh, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -231,7 +231,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MYST.DAT", "f88e0ace66dbca78eebdaaa1d3314ceb"), Common::DE_DEU, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -249,7 +249,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MYST.DAT", "aea81633b2d2ae498f09072fb87263b6"), Common::FR_FRA, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -267,7 +267,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("a_Data.MHK", "71145fdecbd68a0cfc292c2fbddf8e08"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_RIVEN, @@ -285,7 +285,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("a_Data.MHK", "d8ccae34a0e3c709135a73f449b783be"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_RIVEN, @@ -303,7 +303,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("a_Data.MHK", "249e8c995d191b03ee94c892c0eac775"), Common::ES_ESP, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_RIVEN, @@ -321,7 +321,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("a_Data.MHK", "08fcaa5d5a2a01d7a5a6960f497212fe"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_RIVEN, @@ -339,7 +339,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("a_Data.MHK", "a5fe1c91a6033eb6ee54b287578b74b9"), Common::DE_DEU, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_RIVEN, @@ -357,7 +357,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("a_Data.MHK", "aff2a384aaa9a0e0ec51010f708c5c04"), Common::FR_FRA, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_RIVEN, @@ -375,7 +375,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("a_Data.MHK", "bae6b03bd8d6eb350d35fd13f0e3139f"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_DEMO, + ADGF_DEMO | ADGF_UNSTABLE, Common::GUIO_NONE }, GType_RIVEN, @@ -390,7 +390,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("signin.mhk", "410b4ce8d1a8702971e4d1ffba9b965d"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_CSTIME, @@ -405,7 +405,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("iface.mhk", "5c1203712a16513bd158dc3c1b6cebd7"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_DEMO, + ADGF_DEMO | ADGF_UNSTABLE, Common::GUIO_NONE }, GType_CSTIME, @@ -421,7 +421,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("ZOOMBINI.MHK", "98b758fec55104c096cfd129048be9a6"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_ZOOMBINI, @@ -436,6 +436,21 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("ZOOMBINI.MHK", "0672f65c40dd065840c896e41c13f980"), Common::EN_ANY, Common::kPlatformWindows, + ADGF_UNSTABLE, + Common::GUIO_NONE + }, + GType_ZOOMBINI, + GF_HASMIDI, + 0 + }, + + { + { + "zoombini", + "v2.0", + AD_ENTRY1("ZOOMBINI.MHK", "506b1122ffa740e2566cf0b583d24478"), + Common::EN_ANY, + Common::kPlatformWindows, ADGF_NO_FLAGS, Common::GUIO_NONE }, @@ -451,7 +466,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("ZOOMBINI.MHK", "6ae0bdf791266b1fe3d4fabbf44c3faa"), Common::DE_DEU, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_ZOOMBINI, @@ -466,7 +481,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("ZOOMBINI.MHK", "8231e58525143ccf6e8b747df34b139f"), Common::FR_FRA, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_ZOOMBINI, @@ -481,7 +496,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("C2K.MHK", "605fe88380848031bbd0ff84ade6fe40"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_CSWORLD, @@ -496,7 +511,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("C2K.MHK", "d4857aeb0f5e2e0c4ac556aa74f38c23"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_CSWORLD, @@ -511,7 +526,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("AMTRAK.MHK", "2f95301f0bb950d555bb7b0e3b1b7eb1"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_CSAMTRAK, @@ -527,7 +542,7 @@ static const MohawkGameDescription gameDescriptions[] = { "harryhh", "", AD_ENTRY1("HHHB.LB", "267bb6e3c8f237ca98b02c07b9c4013f"), - Common::EN_ANY, + Common::EN_GRB, Common::kPlatformWindows, ADGF_NO_FLAGS, Common::GUIO_NONE @@ -573,6 +588,54 @@ static const MohawkGameDescription gameDescriptions[] = { 0 }, + // From afholman in bug#3309308 + { + { + "harryhh", + "", + AD_ENTRY1("EnglishBO", "b63a7b67834de0cd4cdbf02cf40d8547"), + Common::EN_GRB, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "harryhh", + "", + AD_ENTRY1("GermanBO", "eb740102c1c8379c2c610cba14484ccb"), + Common::DE_DEU, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "harryhh", + "", + AD_ENTRY1("FrenchBO", "2118de914ab9eaec482c245c06145071"), + Common::FR_FRA, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + // Harry and the Haunted House 1.1 // From pacifist { @@ -597,7 +660,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("Outline.txt", "67abce5dcda969c23f367a98c90439bc"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV5, @@ -612,7 +675,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("Outline.txt", "6a281eefe72987afb0f8fb6cf84553f5"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV5, @@ -627,7 +690,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("Outline", "b7dc6e65fa9e80784a5bb8b557aa37c4"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV3, @@ -642,7 +705,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("BookOutline", "1ce006d7daaa26cf61040203856b88f1"), Common::EN_ANY, Common::kPlatformMacintosh, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV3, @@ -657,7 +720,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("BRODER.MHK", "007299da8b2c6e8ec1cde9598c243024"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_JAMESMATH, @@ -673,7 +736,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("BRODER.MHK", "53c000938a50dca92860fd9b546dd276"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_JAMESMATH, @@ -688,7 +751,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("MAINROOM.MHK", "12f51894d7f838af639ea9bf1bc8f45b"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_TREEHOUSE, @@ -810,7 +873,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("AL236_1.MHK", "3ba145492a7b8b4dee0ef4222c5639c3"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_1STDEGREE, @@ -828,7 +891,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("AL236_1.MHK", "0e0c70b1b702b6ddca61a1192ada1282"), Common::FR_FRA, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_1STDEGREE, @@ -843,7 +906,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("USAC2K.MHK", "b8c9d3a2586f62bce3a48b50d7a700e9"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_CSUSA, @@ -866,6 +929,54 @@ static const MohawkGameDescription gameDescriptions[] = { "TORTOISE.EXE" }, + // From afholman in bug#3309308 + { + { + "tortoise", + "", + AD_ENTRY1("TORTB.LB", "83f6bfcf30c445d13e81e0faed9aa27b"), + Common::EN_GRB, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0, + }, + + // From afholman in bug#3309308 + { + { + "tortoise", + "", + AD_ENTRY1("TORTD.LB", "21761e7de4e5f12298f43fa17c00f3e1"), + Common::DE_DEU, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0, + }, + + // From afholman in bug#3309308 + { + { + "tortoise", + "", + AD_ENTRY1("TORTF.LB", "9693043df217ffc0667a1f45f2849aa7"), + Common::FR_FRA, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0, + }, + { { "tortoise", @@ -942,6 +1053,38 @@ static const MohawkGameDescription gameDescriptions[] = { "ARTHUR.EXE" }, + // From afholman in bug#3309308 + { + { + "arthur", + "", + AD_ENTRY1("BookOutline", "133750de1ceb9e7351599d79f99fee4d"), + Common::EN_ANY, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV1, + GF_LB_10, + "Arthur's Teacher Trouble" + }, + + // From darthbo in bug#3301791 + { + { + "arthur", + "", + AD_ENTRY1("PAGES.512", "cd995d20d0d7b4642476fd76044b4e5b"), + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV1, + GF_LB_10, + "ARTHUR.EXE" + }, + { { "arthur", @@ -1145,6 +1288,22 @@ static const MohawkGameDescription gameDescriptions[] = { "RUFF.EXE" }, + // From aluff in bug#3307785 + { + { + "ruff", + "", + AD_ENTRY1("BookOutline", "f625d4056c750b9aad6f94dd854f5abe"), + Common::EN_ANY, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV1, + 0, + "Living Books Player" + }, + { { "ruff", @@ -1191,6 +1350,38 @@ static const MohawkGameDescription gameDescriptions[] = { "Living Books Player" }, + // From aluff in bug#3309981 + { + { + "newkid", + "", + AD_ENTRY1("NEWKID.512", "5135f24afa138ecdf5b52d955e9a9189"), + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV1, + 0, + "NEWKID.EXE" + }, + + // From aluff in bug#3309981 + { + { + "newkid", + "", + AD_ENTRY1("BookOutline", "6aa7c4720b922f4164584956be5ba9e5"), + Common::EN_ANY, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV1, + 0, + "Living Books Player" + }, + { { "newkid", @@ -1259,7 +1450,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("RACE.LB", "1645f36bcb36e440d928e920aa48c373"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV3, @@ -1275,7 +1466,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("RACE32.LB", "292a05bc48c1dd9583821a4181a02ef2"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV3, @@ -1299,6 +1490,22 @@ static const MohawkGameDescription gameDescriptions[] = { "BIRTHDAY.EXE" }, + // From aluff in bug#3309936 + { + { + "arthurbday", + "", + AD_ENTRY1("BookOutline", "d631242b004720ecc615e4f855825860"), + Common::EN_ANY, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV1, + 0, + "Living Books Player" + }, + { { "arthurbday", @@ -1375,6 +1582,102 @@ static const MohawkGameDescription gameDescriptions[] = { "Little Monster at School" }, + // From afholman in bug#3309308 + { + { + "lilmonster", + "", + AD_ENTRY1("lmasb.lb", "18a4e82f2c5cc30f7a2f9bd95e8c1364"), + Common::EN_GRB, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "lilmonster", + "", + AD_ENTRY1("lmasd.lb", "422b94c0e663305869cb2d2f1109a0bc"), + Common::DE_DEU, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "lilmonster", + "", + AD_ENTRY1("lmasf.lb", "8c22e79c97a86827d56b4c596066dcea"), + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "lilmonster", + "", + AD_ENTRY1("EnglishBO", "7aa2a1694255000b72ff0cc179f8059f"), + Common::EN_GRB, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "lilmonster", + "", + AD_ENTRY1("GermanBO", "ff7ac4b1b4f2ded71ff3650f383fea48"), + Common::DE_DEU, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "lilmonster", + "", + AD_ENTRY1("FrenchBO", "d13e5eae0f68cecc91a0dcfcceec7061"), + Common::FR_FRA, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + // From Scarlatti in bug #3275626 { { @@ -1398,7 +1701,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("Outline", "0b5ab6dd7c08cf23066efa709fa48bbc"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV3, @@ -1413,7 +1716,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("BookOutline", "e139903eee98f0b0c3f39247a23b8f10"), Common::EN_ANY, Common::kPlatformMacintosh, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV3, @@ -1428,7 +1731,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("outline", "525be248363fe27d50d750632c1e759e"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV4, @@ -1443,7 +1746,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("BookOutline", "54a324ee6f8260258bff7043a05b0004"), Common::EN_ANY, Common::kPlatformMacintosh, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV4, @@ -1461,7 +1764,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("outline", "36225e0b4986a80135cfdd9643cc7030"), Common::FR_FRA, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV4, @@ -1537,7 +1840,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("outline", "d239506f969ff68fa886f084082e9158"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV3, @@ -1552,7 +1855,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("BookOutline", "6dd1c0606f1db3b71207121b4370e487"), Common::EN_ANY, Common::kPlatformMacintosh, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV3, @@ -1646,7 +1949,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("OUTLINE", "dec4d1a05449f81b6012706932658326"), Common::EN_ANY, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV4, @@ -1661,7 +1964,7 @@ static const MohawkGameDescription gameDescriptions[] = { AD_ENTRY1("BookOutline", "87bf1f9113340ce1c6c880932e815882"), Common::EN_ANY, Common::kPlatformMacintosh, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_LIVINGBOOKSV4, @@ -1686,6 +1989,38 @@ static const MohawkGameDescription gameDescriptions[] = { 0 }, + // From aluff in bug#3306722 + { + { + "stellaluna", + "", + AD_ENTRY1("STELLA.LB", "ca8562a79f63485680e21191f5865fd7"), + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From aluff in bug#3306722 + { + { + "stellaluna", + "", + AD_ENTRY1("BookOutline", "7e931a455ac88557e04ca682579cd5a5"), + Common::EN_ANY, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + // Sheila Rae the Brave 1.0 // From pacifist { @@ -1703,6 +2038,118 @@ static const MohawkGameDescription gameDescriptions[] = { 0 }, + // From aluff in bug#3309934 + { + { + "sheila", + "", + AD_ENTRY1("BookOutline", "961f0cf4de2fbaa1da8ce0011822cd38"), + Common::EN_ANY, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "sheila", + "", + AD_ENTRY1("SRAEB.LB", "4835612022c2ae1944bde453d3202803"), + Common::EN_GRB, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "sheila", + "", + AD_ENTRY1("SRAED.LB", "3f21183534d324cf3bb8464f9217712c"), + Common::DE_DEU, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "sheila", + "", + AD_ENTRY1("SRAEF.LB", "96b00fc4b44c0e881c674d4bae5aa79a"), + Common::FR_FRA, + Common::kPlatformWindows, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "sheila", + "", + AD_ENTRY1("EnglishBO", "6d3ad5724f1729a1d96d812668770c2e"), + Common::EN_GRB, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "sheila", + "", + AD_ENTRY1("GermanBO", "af1dc5a8bc8da58310d17b72b657fc1f"), + Common::DE_DEU, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + + // From afholman in bug#3309308 + { + { + "sheila", + "", + AD_ENTRY1("FrenchBO", "62eefcb8424a5f9ba7db5af6f0421e58"), + Common::FR_FRA, + Common::kPlatformMacintosh, + ADGF_NO_FLAGS, + Common::GUIO_NONE + }, + GType_LIVINGBOOKSV2, + 0, + 0 + }, + { AD_TABLE_END_MARKER, 0, 0, 0 } }; @@ -1718,7 +2165,7 @@ static const MohawkGameDescription fallbackDescs[] = { AD_ENTRY1(0, 0), Common::UNK_LANG, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -1733,7 +2180,7 @@ static const MohawkGameDescription fallbackDescs[] = { AD_ENTRY1(0, 0), Common::UNK_LANG, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MAKINGOF, @@ -1748,7 +2195,7 @@ static const MohawkGameDescription fallbackDescs[] = { AD_ENTRY1(0, 0), Common::UNK_LANG, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_MYST, @@ -1763,7 +2210,7 @@ static const MohawkGameDescription fallbackDescs[] = { AD_ENTRY1(0, 0), Common::UNK_LANG, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_RIVEN, @@ -1778,7 +2225,7 @@ static const MohawkGameDescription fallbackDescs[] = { AD_ENTRY1(0, 0), Common::UNK_LANG, Common::kPlatformWindows, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_RIVEN, @@ -1788,11 +2235,11 @@ static const MohawkGameDescription fallbackDescs[] = { }; static const ADFileBasedFallback fileBased[] = { - { &fallbackDescs[0], { "MYST.DAT", 0 } }, - { &fallbackDescs[1], { "MAKING.DAT", 0 } }, - { &fallbackDescs[2], { "MYST.DAT", "Help.dat", 0 } }, // Help system doesn't exist in original - { &fallbackDescs[3], { "a_Data.MHK", 0 } }, - { &fallbackDescs[4], { "a_Data.MHK", "t_Data1.MHK" , 0 } }, + { &fallbackDescs[0].desc, { "MYST.DAT", 0 } }, + { &fallbackDescs[1].desc, { "MAKING.DAT", 0 } }, + { &fallbackDescs[2].desc, { "MYST.DAT", "Help.dat", 0 } }, // Help system doesn't exist in original + { &fallbackDescs[3].desc, { "a_Data.MHK", 0 } }, + { &fallbackDescs[4].desc, { "a_Data.MHK", "t_Data1.MHK" , 0 } }, { 0, { 0 } } }; diff --git a/engines/mohawk/livingbooks.cpp b/engines/mohawk/livingbooks.cpp index a4e7f0349c..375806cda4 100644 --- a/engines/mohawk/livingbooks.cpp +++ b/engines/mohawk/livingbooks.cpp @@ -3781,7 +3781,7 @@ void LBProxyItem::init() { Common::String filename = _vm->getFileNameFromConfig("Proxies", _desc.c_str(), leftover); if (!leftover.empty()) error("LBProxyItem tried loading proxy '%s' but got leftover '%s'", _desc.c_str(), leftover.c_str()); - uint16 baseId; + uint16 baseId = 0; for (uint i = 0; i < filename.size(); i++) { if (filename[i] == ';') { baseId = atoi(filename.c_str() + i + 1); diff --git a/engines/mohawk/mohawk.h b/engines/mohawk/mohawk.h index b189f82040..f0618f7374 100644 --- a/engines/mohawk/mohawk.h +++ b/engines/mohawk/mohawk.h @@ -28,6 +28,8 @@ #include "engines/engine.h" +#include "mohawk/video.h" + class OSystem; namespace Common { @@ -76,7 +78,6 @@ struct MohawkGameDescription; class Sound; class PauseDialog; class MohawkArchive; -class VideoManager; class CursorManager; class MohawkEngine : public ::Engine { @@ -112,6 +113,10 @@ public: void pauseGame(); + // Check if events should be done based on a video's current time + // (currently only used for Riven's storeMovieOpcode function) + virtual void doVideoTimer(VideoHandle handle, bool force) {} + private: PauseDialog *_pauseDialog; void pauseEngineIntern(bool); diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp index 4f9c3a893e..b60f8bd1ee 100644 --- a/engines/mohawk/myst.cpp +++ b/engines/mohawk/myst.cpp @@ -1168,7 +1168,7 @@ Common::Error MohawkEngine_Myst::loadGameState(int slot) { return Common::kUnknownError; } -Common::Error MohawkEngine_Myst::saveGameState(int slot, const char *desc) { +Common::Error MohawkEngine_Myst::saveGameState(int slot, const Common::String &desc) { Common::StringArray saveList = _gameState->generateSaveGameList(); if ((uint)slot < saveList.size()) diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h index 5edf774ed0..ebcc3b445c 100644 --- a/engines/mohawk/myst.h +++ b/engines/mohawk/myst.h @@ -193,7 +193,7 @@ public: bool canLoadGameStateCurrently(); bool canSaveGameStateCurrently(); Common::Error loadGameState(int slot); - Common::Error saveGameState(int slot, const char *desc); + Common::Error saveGameState(int slot, const Common::String &desc); bool hasFeature(EngineFeature f) const; private: diff --git a/engines/mohawk/riven.cpp b/engines/mohawk/riven.cpp index f407e650f6..3514afdb61 100644 --- a/engines/mohawk/riven.cpp +++ b/engines/mohawk/riven.cpp @@ -727,7 +727,7 @@ Common::Error MohawkEngine_Riven::loadGameState(int slot) { return _saveLoad->loadGame(_saveLoad->generateSaveGameList()[slot]) ? Common::kNoError : Common::kUnknownError; } -Common::Error MohawkEngine_Riven::saveGameState(int slot, const char *desc) { +Common::Error MohawkEngine_Riven::saveGameState(int slot, const Common::String &desc) { Common::StringArray saveList = _saveLoad->generateSaveGameList(); if ((uint)slot < saveList.size()) @@ -833,6 +833,19 @@ void MohawkEngine_Riven::installCardTimer() { } } +void MohawkEngine_Riven::doVideoTimer(VideoHandle handle, bool force) { + assert(handle != NULL_VID_HANDLE); + + uint16 id = _scriptMan->getStoredMovieOpcodeID(); + + if (handle != _video->findVideoHandleRiven(id)) // Check if we've got a video match + return; + + // Run the opcode if we can at this point + if (force || _video->getElapsedTime(handle) >= _scriptMan->getStoredMovieOpcodeTime()) + _scriptMan->runStoredMovieOpcode(); +} + bool ZipMode::operator== (const ZipMode &z) const { return z.name == name && z.id == id; } diff --git a/engines/mohawk/riven.h b/engines/mohawk/riven.h index e01e03895c..c7d36e585d 100644 --- a/engines/mohawk/riven.h +++ b/engines/mohawk/riven.h @@ -126,11 +126,13 @@ public: bool canLoadGameStateCurrently() { return true; } bool canSaveGameStateCurrently() { return true; } Common::Error loadGameState(int slot); - Common::Error saveGameState(int slot, const char *desc); + Common::Error saveGameState(int slot, const Common::String &desc); bool hasFeature(EngineFeature f) const; typedef void (*TimerProc)(MohawkEngine_Riven *vm); + void doVideoTimer(VideoHandle handle, bool force); + private: MohawkArchive *_extrasFile; // We need a separate handle for the extra data RivenConsole *_console; diff --git a/engines/mohawk/riven_scripts.cpp b/engines/mohawk/riven_scripts.cpp index b3d5369a84..161acb665f 100644 --- a/engines/mohawk/riven_scripts.cpp +++ b/engines/mohawk/riven_scripts.cpp @@ -407,14 +407,14 @@ void RivenScript::stopSound(uint16 op, uint16 argc, uint16 *argv) { return; // The argument is a bitflag for the setting. - // bit 0 is normal sound stopping (unused) + // bit 0 is normal sound stopping // bit 1 is ambient sound stopping // Having no flags set means clear all if (argv[0] & 2 || argv[0] == 0) _vm->_sound->stopAllSLST(); - if (argv[0] & 1) - warning("Unhandled stopSound() flag"); + if (argv[0] & 1 || argv[0] == 0) + _vm->_sound->stopSound(); } // Command 13: set mouse cursor (cursor_id) @@ -536,6 +536,10 @@ void RivenScript::fadeAmbientSounds(uint16 op, uint16 argc, uint16 *argv) { // Command 38: Store an opcode for use when playing a movie (movie id, time high, time low, opcode, arguments...) void RivenScript::storeMovieOpcode(uint16 op, uint16 argc, uint16 *argv) { + // This opcode is used to delay an opcode's usage based on the elapsed + // time of a specified movie. However, every use in the game is for + // delaying an activateSLST opcode. + uint32 scriptSize = 6 + (argc - 4) * 2; // Create our dummy script @@ -557,13 +561,11 @@ void RivenScript::storeMovieOpcode(uint16 op, uint16 argc, uint16 *argv) { // Store the script RivenScriptManager::StoredMovieOpcode storedOp; storedOp.script = script; - storedOp.time = delayTime + _vm->getTotalPlayTime(); + storedOp.time = delayTime; storedOp.id = argv[0]; - // TODO: Actually store the movie and call it in our movie loop - // For now, just delete the script and move on - //_vm->_scriptMan->setStoredMovieOpcode(storedOp); - delete script; + // Store the opcode for later + _vm->_scriptMan->setStoredMovieOpcode(storedOp); } else { // Run immediately if we have no delay script->runScript(); @@ -716,18 +718,10 @@ void RivenScriptManager::setStoredMovieOpcode(const StoredMovieOpcode &op) { _storedMovieOpcode.time = op.time; } -void RivenScriptManager::runStoredMovieOpcode(uint16 id) { +void RivenScriptManager::runStoredMovieOpcode() { if (_storedMovieOpcode.script) { - if (_storedMovieOpcode.id == id) { - // If we've passed the time, run our script - if (_vm->getTotalPlayTime() >= _storedMovieOpcode.time) { - _storedMovieOpcode.script->runScript(); - clearStoredMovieOpcode(); - } - } else { - // We're on a completely different video, kill off any remaining opcode - clearStoredMovieOpcode(); - } + _storedMovieOpcode.script->runScript(); + clearStoredMovieOpcode(); } } diff --git a/engines/mohawk/riven_scripts.h b/engines/mohawk/riven_scripts.h index 75d4592e55..2932ba5939 100644 --- a/engines/mohawk/riven_scripts.h +++ b/engines/mohawk/riven_scripts.h @@ -141,8 +141,10 @@ public: uint16 id; }; + uint16 getStoredMovieOpcodeID() { return _storedMovieOpcode.id; } + uint32 getStoredMovieOpcodeTime() { return _storedMovieOpcode.time; } void setStoredMovieOpcode(const StoredMovieOpcode &op); - void runStoredMovieOpcode(uint16 id); + void runStoredMovieOpcode(); void clearStoredMovieOpcode(); private: diff --git a/engines/mohawk/video.cpp b/engines/mohawk/video.cpp index 0a74d058c9..eec6256276 100644 --- a/engines/mohawk/video.cpp +++ b/engines/mohawk/video.cpp @@ -133,6 +133,7 @@ void VideoManager::waitUntilMovieEnds(VideoHandle videoHandle) { break; case Common::KEYCODE_ESCAPE: continuePlaying = false; + _vm->doVideoTimer(videoHandle, true); break; default: break; @@ -208,14 +209,20 @@ bool VideoManager::updateMovies() { if (_videoStreams[i].loop) { _videoStreams[i]->seekToTime(_videoStreams[i].start); } else { + // Check the video time one last time before deleting it + _vm->doVideoTimer(i, true); delete _videoStreams[i].video; _videoStreams[i].clear(); continue; } } + // Nothing more to do if we're paused + if (_videoStreams[i]->isPaused()) + continue; + // Check if we need to draw a frame - if (!_videoStreams[i]->isPaused() && _videoStreams[i]->needsUpdate()) { + if (_videoStreams[i]->needsUpdate()) { const Graphics::Surface *frame = _videoStreams[i]->decodeNextFrame(); Graphics::Surface *convertedFrame = 0; @@ -266,6 +273,9 @@ bool VideoManager::updateMovies() { } } } + + // Check the video time + _vm->doVideoTimer(i, false); } // Return true if we need to update the screen diff --git a/engines/obsolete.cpp b/engines/obsolete.cpp new file mode 100644 index 0000000000..6733a384be --- /dev/null +++ b/engines/obsolete.cpp @@ -0,0 +1,88 @@ +/* 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 "engines/obsolete.h" + +#include "common/config-manager.h" + + +namespace Engines { + +void upgradeTargetIfNecessary(const ObsoleteGameID *obsoleteList) { + if (obsoleteList == 0) + return; + + Common::String gameid = ConfMan.get("gameid"); + + for (const ObsoleteGameID *o = obsoleteList; o->from; ++o) { + if (gameid.equalsIgnoreCase(o->from)) { + gameid = o->to; + ConfMan.set("gameid", gameid); + + if (o->platform != Common::kPlatformUnknown) + ConfMan.set("platform", Common::getPlatformCode(o->platform)); + + warning("Target upgraded from %s to %s", o->from, o->to); + + // WORKAROUND: Fix for bug #1719463: "DETECTOR: Launching + // undefined target adds launcher entry" + if (ConfMan.hasKey("id_came_from_command_line")) { + warning("Target came from command line. Skipping save"); + } else { + ConfMan.flushToDisk(); + } + break; + } + } +} + +GameDescriptor findGameID( + const char *gameid, + const PlainGameDescriptor *gameids, + const ObsoleteGameID *obsoleteList + ) { + // First search the list of supported gameids for a match. + const PlainGameDescriptor *g = findPlainGameDescriptor(gameid, gameids); + if (g) + return GameDescriptor(*g); + + // If we didn't find the gameid in the main list, check if it + // is an obsolete game id. + if (obsoleteList != 0) { + const ObsoleteGameID *o = obsoleteList; + while (o->from) { + if (0 == scumm_stricmp(gameid, o->from)) { + g = findPlainGameDescriptor(o->to, gameids); + if (g && g->description) + return GameDescriptor(gameid, "Obsolete game ID (" + Common::String(g->description) + ")"); + else + return GameDescriptor(gameid, "Obsolete game ID"); + } + o++; + } + } + + // No match found + return GameDescriptor(); +} + +} // End of namespace Engines diff --git a/engines/obsolete.h b/engines/obsolete.h new file mode 100644 index 0000000000..97bc7524a6 --- /dev/null +++ b/engines/obsolete.h @@ -0,0 +1,78 @@ +/* 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 ENGINES_OBSOLETE_H +#define ENGINES_OBSOLETE_H + +#include "engines/game.h" + +namespace Engines { + +/** + * Structure for autoupgrading targets using an obsolete gameid + * to the correct new gameid. + */ +struct ObsoleteGameID { + + /** Name of the obsolete gameid. */ + const char *from; + + /** Name of the corresponding new gameid. */ + const char *to; + + /** + * If platform is set to a value different from Common::kPlatformUnknown, + * then upgradeTargetIfNecessary() will use this value to set the platform + * attribute of any target it updates using this ObsoleteGameID record. + * This is useful when the old gameid encoded the target platform (e.g. + * "zakTowns" for FM-TOWNS) while the new gameid does not (e.g. "zak"). + */ + Common::Platform platform; +}; + +/** + * Check if the currently active game target has an obsolete gameid; + * if so, replace it by the correct new gameid. + * This function is typically invoked by a MetaEngine::createInstance + * implementation. + */ +void upgradeTargetIfNecessary(const ObsoleteGameID *obsoleteList); + + +/** + * Scan through the given list of plain game descriptors specified and search + * for 'gameid' in there. If a match is found, returns a GameDescriptor + * with gameid and description set. + * + * Optionally can take a list of obsolete game ids into account in order + * to support obsolete gameids. + */ +GameDescriptor findGameID( + const char *gameid, + const PlainGameDescriptor *gameids, + const ObsoleteGameID *obsoleteList = 0 + ); + + +} // End of namespace Engines + +#endif diff --git a/engines/parallaction/detection.cpp b/engines/parallaction/detection.cpp index c3719bcd51..d0610f7a29 100644 --- a/engines/parallaction/detection.cpp +++ b/engines/parallaction/detection.cpp @@ -220,34 +220,11 @@ static const PARALLACTIONGameDescription gameDescriptions[] = { } -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Parallaction::gameDescriptions, - // Size of that superset structure - sizeof(Parallaction::PARALLACTIONGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - parallactionGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - 0, - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NOLAUNCHLOAD, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class ParallactionMetaEngine : public AdvancedMetaEngine { public: - ParallactionMetaEngine() : AdvancedMetaEngine(detectionParams) {} + ParallactionMetaEngine() : AdvancedMetaEngine(Parallaction::gameDescriptions, sizeof(Parallaction::PARALLACTIONGameDescription), parallactionGames) { + _guioptions = Common::GUIO_NOLAUNCHLOAD; + } virtual const char *getName() const { return "Parallaction"; diff --git a/engines/parallaction/saveload.cpp b/engines/parallaction/saveload.cpp index 673c613485..5a1daa256b 100644 --- a/engines/parallaction/saveload.cpp +++ b/engines/parallaction/saveload.cpp @@ -23,6 +23,7 @@ #include "common/savefile.h" #include "common/config-manager.h" #include "common/textconsole.h" +#include "common/translation.h" #include "gui/dialog.h" #include "gui/saveload.h" @@ -129,8 +130,7 @@ void SaveLoad_ns::doLoadGame(uint16 slot) { void SaveLoad_ns::doSaveGame(uint16 slot, const char* name) { Common::OutSaveFile *f = getOutSaveFile(slot); if (f == 0) { - char buf[32]; - sprintf(buf, "Can't save game in slot %i\n\n", slot); + Common::String buf = Common::String::format(_("Can't save game in slot %i\n\n"), slot); GUI::MessageDialog dialog(buf); dialog.runModal(); return; @@ -208,7 +208,7 @@ bool SaveLoad::loadGame() { doLoadGame(_di); - GUI::TimedMessageDialog dialog("Loading game...", 1500); + GUI::TimedMessageDialog dialog(_("Loading game..."), 1500); dialog.runModal(); return true; @@ -223,7 +223,7 @@ bool SaveLoad::saveGame() { doSaveGame(slot, saveName.c_str()); - GUI::TimedMessageDialog dialog("Saving game...", 1500); + GUI::TimedMessageDialog dialog(_("Saving game..."), 1500); dialog.runModal(); return true; @@ -276,9 +276,9 @@ void SaveLoad_ns::getGamePartProgress(bool *complete, int size) { static bool askRenameOldSavefiles() { GUI::MessageDialog dialog0( - "ScummVM found that you have old savefiles for Nippon Safes that should be renamed.\n" + _("ScummVM found that you have old savefiles for Nippon Safes that should be renamed.\n" "The old names are no longer supported, so you will not be able to load your games if you don't convert them.\n\n" - "Press OK to convert them now, otherwise you will be asked next time.\n", "OK", "Cancel"); + "Press OK to convert them now, otherwise you will be asked next time.\n"), _("OK"), _("Cancel")); return (dialog0.runModal() != 0); } @@ -321,12 +321,11 @@ void SaveLoad_ns::renameOldSavefiles() { return; } - char msg[200]; + Common::String msg; if (success == numOldSaves) { - sprintf(msg, "ScummVM successfully converted all your savefiles."); + msg = _("ScummVM successfully converted all your savefiles."); } else { - sprintf(msg, - "ScummVM printed some warnings in your console window and can't guarantee all your files have been converted.\n\n" + msg = _("ScummVM printed some warnings in your console window and can't guarantee all your files have been converted.\n\n" "Please report to the team."); } diff --git a/engines/queen/command.cpp b/engines/queen/command.cpp index 4f86d1f7ec..7876dbfae9 100644 --- a/engines/queen/command.cpp +++ b/engines/queen/command.cpp @@ -1081,10 +1081,10 @@ void Command::setAreas(uint16 command) { Area *area = _vm->grid()->area(cmdArea->room, areaNum); if (cmdArea->area > 0) { // turn on area - area->mapNeighbours = ABS(area->mapNeighbours); + area->mapNeighbors = ABS(area->mapNeighbors); } else { // turn off area - area->mapNeighbours = -ABS(area->mapNeighbours); + area->mapNeighbors = -ABS(area->mapNeighbors); } } } diff --git a/engines/queen/command.h b/engines/queen/command.h index 772d6cb0f1..aa72537a9f 100644 --- a/engines/queen/command.h +++ b/engines/queen/command.h @@ -97,7 +97,7 @@ public: Command(QueenEngine *vm); ~Command(); - //! initialise command construction + //! initialize command construction void clear(bool clearTexts); //! execute last constructed command diff --git a/engines/queen/cutaway.cpp b/engines/queen/cutaway.cpp index 70d8252299..de54b7e33c 100644 --- a/engines/queen/cutaway.cpp +++ b/engines/queen/cutaway.cpp @@ -1152,10 +1152,10 @@ void Cutaway::updateGameState() { if (areaSubIndex > 0) { Area *area = _vm->grid()->area(areaIndex, areaSubIndex); - area->mapNeighbours = ABS(area->mapNeighbours); + area->mapNeighbors = ABS(area->mapNeighbors); } else { Area *area = _vm->grid()->area(areaIndex, ABS(areaSubIndex)); - area->mapNeighbours = -ABS(area->mapNeighbours); + area->mapNeighbors = -ABS(area->mapNeighbors); } } diff --git a/engines/queen/display.h b/engines/queen/display.h index ffb4479426..4256b19d72 100644 --- a/engines/queen/display.h +++ b/engines/queen/display.h @@ -44,7 +44,7 @@ public: Display(QueenEngine *vm, OSystem *system); ~Display(); - //! initialise dynalum for the specified room + //! initialize dynalum for the specified room void dynalumInit(const char *roomName, uint16 roomNum); //! update dynalum for the current room @@ -138,7 +138,7 @@ public: //! show/hide mouse cursor void showMouseCursor(bool show); - //! initialise font, compute justification sizes + //! initialize font, compute justification sizes void initFont(); //! add the specified text to the texts list diff --git a/engines/queen/logic.cpp b/engines/queen/logic.cpp index db496bee39..f60ac59ff1 100644 --- a/engines/queen/logic.cpp +++ b/engines/queen/logic.cpp @@ -1626,7 +1626,7 @@ void Logic::asmSetLightsOn() { void Logic::asmSetManequinAreaOn() { Area *a = _vm->grid()->area(ROOM_FLODA_FRONTDESK, 7); - a->mapNeighbours = ABS(a->mapNeighbours); + a->mapNeighbors = ABS(a->mapNeighbors); } void Logic::asmPanToJoe() { diff --git a/engines/queen/musicdata.cpp b/engines/queen/musicdata.cpp index afcc54d2e6..d3974dcdbf 100644 --- a/engines/queen/musicdata.cpp +++ b/engines/queen/musicdata.cpp @@ -493,7 +493,7 @@ const SongData Sound::_song[] = { /* 124 - Dino Horn */ { { 127, 0 }, 128, 128, 128, 0, 1 }, - /* 125 - Tyre Screech */ + /* 125 - Tire Screech */ { { 128, 0 }, 128, 128, 128, 0, 1 }, /* 126 - Oil Splat */ @@ -1238,7 +1238,7 @@ const TuneData Sound::_tune[] = { /* 127 - Dino Horn */ { { 0, 0 }, { 67, 0 }, 2, 0 }, - /* 128 - Tyre Screech */ + /* 128 - Tire Screech */ { { 0, 0 }, { 68, 0 }, 2, 0 }, /* 129 - Oil Splat */ @@ -1697,7 +1697,7 @@ const char *Sound::_sfxName[] = { /* 67 - Dino Horn */ "103sssss", - /* 68 - Tyre Screech */ + /* 68 - Tire Screech */ "125sssss", /* 69 - Chicken */ diff --git a/engines/queen/queen.cpp b/engines/queen/queen.cpp index 3c1826cd69..a10e74bfd8 100644 --- a/engines/queen/queen.cpp +++ b/engines/queen/queen.cpp @@ -168,11 +168,8 @@ SaveStateList QueenMetaEngine::listSaves(const char *target) const { } void QueenMetaEngine::removeSaveState(const char *target, int slot) const { - char extension[6]; - snprintf(extension, sizeof(extension), ".s%02d", slot); - Common::String filename = target; - filename += extension; + filename += Common::String::format(".s%02d", slot); g_system->getSavefileManager()->removeSavefile(filename); } @@ -318,7 +315,7 @@ bool QueenEngine::canLoadOrSave() const { return !_input->cutawayRunning() && !(_resource->isDemo() || _resource->isInterview()); } -Common::Error QueenEngine::saveGameState(int slot, const char *desc) { +Common::Error QueenEngine::saveGameState(int slot, const Common::String &desc) { debug(3, "Saving game to slot %d", slot); char name[20]; Common::Error err = Common::kNoError; @@ -341,7 +338,7 @@ Common::Error QueenEngine::saveGameState(int slot, const char *desc) { file->writeUint32BE(0); file->writeUint32BE(dataSize); char description[32]; - Common::strlcpy(description, desc, sizeof(description)); + Common::strlcpy(description, desc.c_str(), sizeof(description)); file->write(description, sizeof(description)); // write save data diff --git a/engines/queen/queen.h b/engines/queen/queen.h index 5affe8e01a..bb299e2a80 100644 --- a/engines/queen/queen.h +++ b/engines/queen/queen.h @@ -112,7 +112,7 @@ public: void update(bool checkPlayerInput = false); bool canLoadOrSave() const; - Common::Error saveGameState(int slot, const char *desc); + Common::Error saveGameState(int slot, const Common::String &desc); Common::Error loadGameState(int slot); void makeGameStateName(int slot, char *buf) const; int getGameStateSlot(const char *filename) const; diff --git a/engines/queen/structs.h b/engines/queen/structs.h index b0a26ed4ba..6dd98fa1f5 100644 --- a/engines/queen/structs.h +++ b/engines/queen/structs.h @@ -77,7 +77,7 @@ struct Box { struct Area { //! bitmask of connected areas - int16 mapNeighbours; + int16 mapNeighbors; //! coordinates defining area limits Box box; //! scaling factors for bobs actors @@ -86,7 +86,7 @@ struct Area { uint16 object; void readFromBE(byte *&ptr) { - mapNeighbours = (int16)READ_BE_UINT16(ptr); ptr += 2; + mapNeighbors = (int16)READ_BE_UINT16(ptr); ptr += 2; box.readFromBE(ptr); bottomScaleFactor = READ_BE_UINT16(ptr); ptr += 2; topScaleFactor = READ_BE_UINT16(ptr); ptr += 2; @@ -94,7 +94,7 @@ struct Area { } void writeToBE(byte *&ptr) { - WRITE_BE_UINT16(ptr, mapNeighbours); ptr += 2; + WRITE_BE_UINT16(ptr, mapNeighbors); ptr += 2; box.writeToBE(ptr); WRITE_BE_UINT16(ptr, bottomScaleFactor); ptr += 2; WRITE_BE_UINT16(ptr, topScaleFactor); ptr += 2; diff --git a/engines/queen/walk.cpp b/engines/queen/walk.cpp index c5cfbb7d5f..b5c9b97ce0 100644 --- a/engines/queen/walk.cpp +++ b/engines/queen/walk.cpp @@ -111,7 +111,7 @@ void Walk::animateJoe() { WalkData *pwd = &_walkData[i]; // area has been turned off, see if we should execute a cutaway - if (pwd->area->mapNeighbours < 0) { + if (pwd->area->mapNeighbors < 0) { // queen.c l.2838-2911 _vm->logic()->handleSpecialArea(pwd->anim.facing, pwd->areaNum, i); _joeMoveBlock = true; @@ -482,7 +482,7 @@ int16 Walk::findAreaPosition(int16 *x, int16 *y, bool recalibrate) { uint16 Walk::findFreeArea(uint16 area) const { uint16 testArea; uint16 freeArea = 0; - uint16 map = ABS(_roomArea[area].mapNeighbours); + uint16 map = ABS(_roomArea[area].mapNeighbors); for (testArea = 1; testArea <= _roomAreaCount; ++testArea) { int b = _roomAreaCount - testArea; if (map & (1 << b)) { diff --git a/engines/saga/detection.cpp b/engines/saga/detection.cpp index b23baf4cc3..7a98fe4164 100644 --- a/engines/saga/detection.cpp +++ b/engines/saga/detection.cpp @@ -28,6 +28,7 @@ #include "common/config-manager.h" #include "engines/advancedDetector.h" +#include "engines/obsolete.h" #include "common/system.h" #include "graphics/thumbnail.h" @@ -91,7 +92,7 @@ static const PlainGameDescriptor sagaGames[] = { {0, 0} }; -static const ADObsoleteGameID obsoleteGameIDsTable[] = { +static const Engines::ObsoleteGameID obsoleteGameIDsTable[] = { {"ite", "saga", Common::kPlatformUnknown}, {"ihnm", "saga", Common::kPlatformUnknown}, {"dino", "saga", Common::kPlatformUnknown}, @@ -101,34 +102,15 @@ static const ADObsoleteGameID obsoleteGameIDsTable[] = { #include "saga/detection_tables.h" -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Saga::gameDescriptions, - // Size of that superset structure - sizeof(Saga::SAGAGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - sagaGames, - // Structure for autoupgrading obsolete targets - obsoleteGameIDsTable, - // Name of single gameid (optional) - "saga", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NONE, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class SagaMetaEngine : public AdvancedMetaEngine { public: - SagaMetaEngine() : AdvancedMetaEngine(detectionParams) {} + SagaMetaEngine() : AdvancedMetaEngine(Saga::gameDescriptions, sizeof(Saga::SAGAGameDescription), sagaGames) { + _singleid = "saga"; + } + + virtual GameDescriptor findGame(const char *gameid) const { + return Engines::findGameID(gameid, _gameids, obsoleteGameIDsTable); + } virtual const char *getName() const { return "SAGA [" @@ -157,7 +139,13 @@ public: } virtual bool hasFeature(MetaEngineFeature f) const; + + virtual Common::Error createInstance(OSystem *syst, Engine **engine) const { + Engines::upgradeTargetIfNecessary(obsoleteGameIDsTable); + return AdvancedMetaEngine::createInstance(syst, engine); + } virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const; + virtual SaveStateList listSaves(const char *target) const; virtual int getMaximumSaveSlot() const; virtual void removeSaveState(const char *target, int slot) const; @@ -223,11 +211,8 @@ SaveStateList SagaMetaEngine::listSaves(const char *target) const { int SagaMetaEngine::getMaximumSaveSlot() const { return MAX_SAVES - 1; } void SagaMetaEngine::removeSaveState(const char *target, int slot) const { - char extension[6]; - snprintf(extension, sizeof(extension), ".s%02d", slot); - Common::String filename = target; - filename += extension; + filename += Common::String::format(".s%02d", slot);; g_system->getSavefileManager()->removeSavefile(filename); } @@ -363,8 +348,8 @@ Common::Error SagaEngine::loadGameState(int slot) { return Common::kNoError; // TODO: return success/failure } -Common::Error SagaEngine::saveGameState(int slot, const char *desc) { - save(calcSaveFileName((uint)slot), desc); +Common::Error SagaEngine::saveGameState(int slot, const Common::String &desc) { + save(calcSaveFileName((uint)slot), desc.c_str()); return Common::kNoError; // TODO: return success/failure } diff --git a/engines/saga/detection_tables.h b/engines/saga/detection_tables.h index f63efd206b..ab73fcba6e 100644 --- a/engines/saga/detection_tables.h +++ b/engines/saga/detection_tables.h @@ -821,7 +821,7 @@ static const SAGAGameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NONE }, GID_DINO, @@ -851,7 +851,7 @@ static const SAGAGameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, GUIO_NONE }, GID_FTA2, diff --git a/engines/saga/font.cpp b/engines/saga/font.cpp index a5363909ff..8c3f4d7c42 100644 --- a/engines/saga/font.cpp +++ b/engines/saga/font.cpp @@ -40,6 +40,10 @@ Font::Font(SagaEngine *vm) : _vm(vm) { _fonts.resize(_vm->getFontsCount()); for (i = 0; i < _vm->getFontsCount(); i++) { +#ifdef __DS__ + _fonts[i].outline.font = NULL; + _fonts[i].normal.font = NULL; +#endif loadFont(&_fonts[i], _vm->getFontDescription(i)->fontResourceId); } @@ -48,6 +52,18 @@ Font::Font(SagaEngine *vm) : _vm(vm) { Font::~Font() { debug(8, "Font::~Font(): Freeing fonts."); + +#ifdef __DS__ + for (int i = 0; i < _vm->getFontsCount(); i++) { + if (_fonts[i].outline.font) { + free(_fonts[i].outline.font); + } + + if (_fonts[i].normal.font) { + free(_fonts[i].normal.font); + } + } +#endif } @@ -104,9 +120,17 @@ void Font::loadFont(FontData *font, uint32 fontResourceId) { error("Invalid font resource size"); } +#ifndef __DS__ font->normal.font.resize(fontResourceData.size() - FONT_DESCSIZE); memcpy(font->normal.font.getBuffer(), fontResourceData.getBuffer() + FONT_DESCSIZE, fontResourceData.size() - FONT_DESCSIZE); +#else + if (font->normal.font) { + free(font->normal.font); + } + font->normal.font = (byte *) malloc(fontResourceData.size() - FONT_DESCSIZE); + memcpy(font->normal.font, fontResourceData.getBuffer() + FONT_DESCSIZE, fontResourceData.size() - FONT_DESCSIZE); +#endif // Create outline font style createOutline(font); @@ -150,7 +174,15 @@ void Font::createOutline(FontData *font) { font->outline.header.rowLength = newRowLength; // Allocate new font representation storage +#ifdef __DS__ + if (font->outline.font) { + free(font->outline.font); + } + + font->outline.font = (byte *) calloc(newRowLength * font->outline.header.charHeight, 1); +#else font->outline.font.resize(newRowLength * font->outline.header.charHeight); +#endif // Generate outline font representation diff --git a/engines/saga/font.h b/engines/saga/font.h index 75d5fa95b9..a45299ad48 100644 --- a/engines/saga/font.h +++ b/engines/saga/font.h @@ -117,7 +117,11 @@ struct FontCharEntry { struct FontStyle { FontHeader header; FontCharEntry fontCharEntry[256]; +#ifndef __DS__ ByteArray font; +#else + byte* font; +#endif }; struct FontData { diff --git a/engines/saga/objectmap.cpp b/engines/saga/objectmap.cpp index b9594625e1..b300a247e9 100644 --- a/engines/saga/objectmap.cpp +++ b/engines/saga/objectmap.cpp @@ -191,7 +191,7 @@ void ObjectMap::clear() { #ifdef SAGA_DEBUG void ObjectMap::draw(const Point& testPoint, int color, int color2) { int hitZoneIndex; - char txtBuf[32]; + Common::String txtBuf; Point pickPoint; Point textPoint; Location pickLocation; @@ -210,10 +210,10 @@ void ObjectMap::draw(const Point& testPoint, int color, int color2) { } if (hitZoneIndex != -1) { - snprintf(txtBuf, sizeof(txtBuf), "hitZone %d", hitZoneIndex); + txtBuf = Common::String::format("hitZone %d", hitZoneIndex); textPoint.x = 2; textPoint.y = 2; - _vm->_font->textDraw(kKnownFontSmall, txtBuf, textPoint, kITEColorBrightWhite, kITEColorBlack, kFontOutline); + _vm->_font->textDraw(kKnownFontSmall, txtBuf.c_str(), textPoint, kITEColorBrightWhite, kITEColorBlack, kFontOutline); } } #endif diff --git a/engines/saga/saga.h b/engines/saga/saga.h index 6d33979028..23258e1277 100644 --- a/engines/saga/saga.h +++ b/engines/saga/saga.h @@ -654,7 +654,7 @@ public: const Common::Rect &getDisplayClip() const { return _displayClip;} Common::Error loadGameState(int slot); - Common::Error saveGameState(int slot, const char *desc); + Common::Error saveGameState(int slot, const Common::String &desc); bool canLoadGameStateCurrently(); bool canSaveGameStateCurrently(); const GameDisplayInfo &getDisplayInfo(); diff --git a/engines/saga/script.cpp b/engines/saga/script.cpp index 9502631f37..f4902b6c11 100644 --- a/engines/saga/script.cpp +++ b/engines/saga/script.cpp @@ -1154,7 +1154,7 @@ void Script::showVerb(int statusColor) { const char *verbName; const char *object1Name; const char *object2Name; - char statusString[STATUS_TEXT_LEN]; + Common::String statusString; if (_leftButtonVerb == getVerbType(kVerbNone)) { _vm->_interface->setStatusText(""); @@ -1174,8 +1174,8 @@ void Script::showVerb(int statusColor) { object1Name = _vm->getObjectName(_currentObject[0]); if (!_secondObjectNeeded) { - snprintf(statusString, STATUS_TEXT_LEN, "%s %s", verbName, object1Name); - _vm->_interface->setStatusText(statusString, statusColor); + statusString = Common::String::format("%s %s", verbName, object1Name); + _vm->_interface->setStatusText(statusString.c_str(), statusColor); return; } @@ -1187,15 +1187,15 @@ void Script::showVerb(int statusColor) { } if (_leftButtonVerb == getVerbType(kVerbGive)) { - snprintf(statusString, STATUS_TEXT_LEN, _vm->getTextString(kTextGiveTo), object1Name, object2Name); - _vm->_interface->setStatusText(statusString, statusColor); + statusString = Common::String::format(_vm->getTextString(kTextGiveTo), object1Name, object2Name); + _vm->_interface->setStatusText(statusString.c_str(), statusColor); } else { if (_leftButtonVerb == getVerbType(kVerbUse)) { - snprintf(statusString, STATUS_TEXT_LEN, _vm->getTextString(kTextUseWidth), object1Name, object2Name); - _vm->_interface->setStatusText(statusString, statusColor); + statusString = Common::String::format(_vm->getTextString(kTextUseWidth), object1Name, object2Name); + _vm->_interface->setStatusText(statusString.c_str(), statusColor); } else { - snprintf(statusString, STATUS_TEXT_LEN, "%s %s", verbName, object1Name); - _vm->_interface->setStatusText(statusString, statusColor); + statusString = Common::String::format("%s %s", verbName, object1Name); + _vm->_interface->setStatusText(statusString.c_str(), statusColor); } } } diff --git a/engines/saga/sfuncs.cpp b/engines/saga/sfuncs.cpp index 70f987a129..c623349b7a 100644 --- a/engines/saga/sfuncs.cpp +++ b/engines/saga/sfuncs.cpp @@ -1553,18 +1553,15 @@ void Script::sfNull(SCRIPTFUNC_PARAMS) { } void Script::sfStub(const char *name, ScriptThread *thread, int nArgs) { - char buf[256], buf1[100]; - - snprintf(buf, 256, "STUB: %s(", name); + debugN(0, "STUB: %s(", name); for (int i = 0; i < nArgs; i++) { - snprintf(buf1, 100, "%d", thread->pop()); - strncat(buf, buf1, sizeof(buf) - strlen(buf) - 1); + debugN(0, "%d", thread->pop()); if (i + 1 < nArgs) - strncat(buf, ", ", sizeof(buf) - strlen(buf) - 1); + debugN(0, ", "); } - debug(0, "%s)", buf); + debug(0, ")"); } } // End of namespace Saga diff --git a/engines/saga/sfuncs_ihnm.cpp b/engines/saga/sfuncs_ihnm.cpp index 1a73677846..3fbf3b6e67 100644 --- a/engines/saga/sfuncs_ihnm.cpp +++ b/engines/saga/sfuncs_ihnm.cpp @@ -389,11 +389,10 @@ void Script::sfSetSpeechBox(SCRIPTFUNC_PARAMS) { void Script::sfDebugShowData(SCRIPTFUNC_PARAMS) { int16 param = thread->pop(); - char buf[50]; - snprintf(buf, 50, "Reached breakpoint %d", param); + Common::String buf = Common::String::format("Reached breakpoint %d", param); - _vm->_interface->setStatusText(buf); + _vm->_interface->setStatusText(buf.c_str()); } void Script::sfWaitFramesEsc(SCRIPTFUNC_PARAMS) { diff --git a/engines/savestate.cpp b/engines/savestate.cpp index 9ed8356d3b..551c39b880 100644 --- a/engines/savestate.cpp +++ b/engines/savestate.cpp @@ -52,20 +52,20 @@ void SaveStateDescriptor::setWriteProtectedFlag(bool state) { } void SaveStateDescriptor::setSaveDate(int year, int month, int day) { - char buffer[32]; - snprintf(buffer, 32, "%.2d.%.2d.%.4d", day, month, year); + Common::String buffer; + buffer = Common::String::format("%.2d.%.2d.%.4d", day, month, year); setVal("save_date", buffer); } void SaveStateDescriptor::setSaveTime(int hour, int min) { - char buffer[32]; - snprintf(buffer, 32, "%.2d:%.2d", hour, min); + Common::String buffer; + buffer = Common::String::format("%.2d:%.2d", hour, min); setVal("save_time", buffer); } void SaveStateDescriptor::setPlayTime(int hours, int minutes) { - char buffer[32]; - snprintf(buffer, 32, "%.2d:%.2d", hours, minutes); + Common::String buffer; + buffer = Common::String::format("%.2d:%.2d", hours, minutes); setVal("play_time", buffer); } diff --git a/engines/savestate.h b/engines/savestate.h index ce78bc4ba3..df01732058 100644 --- a/engines/savestate.h +++ b/engines/savestate.h @@ -49,9 +49,7 @@ public: } SaveStateDescriptor(int s, const Common::String &d) : _thumbnail() { - char buf[16]; - sprintf(buf, "%d", s); - setVal("save_slot", buf); + setVal("save_slot", Common::String::format("%d", s)); setVal("description", d); } diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp index e6b5c3c1d4..b1b5f81995 100644 --- a/engines/sci/console.cpp +++ b/engines/sci/console.cpp @@ -74,6 +74,9 @@ static int parse_reg_t(EngineState *s, const char *str, reg_t *dest, bool mayBeV Console::Console(SciEngine *engine) : GUI::Debugger(), _engine(engine), _debugState(engine->_debugState) { + assert(_engine); + assert(_engine->_gamestate); + // Variables DVar_Register("sleeptime_factor", &g_debug_sleeptime_factor, DVAR_INT, 0); DVar_Register("gc_interval", &engine->_gamestate->scriptGCInterval, DVAR_INT, 0); @@ -128,6 +131,8 @@ Console::Console(SciEngine *engine) : GUI::Debugger(), DCmd_Register("al", WRAP_METHOD(Console, cmdAnimateList)); // alias DCmd_Register("window_list", WRAP_METHOD(Console, cmdWindowList)); DCmd_Register("wl", WRAP_METHOD(Console, cmdWindowList)); // alias + DCmd_Register("saved_bits", WRAP_METHOD(Console, cmdSavedBits)); + DCmd_Register("show_saved_bits", WRAP_METHOD(Console, cmdShowSavedBits)); // Segments DCmd_Register("segment_table", WRAP_METHOD(Console, cmdPrintSegmentTable)); DCmd_Register("segtable", WRAP_METHOD(Console, cmdPrintSegmentTable)); // alias @@ -361,6 +366,8 @@ bool Console::cmdHelp(int argc, const char **argv) { DebugPrintf(" undither - Enable/disable undithering\n"); DebugPrintf(" play_video - Plays a SEQ, AVI, VMD, RBT or DUK video\n"); DebugPrintf(" animate_object_list / al - Shows the current list of objects in kAnimate's draw list\n"); + DebugPrintf(" saved_bits - List saved bits on the hunk\n"); + DebugPrintf(" show_saved_bits - Display saved bits\n"); DebugPrintf("\n"); DebugPrintf("Segments:\n"); DebugPrintf(" segment_table / segtable - Lists all segments\n"); @@ -1597,6 +1604,174 @@ bool Console::cmdWindowList(int argc, const char **argv) { return true; } + +bool Console::cmdSavedBits(int argc, const char **argv) { + SegManager *segman = _engine->_gamestate->_segMan; + SegmentId id = segman->findSegmentByType(SEG_TYPE_HUNK); + HunkTable* hunks = (HunkTable*)segman->getSegmentObj(id); + if (!hunks) { + DebugPrintf("No hunk segment found.\n"); + return true; + } + + Common::Array<reg_t> entries = hunks->listAllDeallocatable(id); + + for (uint i = 0; i < entries.size(); ++i) { + uint16 offset = entries[i].offset; + const Hunk& h = hunks->_table[offset]; + if (strcmp(h.type, "SaveBits()") == 0) { + byte* memoryPtr = (byte*)h.mem; + + if (memoryPtr) { + DebugPrintf("%04x:%04x:", PRINT_REG(entries[i])); + + Common::Rect rect; + byte mask; + assert(h.size >= sizeof(rect) + sizeof(mask)); + + memcpy((void *)&rect, memoryPtr, sizeof(rect)); + memcpy((void *)&mask, memoryPtr + sizeof(rect), sizeof(mask)); + + DebugPrintf(" %d,%d - %d,%d", rect.top, rect.left, + rect.bottom, rect.right); + if (mask & GFX_SCREEN_MASK_VISUAL) + DebugPrintf(" visual"); + if (mask & GFX_SCREEN_MASK_PRIORITY) + DebugPrintf(" priority"); + if (mask & GFX_SCREEN_MASK_CONTROL) + DebugPrintf(" control"); + if (mask & GFX_SCREEN_MASK_DISPLAY) + DebugPrintf(" display"); + DebugPrintf("\n"); + } + } + } + + + return true; +} + +bool Console::cmdShowSavedBits(int argc, const char **argv) { + if (argc < 2) { + DebugPrintf("Display saved bits.\n"); + DebugPrintf("Usage: %s <address>\n", argv[0]); + DebugPrintf("Check the \"addresses\" command on how to use addresses\n"); + return true; + } + + reg_t memoryHandle = NULL_REG; + + if (parse_reg_t(_engine->_gamestate, argv[1], &memoryHandle, false)) { + DebugPrintf("Invalid address passed.\n"); + DebugPrintf("Check the \"addresses\" command on how to use addresses\n"); + return true; + } + + if (memoryHandle.isNull()) { + DebugPrintf("Invalid address.\n"); + return true; + } + + SegManager *segman = _engine->_gamestate->_segMan; + SegmentId id = segman->findSegmentByType(SEG_TYPE_HUNK); + HunkTable* hunks = (HunkTable*)segman->getSegmentObj(id); + if (!hunks) { + DebugPrintf("No hunk segment found.\n"); + return true; + } + + if (memoryHandle.segment != id || !hunks->isValidOffset(memoryHandle.offset)) { + DebugPrintf("Invalid address.\n"); + return true; + } + + const Hunk& h = hunks->_table[memoryHandle.offset]; + + if (strcmp(h.type, "SaveBits()") != 0) { + DebugPrintf("Invalid address.\n"); + return true; + } + + byte *memoryPtr = segman->getHunkPointer(memoryHandle); + + if (!memoryPtr) { + DebugPrintf("Invalid or freed bits.\n"); + return true; + } + + // Now we _finally_ know these are valid saved bits + + Common::Rect rect; + byte mask; + assert(h.size >= sizeof(rect) + sizeof(mask)); + + memcpy((void *)&rect, memoryPtr, sizeof(rect)); + memcpy((void *)&mask, memoryPtr + sizeof(rect), sizeof(mask)); + + Common::Point tl(rect.left, rect.top); + Common::Point tr(rect.right-1, rect.top); + Common::Point bl(rect.left, rect.bottom-1); + Common::Point br(rect.right-1, rect.bottom-1); + + DebugPrintf(" %d,%d - %d,%d", rect.top, rect.left, + rect.bottom, rect.right); + if (mask & GFX_SCREEN_MASK_VISUAL) + DebugPrintf(" visual"); + if (mask & GFX_SCREEN_MASK_PRIORITY) + DebugPrintf(" priority"); + if (mask & GFX_SCREEN_MASK_CONTROL) + DebugPrintf(" control"); + if (mask & GFX_SCREEN_MASK_DISPLAY) + DebugPrintf(" display"); + DebugPrintf("\n"); + + if (!_engine->_gfxPaint16 || !_engine->_gfxScreen) + return true; + + // We backup all planes, and then flash the saved bits + // FIXME: This probably won't work well with hi-res games + + byte bakMask = GFX_SCREEN_MASK_VISUAL | GFX_SCREEN_MASK_PRIORITY | GFX_SCREEN_MASK_CONTROL; + int bakSize = _engine->_gfxScreen->bitsGetDataSize(rect, bakMask); + reg_t bakScreen = segman->allocateHunkEntry("show_saved_bits backup", bakSize); + byte* bakMemory = segman->getHunkPointer(bakScreen); + assert(bakMemory); + _engine->_gfxScreen->bitsSave(rect, bakMask, bakMemory); + +#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER + // If a graphical debugger overlay is used, hide it here, so that the + // results can be drawn. + g_system->hideOverlay(); +#endif + + const int paintCount = 3; + for (int i = 0; i < paintCount; ++i) { + _engine->_gfxScreen->bitsRestore(memoryPtr); + _engine->_gfxScreen->drawLine(tl, tr, 0, 255, 255); + _engine->_gfxScreen->drawLine(tr, br, 0, 255, 255); + _engine->_gfxScreen->drawLine(br, bl, 0, 255, 255); + _engine->_gfxScreen->drawLine(bl, tl, 0, 255, 255); + _engine->_gfxScreen->copyRectToScreen(rect); + g_system->updateScreen(); + g_sci->sleep(500); + _engine->_gfxScreen->bitsRestore(bakMemory); + _engine->_gfxScreen->copyRectToScreen(rect); + g_system->updateScreen(); + if (i < paintCount - 1) + g_sci->sleep(500); + } + + _engine->_gfxPaint16->bitsFree(bakScreen); + +#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER + // Show the graphical debugger overlay + g_system->showOverlay(); +#endif + + return true; +} + + bool Console::cmdParseGrammar(int argc, const char **argv) { DebugPrintf("Parse grammar, in strict GNF:\n"); @@ -2779,7 +2954,7 @@ void Console::printKernelCallsFound(int kernelFuncNum, bool showFoundScripts) { uint16 argc2 = opparams[1]; if (kFuncNum == kernelFuncNum) { - DebugPrintf("Called from script %d, object %s, method %s(%d) with %d parameters\n", + DebugPrintf("Called from script %d, object %s, method %s(%d) with %d bytes for arguments\n", itr->getNumber(), objName, _engine->getKernel()->getSelectorName(obj->getFuncSelector(i)).c_str(), i, argc2); } @@ -2796,7 +2971,7 @@ void Console::printKernelCallsFound(int kernelFuncNum, bool showFoundScripts) { // Check for end of function/script if (offset >= script->getBufSize()) break; - if (opcode == op_ret)// && offset >= maxJmpOffset) + if (opcode == op_ret && offset >= maxJmpOffset) break; } // while (true) } // for (uint16 i = 0; i < obj->getMethodCount(); i++) @@ -3359,20 +3534,22 @@ bool Console::cmdSfx01Track(int argc, const char **argv) { bool Console::cmdQuit(int argc, const char **argv) { if (argc != 2) { - DebugPrintf("%s game - exit gracefully\n", argv[0]); - DebugPrintf("%s now - exit ungracefully\n", argv[0]); - return true; } - if (!scumm_stricmp(argv[1], "game")) { + if (argc == 2 && !scumm_stricmp(argv[1], "now")) { + // Quit ungracefully + g_system->quit(); + } else if (argc == 1 || (argc == 2 && !scumm_stricmp(argv[1], "game"))) { + // Quit gracefully _engine->_gamestate->abortScriptProcessing = kAbortQuitGame; // Terminate VM _debugState.seeking = kDebugSeekNothing; _debugState.runningStep = 0; - } else if (!scumm_stricmp(argv[1], "now")) { - // Quit ungracefully - g_system->quit(); + } else { + DebugPrintf("%s [game] - exit gracefully\n", argv[0]); + DebugPrintf("%s now - exit ungracefully\n", argv[0]); + return true; } return Cmd_Exit(0, 0); diff --git a/engines/sci/console.h b/engines/sci/console.h index 1e2ebe4ba2..d943923ba1 100644 --- a/engines/sci/console.h +++ b/engines/sci/console.h @@ -94,6 +94,8 @@ private: bool cmdPlayVideo(int argc, const char **argv); bool cmdAnimateList(int argc, const char **argv); bool cmdWindowList(int argc, const char **argv); + bool cmdSavedBits(int argc, const char **argv); + bool cmdShowSavedBits(int argc, const char **argv); // Segments bool cmdPrintSegmentTable(int argc, const char **argv); bool cmdSegmentInfo(int argc, const char **argv); diff --git a/engines/sci/detection.cpp b/engines/sci/detection.cpp index 61e6cc9d09..1cfedd6f1b 100644 --- a/engines/sci/detection.cpp +++ b/engines/sci/detection.cpp @@ -23,6 +23,7 @@ #include "engines/advancedDetector.h" #include "base/plugins.h" #include "common/file.h" +#include "common/ptr.h" #include "common/savefile.h" #include "common/system.h" #include "graphics/thumbnail.h" @@ -224,6 +225,7 @@ static const OldNewIdTableEntry s_oldNewTable[] = { { "emc", "funseeker", SCI_VERSION_NONE }, { "gk", "gk1", SCI_VERSION_NONE }, // gk2 is the same + { "gk2demo", "gk2", SCI_VERSION_NONE }, { "hoyledemo", "hoyle1", SCI_VERSION_NONE }, { "cardgames", "hoyle1", SCI_VERSION_NONE }, { "solitare", "hoyle2", SCI_VERSION_NONE }, @@ -235,7 +237,7 @@ static const OldNewIdTableEntry s_oldNewTable[] = { { "kq4", "kq4sci", SCI_VERSION_NONE }, // kq5 is the same // kq6 is the same - // kq7 is the same + { "kq7cd", "kq7", SCI_VERSION_NONE }, { "mm1", "laurabow", SCI_VERSION_NONE }, { "cb1", "laurabow", SCI_VERSION_NONE }, { "lb2", "laurabow2", SCI_VERSION_NONE }, @@ -323,7 +325,7 @@ Common::String convertSierraGameId(Common::String sierraId, uint32 *gameFlags, R for (const OldNewIdTableEntry *cur = s_oldNewTable; cur->oldId[0]; ++cur) { if (sierraId == cur->oldId) { - // Distinguish same IDs from the SCI version + // Distinguish same IDs via the SCI version if (cur->version != SCI_VERSION_NONE && cur->version != getSciVersion()) continue; @@ -371,35 +373,11 @@ static ADGameDescription s_fallbackDesc = { static char s_fallbackGameIdBuf[256]; - -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Sci::SciGameDescriptions, - // Size of that superset structure - sizeof(ADGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - s_sciGameTitles, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "sci", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NONE, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class SciMetaEngine : public AdvancedMetaEngine { public: - SciMetaEngine() : AdvancedMetaEngine(detectionParams) {} + SciMetaEngine() : AdvancedMetaEngine(Sci::SciGameDescriptions, sizeof(ADGameDescription), s_sciGameTitles) { + _singleid = "sci"; + } virtual const char *getName() const { return "SCI [SCI0, SCI01, SCI10, SCI11" @@ -414,7 +392,7 @@ public: } virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *gd) const; - const ADGameDescription *fallbackDetect(const Common::FSList &fslist) const; + const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const; virtual bool hasFeature(MetaEngineFeature f) const; virtual SaveStateList listSaves(const char *target) const; virtual int getMaximumSaveSlot() const; @@ -442,7 +420,7 @@ Common::Language charToScummVMLanguage(const char c) { } } -const ADGameDescription *SciMetaEngine::fallbackDetect(const Common::FSList &fslist) const { +const ADGameDescription *SciMetaEngine::fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const { bool foundResMap = false; bool foundRes000 = false; @@ -453,62 +431,55 @@ const ADGameDescription *SciMetaEngine::fallbackDetect(const Common::FSList &fsl s_fallbackDesc.platform = Common::kPlatformPC; // default to PC platform s_fallbackDesc.gameid = "sci"; - // First grab all filenames - for (Common::FSList::const_iterator file = fslist.begin(); file != fslist.end(); ++file) { - if (file->isDirectory()) - continue; - - Common::String filename = file->getName(); - filename.toLowercase(); + if (allFiles.contains("resource.map") || allFiles.contains("Data1") + || allFiles.contains("resmap.001") || allFiles.contains("resmap.001")) { + foundResMap = true; + } - if (filename.contains("resource.map") || filename.contains("resmap.00") || filename.contains("Data1")) { - foundResMap = true; + // Determine if we got a CD version and set the CD flag accordingly, by checking for + // resource.aud for SCI1.1 CD games, or audio001.002 for SCI1 CD games. We assume that + // the file should be over 10MB, as it contains all the game speech and is usually + // around 450MB+. The size check is for some floppy game versions like KQ6 floppy, which + // also have a small resource.aud file + if (allFiles.contains("resource.aud") || allFiles.contains("audio001.002")) { + Common::FSNode file = allFiles.contains("resource.aud") ? allFiles["resource.aud"] : allFiles["audio001.002"]; + Common::SeekableReadStream *tmpStream = file.createReadStream(); + if (tmpStream->size() > 10 * 1024 * 1024) { + // We got a CD version, so set the CD flag accordingly + s_fallbackDesc.flags |= ADGF_CD; } + delete tmpStream; + } - // Determine if we got a CD version and set the CD flag accordingly, by checking for - // resource.aud for SCI1.1 CD games, or audio001.002 for SCI1 CD games. We assume that - // the file should be over 10MB, as it contains all the game speech and is usually - // around 450MB+. The size check is for some floppy game versions like KQ6 floppy, which - // also have a small resource.aud file - if (filename.contains("resource.aud") || filename.contains("audio001.002")) { - Common::SeekableReadStream *tmpStream = file->createReadStream(); - if (tmpStream->size() > 10 * 1024 * 1024) { - // We got a CD version, so set the CD flag accordingly - s_fallbackDesc.flags |= ADGF_CD; - s_fallbackDesc.extra = "CD"; - } - delete tmpStream; - } + if (allFiles.contains("resource.000") || allFiles.contains("resource.001") + || allFiles.contains("ressci.000") || allFiles.contains("ressci.001")) + foundRes000 = true; - if (filename.contains("resource.000") || filename.contains("resource.001") - || filename.contains("ressci.000") || filename.contains("ressci.001")) - foundRes000 = true; + // Data1 contains both map and volume for SCI1.1+ Mac games + if (allFiles.contains("Data1")) { + foundResMap = foundRes000 = true; + s_fallbackDesc.platform = Common::kPlatformMacintosh; + } - // Data1 contains both map and volume for SCI1.1+ Mac games - if (filename.contains("Data1")) { - foundResMap = foundRes000 = true; - s_fallbackDesc.platform = Common::kPlatformMacintosh; - } + // Determine the game platform + // The existence of any of these files indicates an Amiga game + if (allFiles.contains("9.pat") || allFiles.contains("spal") || + allFiles.contains("patch.005") || allFiles.contains("bank.001")) + s_fallbackDesc.platform = Common::kPlatformAmiga; - // Determine the game platform - // The existence of any of these files indicates an Amiga game - if (filename.contains("9.pat") || filename.contains("spal") || - filename.contains("patch.005") || filename.contains("bank.001")) - s_fallbackDesc.platform = Common::kPlatformAmiga; + // The existence of 7.pat or patch.200 indicates a Mac game + if (allFiles.contains("7.pat") || allFiles.contains("patch.200")) + s_fallbackDesc.platform = Common::kPlatformMacintosh; - // The existence of 7.pat or patch.200 indicates a Mac game - if (filename.contains("7.pat") || filename.contains("patch.200")) - s_fallbackDesc.platform = Common::kPlatformMacintosh; + // The data files for Atari ST versions are the same as their DOS counterparts - // The data files for Atari ST versions are the same as their DOS counterparts - } // If these files aren't found, it can't be SCI if (!foundResMap && !foundRes000) { return 0; } - ResourceManager *resMan = new ResourceManager(); + Common::ScopedPtr<ResourceManager> resMan(new ResourceManager()); assert(resMan); resMan->addAppropriateSources(fslist); resMan->init(true); @@ -518,7 +489,6 @@ const ADGameDescription *SciMetaEngine::fallbackDetect(const Common::FSList &fsl // Is SCI32 compiled in? If not, and this is a SCI32 game, // stop here if (getSciVersion() >= SCI_VERSION_2) { - delete resMan; return (const ADGameDescription *)&s_fallbackDesc; } #endif @@ -529,7 +499,6 @@ const ADGameDescription *SciMetaEngine::fallbackDetect(const Common::FSList &fsl // Can't be SCI (or unsupported SCI views). Pinball Creep by sierra also uses resource.map/resource.000 files // but doesnt share sci format at all, if we dont return 0 here we will detect this game as SCI if (gameViews == kViewUnknown) { - delete resMan; return 0; } @@ -542,7 +511,6 @@ const ADGameDescription *SciMetaEngine::fallbackDetect(const Common::FSList &fsl // If we don't have a game id, the game is not SCI if (sierraGameId.empty()) { - delete resMan; return 0; } @@ -581,24 +549,40 @@ const ADGameDescription *SciMetaEngine::fallbackDetect(const Common::FSList &fsl } - // Fill in extras field + // Fill in "extra" field + + // Is this an EGA version that might have a VGA pendant? Then we want + // to mark it as such in the "extra" field. + const bool markAsEGA = (gameViews == kViewEga && s_fallbackDesc.platform != Common::kPlatformAmiga + && getSciVersion() > SCI_VERSION_1_EGA_ONLY); + + const bool isDemo = (s_fallbackDesc.flags & ADGF_DEMO); + const bool isCD = (s_fallbackDesc.flags & ADGF_CD); if (gameId.hasSuffix("sci")) { s_fallbackDesc.extra = "SCI"; // Differentiate EGA versions from the VGA ones, where needed - if (gameViews == kViewEga && s_fallbackDesc.platform != Common::kPlatformAmiga) + if (markAsEGA) s_fallbackDesc.extra = "SCI/EGA"; + + // Mark as demo. + // Note: This overwrites the 'EGA' info, if it was previously set. + if (isDemo) + s_fallbackDesc.extra = "SCI/Demo"; } else { - if (gameViews == kViewEga && s_fallbackDesc.platform != Common::kPlatformAmiga) + if (markAsEGA) s_fallbackDesc.extra = "EGA"; - } - // Add "demo" to the description for demos - if (s_fallbackDesc.flags & ADGF_DEMO) - s_fallbackDesc.extra = (gameId.hasSuffix("sci")) ? "SCI/Demo" : "Demo"; - - delete resMan; + // Set "CD" and "Demo" as appropriate. + // Note: This overwrites the 'EGA' info, if it was previously set. + if (isDemo && isCD) + s_fallbackDesc.extra = "CD Demo"; + else if (isDemo) + s_fallbackDesc.extra = "Demo"; + else if (isCD) + s_fallbackDesc.extra = "CD"; + } return (const ADGameDescription *)&s_fallbackDesc; } @@ -748,7 +732,7 @@ Common::Error SciEngine::loadGameState(int slot) { } } -Common::Error SciEngine::saveGameState(int slot, const char *desc) { +Common::Error SciEngine::saveGameState(int slot, const Common::String &desc) { Common::String fileName = Common::String::format("%s.%03d", _targetName.c_str(), slot); Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager(); Common::OutSaveFile *out = saveFileMan->openForSaving(fileName); diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h index d56d8f03cd..73f4e4e89f 100644 --- a/engines/sci/detection_tables.h +++ b/engines/sci/detection_tables.h @@ -503,6 +503,14 @@ static const struct ADGameDescription SciGameDescriptions[] = { AD_LISTEND}, Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + // Eco Quest 2 - Spanish DOS Floppy (supplied by umbrio in bug report #3313962) + {"ecoquest2", "Floppy", { + {"resource.map", 0, "a6b271b934afa7e84d03816a4fefa67b", 5593}, + {"resource.000", 0, "1c4093f7248240329121fdf8c0d59152", 4209150}, + {"resource.msg", 0, "eff8be1925d42288de55e405983e9314", 117810}, + AD_LISTEND}, + Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + // Freddy Pharkas - English DOS demo (from FRG) // SCI interpreter version 1.001.069 {"freddypharkas", "Demo", { @@ -609,7 +617,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "372d059f75856afa6d73dd84cbb8913d", 10783}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 13022630}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight - English DOS Floppy (supplied my markcoolio in bug report #2723777) // SCI interpreter version 2.000.000 @@ -617,7 +625,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "65e8c14092e4c9b3b3538b7602c8c5ec", 10783}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 13022630}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight - English DOS Floppy // SCI interpreter version 2.000.000, VERSION file reports "1.0\nGabriel Knight\n11/22/10:33 pm\n\x1A" @@ -625,7 +633,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "ef41df08cf2c1f680216cdbeed0f8311", 10783}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 13022630}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight - German DOS Floppy (supplied my markcoolio in bug report #2723775) // SCI interpreter version 2.000.000 @@ -633,7 +641,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "ad6508b0296b25c07b1f58828dc33696", 10789}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13077029}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight - English DOS CD (from jvprat) // Executable scanning reports "2.000.000", VERSION file reports "01.100.000" @@ -641,7 +649,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "372d059f75856afa6d73dd84cbb8913d", 10996}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 12581736}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_CD, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - English Windows CD (from jvprat) // Executable scanning reports "2.000.000", VERSION file reports "01.100.000" @@ -649,7 +657,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "372d059f75856afa6d73dd84cbb8913d", 10996}, {"resource.000", 0, "69b7516962510f780d38519cc15fcc7c", 12581736}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_CD, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - German DOS CD (from Tobis87) // SCI interpreter version 2.000.000 @@ -657,7 +665,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "a7d3e55114c65647310373cb390815ba", 11392}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13400497}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, ADGF_CD, GUIO_NONE }, + Common::DE_DEU, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - Spanish DOS CD (from jvprat) // Executable scanning reports "2.000.000", VERSION file reports "1.000.000, April 13, 1995" @@ -665,7 +673,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "7cb6e9bba15b544ec7a635c45bde9953", 11404}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13381599}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformPC, ADGF_CD, GUIO_NONE }, + Common::ES_ESP, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - French DOS CD (from Hkz) // VERSION file reports "1.000.000, May 3, 1994" @@ -673,7 +681,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "55f909ba93a2515042a08d8a2da8414e", 11392}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13325145}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformPC, ADGF_CD, GUIO_NONE }, + Common::FR_FRA, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - German Windows CD (from Tobis87) // SCI interpreter version 2.000.000 @@ -681,7 +689,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "a7d3e55114c65647310373cb390815ba", 11392}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13400497}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, ADGF_CD, GUIO_NONE }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - Spanish Windows CD (from jvprat) // Executable scanning reports "2.000.000", VERSION file reports "1.000.000, April 13, 1995" @@ -689,7 +697,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "7cb6e9bba15b544ec7a635c45bde9953", 11404}, {"resource.000", 0, "091cf08910780feabc56f8551b09cb36", 13381599}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformWindows, ADGF_CD, GUIO_NONE }, + Common::ES_ESP, Common::kPlatformWindows, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight - English Macintosh {"gk1", "", { @@ -698,7 +706,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"Data3", 0, "f25068b408b09275d8b698866462f578", 3677599}, {"Data4", 0, "1cceebbe411b26c860a74f91c337fdf3", 3230086}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK | ADGF_UNSTABLE, GUIO_NONE }, // Gabriel Knight 2 - English Windows Non-Interactive Demo // Executable scanning reports "2.100.002" @@ -706,7 +714,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "e0effce11c4908f4b91838741716c83d", 1351}, {"resource.000", 0, "d04cfc7f04b6f74d13025378be49ec2b", 4640330}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight 2 - English DOS (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "1.1" @@ -724,7 +732,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.006", 0, "ce9359037277b7d7976da185c2fa0aad", 2977}, {"ressci.006", 0, "8e44e03890205a7be12f45aaba9644b4", 60659424}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight 2 - French DOS (6-CDs Sierra Originals reedition) // Executable scanning reports "2.100.002", VERSION file reports "1.0" @@ -742,7 +750,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.006", 0, "11b2e722170b8c93fdaa5428e2c7676f", 3001}, {"ressci.006", 0, "4037d941aec39d2e654e20960429aefc", 60568486}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformPC, 0, + Common::FR_FRA, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Gabriel Knight 2 - English Macintosh @@ -755,7 +763,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"Data4", 0, "8b843c62eb53136a855d6e0087e3cb0d", 5889553}, {"Data5", 0, "f9fcf9ab2eb13b2125c33a1cda03a093", 14349984}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK | ADGF_UNSTABLE, GUIO_NONE }, #endif // ENABLE_SCI32 @@ -1438,7 +1446,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.000", 0, "4948e4e1506f1e1c4e1d47abfa06b7f8", 204385195}, {"resource.map", 0, "40ccafb2195301504eba2e4f4f2c7f3d", 18925}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // King's Quest 7 - English Windows (from the King's Quest Collection) // Executable scanning reports "2.100.002", VERSION file reports "1.4" @@ -1446,7 +1454,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "2be9ab94429c721af8e05c507e048a15", 18697}, {"resource.000", 0, "eb63ea3a2c2469dc2d777d351c626404", 203882535}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // King's Quest 7 - English DOS (from FRG) // SCI interpreter version 2.100.002, VERSION file reports "2.00b" @@ -1454,7 +1462,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "8676b0fbbd7362989a029fe72fea14c6", 18709}, {"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // King's Quest 7 - English Windows (from FRG) // SCI interpreter version 2.100.002, VERSION file reports "2.00b" @@ -1462,7 +1470,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "8676b0fbbd7362989a029fe72fea14c6", 18709}, {"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // King's Quest 7 - German Windows (supplied by markcoolio in bug report #2727402) // SCI interpreter version 2.100.002 @@ -1470,7 +1478,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "838b9ff132bd6962026fee832e8a7ddb", 18697}, {"resource.000", 0, "eb63ea3a2c2469dc2d777d351c626404", 206626576}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // King's Quest 7 - Spanish DOS (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "2.00" @@ -1478,7 +1486,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "0b62693cbe87e3aaca3e8655a437f27f", 18709}, {"resource.000", 0, "51c1ead1163e19a2de8f121c39df7a76", 200764100}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::ES_ESP, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // King's Quest 7 - English DOS Non-Interactive Demo // SCI interpreter version 2.100.002 @@ -1486,7 +1494,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "b44f774108d63faa1d021101221c5a54", 1690}, {"resource.000", 0, "d9659d2cf0c269c6a9dc776707f5bea0", 2433827}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, #endif // ENABLE_SCI32 @@ -2079,7 +2087,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "0c0804434ea62278dd15032b1947426c", 8872}, {"resource.000", 0, "9a9f4870504444cda863dd14d077a680", 18520872}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Larry 6 - German DOS CD - HIRES (provided by richiefs in bug report #2670691) // SCI interpreter version 2.100.002 @@ -2087,7 +2095,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "badfdf446ffed569a310d2c63a249421", 8896}, {"resource.000", 0, "bd944d2b06614a5b39f1586906f0ee88", 18534274}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NONE }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Larry 6 - French DOS CD - HIRES (provided by richiefs in bug report #2670691) // SCI interpreter version 2.100.002 @@ -2095,7 +2103,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "d184e9aa4f2d4b5670ddb3669db82cda", 8896}, {"resource.000", 0, "bd944d2b06614a5b39f1586906f0ee88", 18538987}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NONE }, + Common::FR_FRA, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Larry 7 - English DOS Demo (provided by richiefs in bug report #2670691) // SCI interpreter version 2.100.002 @@ -2103,7 +2111,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "5cc6159688b2dc03790a67c90ccc67f9", 10195878}, {"resmap.000", 0, "6a2b2811eef82e87cde91cf1de845af8", 2695}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, #ifdef ENABLE_SCI3_GAMES // Larry 7 - English DOS CD (from spookypeanut) @@ -2112,7 +2120,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "eae93e1b1d1ccc58b4691c371281c95d", 8188}, {"ressci.000", 0, "89353723488219e25589165d73ed663e", 66965678}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Larry 7 - German DOS (from Tobis87) // SCI interpreter version 3.000.000 @@ -2120,7 +2128,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "c11e6bfcfc2f2d05da47e5a7df3e9b1a", 8188}, {"ressci.000", 0, "a8c6817bb94f332ff498a71c8b47f893", 66971724}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Larry 7 - French DOS (provided by richiefs in bug report #2670691) // SCI interpreter version 3.000.000 @@ -2128,7 +2136,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "4407849fd52fe3efb0c30fba60cd5cd4", 8206}, {"ressci.000", 0, "dc37c3055fffbefb494ff22b145d377b", 66964472}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Larry 7 - Italian DOS CD (from glorifindel) // SCI interpreter version 3.000.000 @@ -2136,7 +2144,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "9852a97141f789413f29bf956052acdb", 8212}, {"ressci.000", 0, "440b9fed89590abb4e4386ed6f948ee2", 67140181}, AD_LISTEND}, - Common::IT_ITA, Common::kPlatformPC, 0, GUIO_NONE }, + Common::IT_ITA, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Larry 7 - Spanish DOS (from the Leisure Suit Larry Collection) // Executable scanning reports "3.000.000", VERSION file reports "1.0s" @@ -2144,7 +2152,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "8f3d603e1acc834a5d598b30cdfc93f3", 8188}, {"ressci.000", 0, "32792f9bc1bf3633a88b382bb3f6e40d", 67071418}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::ES_ESP, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, #endif // Lighthouse - English Windows Demo (from jvprat) @@ -2153,7 +2161,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "543124606352bfa5e07696ddf2a669be", 64}, {"resource.000", 0, "5d7714416b612463d750fb9c5690c859", 28952}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, #ifdef ENABLE_SCI3_GAMES // Lighthouse - English Windows Demo @@ -2162,7 +2170,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "3bdee7a16926975a4729f75cf6b80a92", 1525}, {"ressci.000", 0, "3c585827fa4a82f4c04a56a0bc52ccee", 11494351}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, // Lighthouse - English DOS (from jvprat) // Executable scanning reports "3.000.000", VERSION file reports "1.1" @@ -2172,7 +2180,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.002", 0, "c68db5333f152fea6ca2dfc75cad8b34", 7573}, {"ressci.002", 0, "175468431a979b9f317c294ce3bc1430", 94628315}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Lighthouse - Spanish DOS (from jvprat) // Executable scanning reports "3.000.000", VERSION file reports "1.1" @@ -2182,7 +2190,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.002", 0, "e7dc85884a2417e2eff9de0c63dd65fa", 7630}, {"ressci.002", 0, "3c8d627c555b0e3e4f1d9955bc0f0df4", 94631127}, AD_LISTEND}, - Common::ES_ESP, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::ES_ESP, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, #endif // ENABLE_SCI3_GAMES #endif // ENABLE_SCI32 @@ -2299,7 +2307,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "5159a1578c4306bfe070a3e4d8c2e1d3", 4741}, {"resource.000", 0, "1926925c95d82f0999590e93b02887c5", 15150768}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Mixed-Up Mother Goose Deluxe - Multilingual Windows CD (English/French/German/Spanish) // Executable scanning reports "2.100.002" @@ -2307,7 +2315,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "ef611af561898dcfea87846919ebf3eb", 4969}, {"ressci.000", 0, "227685bc59d90821978d330713e44a7a", 17205800}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, #endif // ENABLE_SCI32 // Ms. Astro Chicken - English DOS @@ -2337,7 +2345,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.007", 0, "afbd16ea77869a720afa1c5371de107d", 7972}, //{"ressci.007", 0, "3aae6559aa1df273bc542d5ac6330d75", 25859038}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Phantasmagoria - English DOS Demo // Executable scanning reports "2.100.002" @@ -2345,7 +2353,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.001", 0, "416138651ea828219ca454cae18341a3", 11518}, {"ressci.001", 0, "3aae6559aa1df273bc542d5ac6330d75", 65844612}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, // Phantasmagoria - English DOS/Windows (GOG version) - ressci.* merged in ressci.000 // Windows executable scanning reports "2.100.002" - "Sep 19 1995 15:09:43" @@ -2356,7 +2364,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "cd5967f9b9586e3380645961c0765be3", 116822037}, {"resmap.000", 0, "3cafc1c6a53945c1f3babbfd6380c64c", 16468}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Phantasmagoria - English Macintosh // NOTE: This only contains disc 1 files (as well as the two persistent files: @@ -2372,7 +2380,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { // Data8-12 are empty {"Data13", 0, "6d2c450fca19a69b5af74ed5b03c0a17", 14923328}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformMacintosh, ADGF_MACRESFORK | ADGF_UNSTABLE, GUIO_NONE }, #ifdef ENABLE_SCI3_GAMES // Phantasmagoria 2 - English Windows (from jvprat) @@ -2389,7 +2397,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.005", 0, "8bd5ceeedcbe16dfe55d1b90dcd4be84", 1942}, {"ressci.005", 0, "05f9fe2bee749659acb3cd2c90252fc5", 67905112}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Phantasmagoria 2 - English DOS (GOG version) - ressci.* merged in ressci.000 // Executable scanning reports "3.000.000" - "Dec 07 1996 09:29:03" @@ -2399,7 +2407,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "c54f26d9f43f908151263254b6d97053", 108134481}, {"resmap.000", 0, "de154a223a9ef4ea7358b76adc38ef5b", 2956}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, #endif // ENABLE_SCI3_GAMES #endif // ENABLE_SCI32 @@ -2606,7 +2614,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "379dfe80ed6bd16c47e4b950c4722eac", 11374}, {"resource.000", 0, "fd316a09b628b7032248139003369022", 18841068}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_CD, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // Police Quest 4 - English DOS // SCI interpreter version 2.000.000 (a guess?) @@ -2614,7 +2622,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "aed9643158ccf01b71f359db33137f82", 9895}, {"resource.000", 0, "da383857b3be1e4514daeba2524359e0", 15141432}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Police Quest 4 - French DOS (supplied by abevi in bug report #2612718) // SCI interpreter version 2.000.000 @@ -2622,7 +2630,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "008030846edcc7c5c7a812c7f4ae4ceb", 9256}, {"resource.000", 0, "6ba98bd2e436739d87ecd2a9b99cabb4", 14730153}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::FR_FRA, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Police Quest 4 - German DOS (supplied by markcoolio in bug report #2723840) // SCI interpreter version 2.000.000 (a guess?) @@ -2630,7 +2638,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "2393ee728ab930b2762cb5889f9b5aff", 9256}, {"resource.000", 0, "6ba98bd2e436739d87ecd2a9b99cabb4", 14730155}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Police Quest: SWAT - English DOS/Windows Demo (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "0.001.200" @@ -2638,7 +2646,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "8c96733ef94c21526792f7ca4e3f2120", 1648}, {"resource.000", 0, "d8892f1b8c56c8f7704325460f49b300", 3676175}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, // Police Quest: SWAT - English DOS (from GOG.com) // Executable scanning reports "2.100.002", VERSION file reports "1.0c" @@ -2646,7 +2654,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "1c2563fee189885e29d9348f37306d94", 12175}, {"ressci.000", 0, "b2e1826ca81ce2e7e764587f5a14eee9", 127149181}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Police Quest: SWAT - English Windows (from the Police Quest Collection) // Executable scanning reports "2.100.002", VERSION file reports "1.0c" @@ -2661,7 +2669,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.004", 0, "4228038906f041623e65789500b22285", 6835}, {"ressci.004", 0, "b7e619e6ecf62fe65d5116a3a422e5f0", 46223872}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, #endif // ENABLE_SCI32 // Quest for Glory 1 / Hero's Quest - English DOS 3.5" Floppy (supplied by merkur in bug report #2718784) @@ -2972,7 +2980,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "685bdb1ed47bbbb0e5e25db392da83ce", 9301}, {"resource.000", 0, "f64fd6aa3977939a86ff30783dd677e1", 11004993}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Quest for Glory 4 1.1 Floppy - English DOS (supplied by abevi in bug report #2612718) // SCI interpreter version 2.000.000 @@ -2980,7 +2988,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "d10a4cc177d2091d744e2ad8c049b0ae", 9295}, {"resource.000", 0, "f64fd6aa3977939a86ff30783dd677e1", 11003589}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Quest for Glory 4 1.1 Floppy - German DOS (supplied by markcool in bug report #2723850) // Executable scanning reports "2.000.000", VERSION file reports "1.1" @@ -2988,7 +2996,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "9e0abba8746f40565bc7eb5720522ecd", 9301}, {"resource.000", 0, "57f22cdc54eeb35fce1f26b31b5c3ee1", 11076197}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Quest for Glory 4 CD - English DOS/Windows (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "1.0" @@ -2996,7 +3004,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "aba367f2102e81782d961b14fbe3d630", 10246}, {"resource.000", 0, "263dce4aa34c49d3ad29bec889007b1c", 11571394}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_CD, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_CD | ADGF_UNSTABLE, GUIO_NONE }, // RAMA - English DOS/Windows Demo // Executable scanning reports "2.100.002", VERSION file reports "000.000.008" @@ -3004,7 +3012,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.001", 0, "775304e9b2a545156be4d94209550094", 1393}, {"ressci.001", 0, "259437fd75fdf51e8207fda8c01fa4fd", 2334384}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NONE }, #ifdef ENABLE_SCI3_GAMES // RAMA - English Windows (from jvprat) @@ -3017,7 +3025,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.003", 0, "31ef4c0621711585d031f0ae81707251", 1636}, {"ressci.003", 0, "2a68edd064e5e4937b5e9c74b38f2082", 6860492}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, // RAMA - English Windows (from Quietust, in bug report #2850645) {"rama", "", { @@ -3028,7 +3036,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.003", 0, "48841e4b84ef1b98b48d43566fda9e13", 1636}, {"ressci.003", 0, "2a68edd064e5e4937b5e9c74b38f2082", 6870356}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, // RAMA - Italian Windows CD (from glorifindel) // SCI interpreter version 3.000.000 (a guess?) @@ -3036,7 +3044,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.001", 0, "2a68edd064e5e4937b5e9c74b38f2082", 70611091}, {"resmap.001", 0, "70ba2ff04a2b7fb2c52420ba7fbd47c2", 8338}, AD_LISTEND}, - Common::IT_ITA, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::IT_ITA, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, #endif // ENABLE_SCI3_GAMES // Shivers - English Windows (from jvprat) @@ -3045,14 +3053,14 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "f2ead37749ed8f6535a2445a7d05a0cc", 46525}, {"ressci.000", 0, "4294c6d7510935f2e0a52e302073c951", 262654836}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, // Shivers - German Windows (from Tobis87) {"shivers", "", { {"resmap.000", 0, "f483d0a1f78334c18052e92785c3086e", 46537}, {"ressci.000", 0, "6751b144671e2deed919eb9d284b07eb", 262390692}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, // Shivers - English Windows Demo // Executable scanning reports "2.100.002" @@ -3060,7 +3068,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "d9e0bc5eddefcbe47f528760085d8927", 1186}, {"ressci.000", 0, "3a93c6340b54e07e65d0e5583354d186", 10505469}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NONE }, // Shivers 2 doesn't contain SCI scripts. The whole game logic has // been reimplemented from SCI in native code placed in DLL files. @@ -3078,7 +3086,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "d8659188b84beaef076bd869837cd530", 634}, {"ressci.000", 0, "7fbac0807a044c9543e8ac376d200e59", 4925003}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NONE }, // Shivers 2 - English Windows (from abevi) // VERSION.TXT Version 1.0 (3/25/97) @@ -3086,7 +3094,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.001", 0, "a79d03d6eb75be0a79324f14e3d2ace4", 95346793}, {"resmap.001", 0, "a4804d436d90c4ec2e46b537f5e954db", 6268}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, #endif @@ -3564,7 +3572,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "6dddfa3a8f3a3a513ec9dfdfae955005", 10528}, {"resource.000", 0, "c4259ab7355aead07773397b1052827d", 41150806}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Space Quest 6 - English DOS/Win3.11 CD ver 1.11 (from FRG) // SCI interpreter version 2.100.002 (just a guess) @@ -3572,7 +3580,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "e0615d6e4e10e37ae42e6a2a95aaf145", 10528}, {"resource.000", 0, "c4259ab7355aead07773397b1052827d", 41150806}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, 0, GUIO_NONE }, + Common::EN_ANY, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Space Quest 6 - French DOS/Win3.11 CD (from French magazine Joystick - September 1997) // Executable scanning reports "2.100.002", VERSION file reports "1.0" @@ -3580,7 +3588,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "3c831625931d5079b73ae8c275f52c95", 10534}, {"resource.000", 0, "4195ca940f759424f62b90e262cc1737", 40932397}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformPC, 0, GUIO_NONE }, + Common::FR_FRA, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Space Quest 6 - German DOS (from Tobis87, updated info from markcoolio in bug report #2723884) // SCI interpreter version 2.100.002 (just a guess) @@ -3588,7 +3596,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "664d797415484f85c90b1b45aedc7686", 10534}, {"resource.000", 0, "ba87ba91e5bdabb4169dd0df75777722", 40933685}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformPC, 0, GUIO_NONE }, + Common::DE_DEU, Common::kPlatformPC, ADGF_UNSTABLE, GUIO_NONE }, // Space Quest 6 - English DOS/Win3.11 Interactive Demo (from FRG) // SCI interpreter version 2.100.002 (just a guess) @@ -3596,7 +3604,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resource.map", 0, "368f07b07433db3f819fa3fa0e5efee5", 2572}, {"resource.000", 0, "ab12724e078dea34b624e0d2a38dcd7c", 2272050}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, #endif // ENABLE_SCI32 // The Island of Dr. Brain - English DOS CD (from jvprat) @@ -3630,7 +3638,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "9a3e172cde9963d0a969f26469318cec", 3403}, {"ressci.000", 0, "db3e290481c35c3224e9602e71e4a1f1", 5073868}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_DEMO | ADGF_UNSTABLE, GUIO_NOSPEECH }, // Torin's Passage - English Windows // SCI interpreter version 2.100.002 (just a guess) @@ -3638,7 +3646,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799}, {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, AD_LISTEND}, - Common::EN_ANY, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::EN_ANY, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Torin's Passage - Spanish Windows (from jvprat) // Executable scanning reports "2.100.002", VERSION file reports "1.0" @@ -3647,7 +3655,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, // TODO: depend on one of the patches? AD_LISTEND}, - Common::ES_ESP, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::ES_ESP, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Torin's Passage - French Windows // SCI interpreter version 2.100.002 (just a guess) @@ -3655,7 +3663,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799}, {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, AD_LISTEND}, - Common::FR_FRA, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::FR_FRA, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Torin's Passage - German Windows // SCI interpreter version 2.100.002 (just a guess) @@ -3663,7 +3671,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799}, {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, AD_LISTEND}, - Common::DE_DEU, Common::kPlatformWindows, 0, GUIO_NOSPEECH }, + Common::DE_DEU, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NOSPEECH }, // Torin's Passage - Italian Windows CD (from glorifindel) // SCI interpreter version 2.100.002 (just a guess) @@ -3671,7 +3679,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { {"resmap.000", 0, "bb3b0b22ff08df54fbe2d06263409be6", 9799}, {"ressci.000", 0, "693a259d346c9360f4a0c11fdaae430a", 55973887}, AD_LISTEND}, - Common::IT_ITA, Common::kPlatformWindows, 0, GUIO_NONE }, + Common::IT_ITA, Common::kPlatformWindows, ADGF_UNSTABLE, GUIO_NONE }, #endif // ENABLE_SCI32 // SCI Fanmade Games diff --git a/engines/sci/engine/kfile.cpp b/engines/sci/engine/kfile.cpp index 39e15aa84e..e1e52215d2 100644 --- a/engines/sci/engine/kfile.cpp +++ b/engines/sci/engine/kfile.cpp @@ -100,12 +100,12 @@ enum { -reg_t file_open(EngineState *s, const char *filename, int mode, bool unwrapFilename) { +reg_t file_open(EngineState *s, const Common::String &filename, int mode, bool unwrapFilename) { Common::String englishName = g_sci->getSciLanguageString(filename, K_LANG_ENGLISH); Common::String wrappedName = unwrapFilename ? g_sci->wrapFilename(englishName) : englishName; Common::SeekableReadStream *inFile = 0; Common::WriteStream *outFile = 0; - Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager(); + Common::SaveFileManager *saveFileMan = g_sci->getSaveFileManager(); if (mode == _K_FILE_MODE_OPEN_OR_FAIL) { // Try to open file, abort if not possible @@ -178,7 +178,7 @@ reg_t kFOpen(EngineState *s, int argc, reg_t *argv) { int mode = argv[1].toUint16(); debugC(kDebugLevelFile, "kFOpen(%s,0x%x)", name.c_str(), mode); - return file_open(s, name.c_str(), mode, true); + return file_open(s, name, mode, true); } static FileHandle *getFileFromHandle(EngineState *s, uint handle) { @@ -349,7 +349,7 @@ reg_t kDeviceInfo(EngineState *s, int argc, reg_t *argv) { if (findSavegame(saves, savegameId) != -1) { // Confirmed that this id still lives... Common::String filename = g_sci->getSavegameName(savegameId); - Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager(); + Common::SaveFileManager *saveFileMan = g_sci->getSaveFileManager(); saveFileMan->removeSavefile(filename); } break; @@ -410,7 +410,7 @@ static bool _savegame_sort_byDate(const SavegameDesc &l, const SavegameDesc &r) // Create a sorted array containing all found savedgames static void listSavegames(Common::Array<SavegameDesc> &saves) { - Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager(); + Common::SaveFileManager *saveFileMan = g_sci->getSaveFileManager(); // Load all saves Common::StringArray saveNames = saveFileMan->listSavefiles(g_sci->getSavegamePattern()); @@ -463,7 +463,7 @@ static int findSavegame(Common::Array<SavegameDesc> &saves, int16 savegameId) { // The scripts get IDs ranging from 100->199, because the scripts require us to assign unique ids THAT EVEN STAY BETWEEN // SAVES and the scripts also use "saves-count + 1" to create a new savedgame slot. // SCI1.1 actually recycles ids, in that case we will currently get "0". -// This behaviour is required especially for LSL6. In this game, it's possible to quick save. The scripts will use +// This behavior is required especially for LSL6. In this game, it's possible to quick save. The scripts will use // the last-used id for that feature. If we don't assign sticky ids, the feature will overwrite different saves all the // time. And sadly we can't just use the actual filename ids directly, because of the creation method for new slots. @@ -637,14 +637,14 @@ reg_t kSaveGame(EngineState *s, int argc, reg_t *argv) { s->r_acc = NULL_REG; Common::String filename = g_sci->getSavegameName(savegameId); - Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager(); + Common::SaveFileManager *saveFileMan = g_sci->getSaveFileManager(); Common::OutSaveFile *out; out = saveFileMan->openForSaving(filename); if (!out) { warning("Error opening savegame \"%s\" for writing", filename.c_str()); } else { - if (!gamestate_save(s, out, game_description.c_str(), version.c_str())) { + if (!gamestate_save(s, out, game_description, version)) { warning("Saving the game failed"); } else { s->r_acc = TRUE_REG; // save successful @@ -705,7 +705,7 @@ reg_t kRestoreGame(EngineState *s, int argc, reg_t *argv) { s->r_acc = TRUE_REG; warning("Savegame ID %d not found", savegameId); } else { - Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager(); + Common::SaveFileManager *saveFileMan = g_sci->getSaveFileManager(); Common::String filename = g_sci->getSavegameName(savegameId); Common::SeekableReadStream *in; @@ -792,7 +792,7 @@ reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv) { unwrapFilename = false; } - return file_open(s, name.c_str(), mode, unwrapFilename); + return file_open(s, name, mode, unwrapFilename); } reg_t kFileIOClose(EngineState *s, int argc, reg_t *argv) { @@ -845,7 +845,7 @@ reg_t kFileIOWriteRaw(EngineState *s, int argc, reg_t *argv) { reg_t kFileIOUnlink(EngineState *s, int argc, reg_t *argv) { Common::String name = s->_segMan->getString(argv[0]); - Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager(); + Common::SaveFileManager *saveFileMan = g_sci->getSaveFileManager(); bool result; // SQ4 floppy prepends /\ to the filenames @@ -920,7 +920,7 @@ reg_t kFileIOSeek(EngineState *s, int argc, reg_t *argv) { } void DirSeeker::addAsVirtualFiles(Common::String title, Common::String fileMask) { - Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager(); + Common::SaveFileManager *saveFileMan = g_sci->getSaveFileManager(); Common::StringArray foundFiles = saveFileMan->listSavefiles(fileMask); if (!foundFiles.empty()) { _files.push_back(title); @@ -984,7 +984,7 @@ reg_t DirSeeker::firstFile(const Common::String &mask, reg_t buffer, SegManager const Common::String wrappedMask = g_sci->wrapFilename(mask); // Obtain a list of all files matching the given mask - Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager(); + Common::SaveFileManager *saveFileMan = g_sci->getSaveFileManager(); _files = saveFileMan->listSavefiles(wrappedMask); } @@ -1043,7 +1043,7 @@ reg_t kFileIOExists(EngineState *s, int argc, reg_t *argv) { exists = Common::File::exists(name); // Check for a savegame with the name - Common::SaveFileManager *saveFileMan = g_engine->getSaveFileManager(); + Common::SaveFileManager *saveFileMan = g_sci->getSaveFileManager(); if (!exists) exists = !saveFileMan->listSavefiles(name).empty(); @@ -1083,7 +1083,7 @@ reg_t kFileIORename(EngineState *s, int argc, reg_t *argv) { // SCI1.1 returns 0 on success and a DOS error code on fail. SCI32 // returns -1 on fail. We just return -1 for all versions. - if (g_engine->getSaveFileManager()->renameSavefile(oldName, newName)) + if (g_sci->getSaveFileManager()->renameSavefile(oldName, newName)) return NULL_REG; else return SIGNAL_REG; diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index 75f8c25ed2..6c96266922 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -360,10 +360,29 @@ reg_t kTextSize(EngineState *s, int argc, reg_t *argv) { } else #endif g_sci->_gfxText16->kernelTextSize(g_sci->strSplit(text.c_str(), sep).c_str(), font_nr, maxwidth, &textWidth, &textHeight); - + + // One of the game texts in LB2 German contains loads of spaces in + // its end. We trim the text here, otherwise the graphics code will + // attempt to draw a very large window (larger than the screen) to + // show the text, and crash. + // Fixes bug #3306417. + if (textWidth >= g_sci->_gfxScreen->getDisplayWidth() || + textHeight >= g_sci->_gfxScreen->getDisplayHeight()) { + // TODO: Is this needed for SCI32 as well? + if (g_sci->_gfxText16) { + warning("kTextSize: string would be too big to fit on screen. Trimming it"); + text.trim(); + // Copy over the trimmed string... + s->_segMan->strcpy(argv[1], text.c_str()); + // ...and recalculate bounding box dimensions + g_sci->_gfxText16->kernelTextSize(g_sci->strSplit(text.c_str(), sep).c_str(), font_nr, maxwidth, &textWidth, &textHeight); + } + } + debugC(kDebugLevelStrings, "GetTextSize '%s' -> %dx%d", text.c_str(), textWidth, textHeight); dest[2] = make_reg(0, textHeight); dest[3] = make_reg(0, textWidth); + return s->r_acc; } diff --git a/engines/sci/engine/kpathing.cpp b/engines/sci/engine/kpathing.cpp index 0a4e2380a8..8904a48978 100644 --- a/engines/sci/engine/kpathing.cpp +++ b/engines/sci/engine/kpathing.cpp @@ -34,6 +34,8 @@ namespace Sci { +// TODO: Code cleanup + #define AVOIDPATH_DYNMEM_STRING "AvoidPath polyline" #define POLY_LAST_POINT 0x7777 @@ -1174,7 +1176,6 @@ static void change_polygons_opt_0(PathfindingState *s) { static PathfindingState *convert_polygon_set(EngineState *s, reg_t poly_list, Common::Point start, Common::Point end, int width, int height, int opt) { SegManager *segMan = s->_segMan; Polygon *polygon; - int err; int count = 0; PathfindingState *pf_s = new PathfindingState(width, height); @@ -1197,50 +1198,53 @@ static PathfindingState *convert_polygon_set(EngineState *s, reg_t poly_list, Co } } - if (opt == 0) { - Common::Point intersection; - - // Keyboard support - // FIXME: We don't need to dijkstra for keyboard support as we currently do + if (opt == 0) change_polygons_opt_0(pf_s); - // Find nearest intersection - err = nearest_intersection(pf_s, start, end, &intersection); - - if (err == PF_FATAL) { - warning("AvoidPath: fatal error finding nearest intersection"); - delete pf_s; - return NULL; - } - - if (err == PF_OK) { - // Intersection was found, prepend original start position after pathfinding - pf_s->_prependPoint = new Common::Point(start); - // Merge new start point into polygon set - pf_s->vertex_start = merge_point(pf_s, intersection); - } else { - // Otherwise we proceed with the original start point - pf_s->vertex_start = merge_point(pf_s, start); - } - // Merge end point into polygon set - pf_s->vertex_end = merge_point(pf_s, end); - } else { - Common::Point *new_start = fixup_start_point(pf_s, start); + Common::Point *new_start = fixup_start_point(pf_s, start); + + if (!new_start) { + warning("AvoidPath: Couldn't fixup start position for pathfinding"); + delete pf_s; + return NULL; + } - if (!new_start) { - warning("AvoidPath: Couldn't fixup start position for pathfinding"); - delete pf_s; - return NULL; - } + Common::Point *new_end = fixup_end_point(pf_s, end); + + if (!new_end) { + warning("AvoidPath: Couldn't fixup end position for pathfinding"); + delete new_start; + delete pf_s; + return NULL; + } - Common::Point *new_end = fixup_end_point(pf_s, end); + if (opt == 0) { + // Keyboard support. Only the first edge of the path we compute + // here matches the path returned by SSCI. This is assumed to be + // sufficient as all known use cases only use the first two + // vertices of the returned path. + // Pharkas uses this mode for a secondary polygon set containing + // rectangular polygons used to block an actor's path. + + // If we have a prepended point, we do nothing here as the + // actor is in barred territory and should be moved outside of + // it ASAP. This matches the behavior of SSCI. + if (!pf_s->_prependPoint) { + // Actor position is OK, find nearest obstacle. + int err = nearest_intersection(pf_s, start, *new_end, new_start); + + if (err == PF_FATAL) { + warning("AvoidPath: error finding nearest intersection"); + delete new_start; + delete new_end; + delete pf_s; + return NULL; + } - if (!new_end) { - warning("AvoidPath: Couldn't fixup end position for pathfinding"); - delete pf_s; - return NULL; + if (err == PF_OK) + pf_s->_prependPoint = new Common::Point(start); } - + } else { // WORKAROUND LSL5 room 660. Priority glitch due to us choosing a different path // than SSCI. Happens when Patti walks to the control room. if (g_sci->getGameId() == GID_LSL5 && (s->currentRoomNumber() == 660) && (Common::Point(67, 131) == *new_start) && (Common::Point(229, 101) == *new_end)) { @@ -1248,14 +1252,14 @@ static PathfindingState *convert_polygon_set(EngineState *s, reg_t poly_list, Co pf_s->_prependPoint = new_start; new_start = new Common::Point(77, 107); } + } - // Merge start and end points into polygon set - pf_s->vertex_start = merge_point(pf_s, *new_start); - pf_s->vertex_end = merge_point(pf_s, *new_end); + // Merge start and end points into polygon set + pf_s->vertex_start = merge_point(pf_s, *new_start); + pf_s->vertex_end = merge_point(pf_s, *new_end); - delete new_start; - delete new_end; - } + delete new_start; + delete new_end; // Allocate and build vertex index pf_s->vertex_index = (Vertex**)malloc(sizeof(Vertex *) * (count + 2)); diff --git a/engines/sci/engine/kscripts.cpp b/engines/sci/engine/kscripts.cpp index b48de1c7ea..d83254b2c4 100644 --- a/engines/sci/engine/kscripts.cpp +++ b/engines/sci/engine/kscripts.cpp @@ -46,7 +46,7 @@ reg_t kLoad(EngineState *s, int argc, reg_t *argv) { } // Unloads an arbitrary resource of type 'restype' with resource numbber 'resnr' -// behaviour of this call didn't change between sci0->sci1.1 parameter wise, which means getting called with +// behavior of this call didn't change between sci0->sci1.1 parameter wise, which means getting called with // 1 or 3+ parameters is not right according to sierra sci reg_t kUnLoad(EngineState *s, int argc, reg_t *argv) { if (argc >= 2) { @@ -192,7 +192,7 @@ reg_t kDisposeClone(EngineState *s, int argc, reg_t *argv) { } // SCI uses this technique to find out, if it's a clone and if it's supposed to get freed - // At least kq4early relies on this behaviour. The scripts clone "Sound", then set bit 1 manually + // At least kq4early relies on this behavior. The scripts clone "Sound", then set bit 1 manually // and call kDisposeClone later. In that case we may not free it, otherwise we will run into issues // later, because kIsObject would then return false and Sound object wouldn't get checked. uint16 infoSelector = object->getInfoSelector().offset; diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp index c3f2b4dee2..c3c10bd2a2 100644 --- a/engines/sci/engine/kstring.cpp +++ b/engines/sci/engine/kstring.cpp @@ -66,8 +66,9 @@ reg_t kStrCpy(EngineState *s, int argc, reg_t *argv) { s->_segMan->strncpy(argv[0], argv[1], length); else s->_segMan->memcpy(argv[0], argv[1], -length); - } else + } else { s->_segMan->strcpy(argv[0], argv[1]); + } return argv[0]; } diff --git a/engines/sci/engine/object.cpp b/engines/sci/engine/object.cpp index aee93ffaa7..f09f18298a 100644 --- a/engines/sci/engine/object.cpp +++ b/engines/sci/engine/object.cpp @@ -58,14 +58,14 @@ void Object::init(byte *buf, reg_t obj_pos, bool initVariables) { if (getSciVersion() <= SCI_VERSION_1_LATE) { _variables.resize(READ_LE_UINT16(data + kOffsetSelectorCounter)); - _baseVars = (uint16 *)(_baseObj + _variables.size() * 2); + _baseVars = (const uint16 *)(_baseObj + _variables.size() * 2); _methodCount = READ_LE_UINT16(data + READ_LE_UINT16(data + kOffsetFunctionArea) - 2); for (int i = 0; i < _methodCount * 2 + 2; ++i) { _baseMethod.push_back(READ_SCI11ENDIAN_UINT16(data + READ_LE_UINT16(data + kOffsetFunctionArea) + i * 2)); } } else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) { _variables.resize(READ_SCI11ENDIAN_UINT16(data + 2)); - _baseVars = (uint16 *)(buf + READ_SCI11ENDIAN_UINT16(data + 4)); + _baseVars = (const uint16 *)(buf + READ_SCI11ENDIAN_UINT16(data + 4)); _methodCount = READ_SCI11ENDIAN_UINT16(buf + READ_SCI11ENDIAN_UINT16(data + 6)); for (int i = 0; i < _methodCount * 2 + 3; ++i) { _baseMethod.push_back(READ_SCI11ENDIAN_UINT16(buf + READ_SCI11ENDIAN_UINT16(data + 6) + i * 2)); diff --git a/engines/sci/engine/object.h b/engines/sci/engine/object.h index 7e07fb2f6d..80c8e9e83d 100644 --- a/engines/sci/engine/object.h +++ b/engines/sci/engine/object.h @@ -236,7 +236,7 @@ private: void initSelectorsSci3(const byte *buf); const byte *_baseObj; /**< base + object offset within base */ - uint16 *_baseVars; /**< Pointer to the varselector area for this object */ + const uint16 *_baseVars; /**< Pointer to the varselector area for this object */ Common::Array<uint16> _baseMethod; /**< Pointer to the method selector area for this object */ uint16 *_propertyOffsetsSci3; /**< This is used to enable relocation of property valuesa in SCI3 */ diff --git a/engines/sci/engine/savegame.cpp b/engines/sci/engine/savegame.cpp index 65b5e602ff..e43c7097ed 100644 --- a/engines/sci/engine/savegame.cpp +++ b/engines/sci/engine/savegame.cpp @@ -805,7 +805,7 @@ void SegManager::reconstructClones() { #pragma mark - -bool gamestate_save(EngineState *s, Common::WriteStream *fh, const char* savename, const char *version) { +bool gamestate_save(EngineState *s, Common::WriteStream *fh, const Common::String &savename, const Common::String &version) { TimeDate curTime; g_system->getTimeAndDate(curTime); diff --git a/engines/sci/engine/savegame.h b/engines/sci/engine/savegame.h index ff5bc5204b..fbd77eb076 100644 --- a/engines/sci/engine/savegame.h +++ b/engines/sci/engine/savegame.h @@ -79,7 +79,7 @@ struct SavegameMetadata { * @param savename The description of the savegame * @return 0 on success, 1 otherwise */ -bool gamestate_save(EngineState *s, Common::WriteStream *save, const char *savename, const char *version); +bool gamestate_save(EngineState *s, Common::WriteStream *save, const Common::String &savename, const Common::String &version); /** * Restores a game state from a directory. diff --git a/engines/sci/engine/script.cpp b/engines/sci/engine/script.cpp index eae2dd674c..a38aa06bc4 100644 --- a/engines/sci/engine/script.cpp +++ b/engines/sci/engine/script.cpp @@ -492,7 +492,7 @@ SegmentRef Script::dereference(reg_t pointer) { return ret; } -void Script::initialiseLocals(SegManager *segMan) { +void Script::initializeLocals(SegManager *segMan) { LocalVariables *locals = segMan->allocLocalsSegment(this); if (locals) { if (getSciVersion() > SCI_VERSION_0_EARLY) { @@ -508,7 +508,7 @@ void Script::initialiseLocals(SegManager *segMan) { } } -void Script::initialiseClasses(SegManager *segMan) { +void Script::initializeClasses(SegManager *segMan) { const byte *seeker = 0; uint16 mult = 0; @@ -580,7 +580,7 @@ void Script::initialiseClasses(SegManager *segMan) { } } -void Script::initialiseObjectsSci0(SegManager *segMan, SegmentId segmentId) { +void Script::initializeObjectsSci0(SegManager *segMan, SegmentId segmentId) { bool oldScriptHeader = (getSciVersion() == SCI_VERSION_0_EARLY); // We need to make two passes, as the objects in the script might be in the @@ -632,7 +632,7 @@ void Script::initialiseObjectsSci0(SegManager *segMan, SegmentId segmentId) { relocateSci0Sci21(make_reg(segmentId, relocationBlock - getBuf() + 4)); } -void Script::initialiseObjectsSci11(SegManager *segMan, SegmentId segmentId) { +void Script::initializeObjectsSci11(SegManager *segMan, SegmentId segmentId) { const byte *seeker = _heapStart + 4 + READ_SCI11ENDIAN_UINT16(_heapStart + 2) * 2; while (READ_SCI11ENDIAN_UINT16(seeker) == SCRIPT_OBJECT_MAGIC_NUMBER) { @@ -667,7 +667,7 @@ void Script::initialiseObjectsSci11(SegManager *segMan, SegmentId segmentId) { relocateSci0Sci21(make_reg(segmentId, READ_SCI11ENDIAN_UINT16(_heapStart))); } -void Script::initialiseObjectsSci3(SegManager *segMan, SegmentId segmentId) { +void Script::initializeObjectsSci3(SegManager *segMan, SegmentId segmentId) { const byte *seeker = getSci3ObjectsPointer(); while (READ_SCI11ENDIAN_UINT16(seeker) == SCRIPT_OBJECT_MAGIC_NUMBER) { @@ -681,13 +681,13 @@ void Script::initialiseObjectsSci3(SegManager *segMan, SegmentId segmentId) { relocateSci3(make_reg(segmentId, 0)); } -void Script::initialiseObjects(SegManager *segMan, SegmentId segmentId) { +void Script::initializeObjects(SegManager *segMan, SegmentId segmentId) { if (getSciVersion() <= SCI_VERSION_1_LATE) - initialiseObjectsSci0(segMan, segmentId); + initializeObjectsSci0(segMan, segmentId); else if (getSciVersion() >= SCI_VERSION_1_1 && getSciVersion() <= SCI_VERSION_2_1) - initialiseObjectsSci11(segMan, segmentId); + initializeObjectsSci11(segMan, segmentId); else if (getSciVersion() == SCI_VERSION_3) - initialiseObjectsSci3(segMan, segmentId); + initializeObjectsSci3(segMan, segmentId); } reg_t Script::findCanonicAddress(SegManager *segMan, reg_t addr) const { diff --git a/engines/sci/engine/script.h b/engines/sci/engine/script.h index 13744b6f93..ff061e0e36 100644 --- a/engines/sci/engine/script.h +++ b/engines/sci/engine/script.h @@ -137,20 +137,20 @@ public: * Initializes the script's local variables * @param segMan A reference to the segment manager */ - void initialiseLocals(SegManager *segMan); + void initializeLocals(SegManager *segMan); /** * Adds the script's classes to the segment manager's class table * @param segMan A reference to the segment manager */ - void initialiseClasses(SegManager *segMan); + void initializeClasses(SegManager *segMan); /** * Initializes the script's objects (SCI0) * @param segMan A reference to the segment manager * @param segmentId The script's segment id */ - void initialiseObjects(SegManager *segMan, SegmentId segmentId); + void initializeObjects(SegManager *segMan, SegmentId segmentId); // script lock operations @@ -280,21 +280,21 @@ private: * @param segMan A reference to the segment manager * @param segmentId The script's segment id */ - void initialiseObjectsSci0(SegManager *segMan, SegmentId segmentId); + void initializeObjectsSci0(SegManager *segMan, SegmentId segmentId); /** * Initializes the script's objects (SCI1.1 - SCI2.1) * @param segMan A reference to the segment manager * @param segmentId The script's segment id */ - void initialiseObjectsSci11(SegManager *segMan, SegmentId segmentId); + void initializeObjectsSci11(SegManager *segMan, SegmentId segmentId); /** * Initializes the script's objects (SCI3) * @param segMan A reference to the segment manager * @param segmentId The script's segment id */ - void initialiseObjectsSci3(SegManager *segMan, SegmentId segmentId); + void initializeObjectsSci3(SegManager *segMan, SegmentId segmentId); }; } // End of namespace Sci diff --git a/engines/sci/engine/scriptdebug.cpp b/engines/sci/engine/scriptdebug.cpp index 16098ab275..957930784b 100644 --- a/engines/sci/engine/scriptdebug.cpp +++ b/engines/sci/engine/scriptdebug.cpp @@ -174,13 +174,15 @@ reg_t disassemble(EngineState *s, reg_t pos, bool printBWTag, bool printBytecode break; case Script_SRelative: - if (opsize) - param_value = scr[retval.offset++]; + if (opsize) { + int8 offset = (int8)scr[retval.offset++]; + debugN(" %02x [%04x]", 0xff & offset, 0xffff & (retval.offset + offset)); + } else { - param_value = READ_SCI11ENDIAN_UINT16(&scr[retval.offset]); + int16 offset = (int16)READ_SCI11ENDIAN_UINT16(&scr[retval.offset]); retval.offset += 2; + debugN(" %04x [%04x]", 0xffff & offset, 0xffff & (retval.offset + offset)); } - debugN(opsize ? " %02x [%04x]" : " %04x [%04x]", param_value, (0xffff) & (retval.offset + param_value)); break; case Script_End: diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp index b28e8cd450..ab67da32db 100644 --- a/engines/sci/engine/seg_manager.cpp +++ b/engines/sci/engine/seg_manager.cpp @@ -1007,9 +1007,9 @@ int SegManager::instantiateScript(int scriptNum) { scr->init(scriptNum, _resMan); scr->load(_resMan); - scr->initialiseLocals(this); - scr->initialiseClasses(this); - scr->initialiseObjects(this, segmentId); + scr->initializeLocals(this); + scr->initializeClasses(this); + scr->initializeObjects(this, segmentId); return segmentId; } @@ -1020,7 +1020,7 @@ void SegManager::uninstantiateScript(int script_nr) { if (!scr || scr->isMarkedAsDeleted()) { // Is it already unloaded? //warning("unloading script 0x%x requested although not loaded", script_nr); - // This is perfectly valid SCI behaviour + // This is perfectly valid SCI behavior return; } diff --git a/engines/sci/engine/seg_manager.h b/engines/sci/engine/seg_manager.h index a579ba10e1..ab5aeacabf 100644 --- a/engines/sci/engine/seg_manager.h +++ b/engines/sci/engine/seg_manager.h @@ -71,7 +71,7 @@ public: */ Script *allocateScript(int script_nr, SegmentId *seg_id); - // The script must then be initialised; see section (1b.), below. + // The script must then be initialized; see section (1b.), below. /** * Forcefully deallocate a previously allocated script. diff --git a/engines/sci/engine/segment.h b/engines/sci/engine/segment.h index f5c5e2289d..009a2558ce 100644 --- a/engines/sci/engine/segment.h +++ b/engines/sci/engine/segment.h @@ -131,7 +131,7 @@ public: /** * Iterates over all references reachable from the specified object. * Used by the garbage collector. - * @param object object (within the current segment) to analyse + * @param object object (within the current segment) to analyze * @return a list of outgoing references within the object * * @note This function may also choose to report numbers (segment 0) as adresses diff --git a/engines/sci/engine/selector.h b/engines/sci/engine/selector.h index dae1ea9266..f13c13e00c 100644 --- a/engines/sci/engine/selector.h +++ b/engines/sci/engine/selector.h @@ -44,7 +44,7 @@ struct SelectorCache { Selector underBits; ///< Used by the graphics subroutines to store backupped BG pic data Selector nsTop, nsLeft, nsBottom, nsRight; ///< View boundaries ('now seen') Selector lsTop, lsLeft, lsBottom, lsRight; ///< Used by Animate() subfunctions and scroll list controls - Selector signal; ///< Used by Animate() to control a view's behaviour + Selector signal; ///< Used by Animate() to control a view's behavior Selector illegalBits; ///< Used by CanBeHere Selector brTop, brLeft, brBottom, brRight; ///< Bounding Rectangle // name, key, time diff --git a/engines/sci/engine/state.cpp b/engines/sci/engine/state.cpp index e094ed3bd7..3328f80de1 100644 --- a/engines/sci/engine/state.cpp +++ b/engines/sci/engine/state.cpp @@ -192,10 +192,10 @@ static kLanguage charToLanguage(const char c) { } } -Common::String SciEngine::getSciLanguageString(const char *str, kLanguage lang, kLanguage *lang2) const { +Common::String SciEngine::getSciLanguageString(const Common::String &str, kLanguage lang, kLanguage *lang2) const { kLanguage secondLang = K_LANG_NONE; - const char *seeker = str; + const char *seeker = str.c_str(); while (*seeker) { if ((*seeker == '%') || (*seeker == '#')) { secondLang = charToLanguage(*(seeker + 1)); @@ -242,9 +242,9 @@ Common::String SciEngine::getSciLanguageString(const char *str, kLanguage lang, } if (seeker) - return Common::String(str, seeker - str); + return Common::String(str.c_str(), seeker - str.c_str()); else - return Common::String(str); + return str; } kLanguage SciEngine::getSciLanguage() { diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp index 499574957e..1517355365 100644 --- a/engines/sci/engine/vm.cpp +++ b/engines/sci/engine/vm.cpp @@ -130,16 +130,16 @@ static reg_t read_var(EngineState *s, int type, int index) { if (solution.type == WORKAROUND_NONE) { #ifdef RELEASE_BUILD // If we are running an official ScummVM release -> fake 0 in unknown cases - warning("Uninitialized read for temp %d from method %s::%s (script %d, room %d, localCall %x)", - index, originReply.objectName.c_str(), originReply.methodName.c_str(), originReply.scriptNr, - g_sci->getEngineState()->currentRoomNumber(), originReply.localCallOffset); + warning("Uninitialized read for temp %d from method %s::%s (room %d, script %d, localCall %x)", + index, originReply.objectName.c_str(), originReply.methodName.c_str(), s->currentRoomNumber(), + originReply.scriptNr, originReply.localCallOffset); s->variables[type][index] = NULL_REG; break; #else - error("Uninitialized read for temp %d from method %s::%s (script %d, room %d, localCall %x)", - index, originReply.objectName.c_str(), originReply.methodName.c_str(), originReply.scriptNr, - g_sci->getEngineState()->currentRoomNumber(), originReply.localCallOffset); + error("Uninitialized read for temp %d from method %s::%s (room %d, script %d, localCall %x)", + index, originReply.objectName.c_str(), originReply.methodName.c_str(), s->currentRoomNumber(), + originReply.scriptNr, originReply.localCallOffset); #endif } assert(solution.type == WORKAROUND_FAKE); @@ -366,9 +366,9 @@ static void callKernelFunc(EngineState *s, int kernelCallNr, int argc) { switch (solution.type) { case WORKAROUND_NONE: kernel->signatureDebug(kernelCall.signature, argc, argv); - error("[VM] k%s[%x]: signature mismatch via method %s::%s (script %d, room %d, localCall 0x%x)", + error("[VM] k%s[%x]: signature mismatch via method %s::%s (room %d, script %d, localCall 0x%x)", kernelCall.name, kernelCallNr, originReply.objectName.c_str(), originReply.methodName.c_str(), - originReply.scriptNr, s->currentRoomNumber(), originReply.localCallOffset); + s->currentRoomNumber(), originReply.scriptNr, originReply.localCallOffset); break; case WORKAROUND_IGNORE: // don't do kernel call, leave acc alone return; @@ -418,13 +418,13 @@ static void callKernelFunc(EngineState *s, int kernelCallNr, int argc) { int callNameLen = strlen(kernelCall.name); if (strncmp(kernelCall.name, kernelSubCall.name, callNameLen) == 0) { const char *subCallName = kernelSubCall.name + callNameLen; - error("[VM] k%s(%s): signature mismatch via method %s::%s (script %d, room %d, localCall %x)", + error("[VM] k%s(%s): signature mismatch via method %s::%s (room %d, script %d, localCall %x)", kernelCall.name, subCallName, originReply.objectName.c_str(), originReply.methodName.c_str(), - originReply.scriptNr, s->currentRoomNumber(), originReply.localCallOffset); + s->currentRoomNumber(), originReply.scriptNr, originReply.localCallOffset); } - error("[VM] k%s: signature mismatch via method %s::%s (script %d, room %d, localCall %x)", + error("[VM] k%s: signature mismatch via method %s::%s (room %d, script %d, localCall %x)", kernelSubCall.name, originReply.objectName.c_str(), originReply.methodName.c_str(), - originReply.scriptNr, s->currentRoomNumber(), originReply.localCallOffset); + s->currentRoomNumber(), originReply.scriptNr, originReply.localCallOffset); break; } case WORKAROUND_IGNORE: // don't do kernel call, leave acc alone diff --git a/engines/sci/engine/vm_types.cpp b/engines/sci/engine/vm_types.cpp index 71a28a9761..e39c7708ad 100644 --- a/engines/sci/engine/vm_types.cpp +++ b/engines/sci/engine/vm_types.cpp @@ -32,9 +32,9 @@ reg_t reg_t::lookForWorkaround(const reg_t right) const { SciTrackOriginReply originReply; SciWorkaroundSolution solution = trackOriginAndFindWorkaround(0, arithmeticWorkarounds, &originReply); if (solution.type == WORKAROUND_NONE) - error("Invalid arithmetic operation (params: %04x:%04x and %04x:%04x) from method %s::%s (script %d, room %d, localCall %x)", + error("Invalid arithmetic operation (params: %04x:%04x and %04x:%04x) from method %s::%s (room %d, script %d, localCall %x)", PRINT_REG(*this), PRINT_REG(right), originReply.objectName.c_str(), - originReply.methodName.c_str(), originReply.scriptNr, g_sci->getEngineState()->currentRoomNumber(), + originReply.methodName.c_str(), g_sci->getEngineState()->currentRoomNumber(), originReply.scriptNr, originReply.localCallOffset); assert(solution.type == WORKAROUND_FAKE); return make_reg(0, solution.value); diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp index aba2e66eff..464b4d8d5b 100644 --- a/engines/sci/engine/workarounds.cpp +++ b/engines/sci/engine/workarounds.cpp @@ -34,6 +34,7 @@ namespace Sci { const SciWorkaroundEntry arithmeticWorkarounds[] = { { GID_CAMELOT, 92, 92, 0, "endingCartoon2", "changeState", 0x20d, 0, { WORKAROUND_FAKE, 0 } }, // op_lai: during the ending, sub gets called with no parameters, uses parameter 1 which is theGrail in this case - bug #3044734 { GID_ECOQUEST2, 100, 0, 0, "Rain", "points", 0xcc6, 0, { WORKAROUND_FAKE, 0 } }, // op_or: when giving the papers to the customs officer, gets called against a pointer instead of a number - bug #3034464 + { GID_ECOQUEST2, 100, 0, 0, "Rain", "points", 0xce0, 0, { WORKAROUND_FAKE, 0 } }, // Same as above, for the Spanish version - bug #3313962 { GID_FANMADE, 516, 983, 0, "Wander", "setTarget", -1, 0, { WORKAROUND_FAKE, 0 } }, // op_mul: The Legend of the Lost Jewel Demo (fan made): called with object as second parameter when attacked by insects - bug #3038913 { GID_ICEMAN, 199, 977, 0, "Grooper", "doit", -1, 0, { WORKAROUND_FAKE, 0 } }, // op_add: While dancing with the girl { GID_MOTHERGOOSE256, -1, 999, 0, "Event", "new", -1, 0, { WORKAROUND_FAKE, 0 } }, // op_and: constantly during the game (SCI1 version) @@ -213,6 +214,7 @@ const SciWorkaroundEntry kDisplay_workarounds[] = { { GID_QFG3, -1, 47, 0, "barterWin", "open", 0x1426, 0, { WORKAROUND_IGNORE, 0 } }, // sometimes when talking with a vendor that can be bartered with, the wrong local variable is checked and the variable contents are wrong - bug #3292251 { GID_QFG3, -1, 47, 0, "barterIcon", "show", 0x135c, 0, { WORKAROUND_IGNORE, 0 } }, // sometimes when talking with a vendor that can be bartered with, the wrong local variable is checked and the variable contents are wrong - bug #3292251 { GID_SQ1, -1, 700, 0, "arcadaRegion", "doit", -1, 0, { WORKAROUND_IGNORE, 0 } }, // restoring in some rooms of the arcada (right at the start) + { GID_SQ1, 44, 44, 0, "spinDone", "changeState",0x13b0, 0, { WORKAROUND_IGNORE, 0 } }, // restoring a game at the slot machine in Ulence Flats (bug #3308087) { GID_SQ4, 397, 0, 0, "", "export 12", -1, 0, { WORKAROUND_IGNORE, 0 } }, // FLOPPY: when going into the computer store (bug #3044044) { GID_SQ4, 391, 391, 0, "doCatalog", "mode", 0x84, 0, { WORKAROUND_IGNORE, 0 } }, // CD: clicking on catalog in roboter sale - a parameter is an object { GID_SQ4, 391, 391, 0, "choosePlug", "changeState", -1, 0, { WORKAROUND_IGNORE, 0 } }, // CD: ordering connector in roboter sale - a parameter is an object @@ -446,7 +448,7 @@ SciWorkaroundSolution trackOriginAndFindWorkaround(int index, const SciWorkaroun workaround = workaroundList; while (workaround->methodName) { bool objectNameMatches = (workaround->objectName == NULL) || - (workaround->objectName == g_sci->getSciLanguageString(searchObjectName.c_str(), K_LANG_ENGLISH)); + (workaround->objectName == g_sci->getSciLanguageString(searchObjectName, K_LANG_ENGLISH)); // Special case: in the fanmade Russian translation of SQ4, all // of the object names have been deleted or renamed to Russian, @@ -459,7 +461,7 @@ SciWorkaroundSolution trackOriginAndFindWorkaround(int index, const SciWorkaroun && ((workaround->roomNr == -1) || (workaround->roomNr == curRoomNumber)) && ((workaround->inheritanceLevel == -1) || (workaround->inheritanceLevel == inheritanceLevel)) && objectNameMatches - && workaround->methodName == g_sci->getSciLanguageString(curMethodName.c_str(), K_LANG_ENGLISH) + && workaround->methodName == g_sci->getSciLanguageString(curMethodName, K_LANG_ENGLISH) && workaround->localCallOffset == lastCall->debugLocalCallOffset && ((workaround->index == -1) || (workaround->index == index))) { // Workaround found diff --git a/engines/sci/graphics/animate.cpp b/engines/sci/graphics/animate.cpp index f72f9a78cc..c36ecd112a 100644 --- a/engines/sci/graphics/animate.cpp +++ b/engines/sci/graphics/animate.cpp @@ -230,7 +230,7 @@ void GfxAnimate::adjustInvalidCels(GfxView *view, AnimateList::iterator it) { // this seems to be completely crazy code // sierra sci checked signed int16 to be above or equal the counts and reseted to 0 in those cases // later during view processing those are compared unsigned again and then set to maximum count - 1 - // Games rely on this behaviour. For example laura bow 1 has a knight standing around in room 37 + // Games rely on this behavior. For example laura bow 1 has a knight standing around in room 37 // which has cel set to 3. This cel does not exist and the actual knight is 0 // In kq5 on the other hand during the intro, when the trunk is opened, cel is set to some real // high number, which is negative when considered signed. This actually requires to get fixed to diff --git a/engines/sci/graphics/compare.cpp b/engines/sci/graphics/compare.cpp index 1dbe279f8a..3183ffa2b9 100644 --- a/engines/sci/graphics/compare.cpp +++ b/engines/sci/graphics/compare.cpp @@ -84,7 +84,14 @@ reg_t GfxCompare::canBeHereCheckRectList(reg_t checkObject, const Common::Rect & curRect.right = readSelectorValue(_segMan, curObject, SELECTOR(brRight)); curRect.bottom = readSelectorValue(_segMan, curObject, SELECTOR(brBottom)); // Check if curRect is within checkRect - if (checkRect.contains(curRect)) + // This behavior is slightly odd, but it's how the original SCI + // engine did it: a rect cannot be contained within itself + // (there is no equality). Do NOT change this to contains(), as + // it breaks KQ4 early (bug #3315639). + if (curRect.right > checkRect.left && + curRect.left < checkRect.right && + curRect.bottom > checkRect.top && + curRect.top < checkRect.bottom) return curObject; } } diff --git a/engines/sci/graphics/controls.cpp b/engines/sci/graphics/controls.cpp index 0289735c0a..8d4712a969 100644 --- a/engines/sci/graphics/controls.cpp +++ b/engines/sci/graphics/controls.cpp @@ -329,7 +329,6 @@ void GfxControls::kernelDrawText(Common::Rect rect, reg_t obj, const char *text, if (style & SCI_CONTROLS_STYLE_SELECTED) { _paint16->frameRect(rect); } - rect.grow(1); if (!getPicNotValid()) _paint16->bitsShow(rect); } else { diff --git a/engines/sci/graphics/cursor.cpp b/engines/sci/graphics/cursor.cpp index 6ad2cb3cb3..ec49a38814 100644 --- a/engines/sci/graphics/cursor.cpp +++ b/engines/sci/graphics/cursor.cpp @@ -252,10 +252,10 @@ void GfxCursor::setPosition(Common::Point pos) { // Some games display a new menu, set mouse position somewhere within and // expect it to be in there. This is fine for a real mouse, but on wii using // wii-mote or touch interfaces this won't work. In fact on those platforms - // the menus will close immediately because of that behaviour. + // the menus will close immediately because of that behavior. // We identify those cases and set a reaction-rect. If the mouse it outside // of that rect, we won't report the position back to the scripts. - // As soon as the mouse was inside once, we will revert to normal behaviour + // As soon as the mouse was inside once, we will revert to normal behavior // Currently this code is enabled for all platforms, especially because we can't // differentiate between e.g. Windows used via mouse and Windows used via touchscreen // The workaround won't hurt real-mouse platforms diff --git a/engines/sci/graphics/menu.cpp b/engines/sci/graphics/menu.cpp index 9d4ab3f589..913f680e99 100644 --- a/engines/sci/graphics/menu.cpp +++ b/engines/sci/graphics/menu.cpp @@ -423,7 +423,9 @@ reg_t GfxMenu::kernelSelect(reg_t eventObject, bool pauseSound) { default: while (itemIterator != itemEnd) { itemEntry = *itemIterator; - if ((itemEntry->keyPress == keyPress) && (itemEntry->keyModifier == keyModifier)) + if (itemEntry->keyPress == keyPress && + itemEntry->keyModifier == keyModifier && + itemEntry->enabled) break; itemIterator++; } diff --git a/engines/sci/graphics/picture.cpp b/engines/sci/graphics/picture.cpp index 6529a6ae64..ce69ba8922 100644 --- a/engines/sci/graphics/picture.cpp +++ b/engines/sci/graphics/picture.cpp @@ -330,7 +330,7 @@ void GfxPicture::drawCelData(byte *inbuffer, int size, int headerPos, int rlePos if (!_addToFlag && _resourceType != SCI_PICTURE_TYPE_SCI32) clearColor = _screen->getColorWhite(); - byte drawMask = priority == 255 ? GFX_SCREEN_MASK_VISUAL : GFX_SCREEN_MASK_VISUAL | GFX_SCREEN_MASK_PRIORITY; + byte drawMask = priority > 15 ? GFX_SCREEN_MASK_VISUAL : GFX_SCREEN_MASK_VISUAL | GFX_SCREEN_MASK_PRIORITY; ptr = celBitmap; ptr += skipCelBitmapPixels; diff --git a/engines/sci/graphics/screen.cpp b/engines/sci/graphics/screen.cpp index 2446ea545e..4ab0b9719f 100644 --- a/engines/sci/graphics/screen.cpp +++ b/engines/sci/graphics/screen.cpp @@ -763,11 +763,14 @@ int16 GfxScreen::kernelPicNotValid(int16 newPicNotValid) { uint16 GfxScreen::getLowResScreenHeight() { // Some Mac SCI1/1.1 games only take up 190 rows and do not // have the menu bar. + // TODO: Verify that LSL1 and LSL5 use height 190 if (g_sci->getPlatform() == Common::kPlatformMacintosh) { switch (g_sci->getGameId()) { case GID_FREDDYPHARKAS: case GID_KQ5: case GID_KQ6: + case GID_LSL1: + case GID_LSL5: case GID_SQ1: return 190; default: diff --git a/engines/sci/graphics/text16.cpp b/engines/sci/graphics/text16.cpp index 459be7fcf7..c2f71a0e54 100644 --- a/engines/sci/graphics/text16.cpp +++ b/engines/sci/graphics/text16.cpp @@ -466,7 +466,7 @@ void GfxText16::Box(const char *text, bool show, const Common::Rect &rect, TextA if (doubleByteMode) { // Kanji is written by pc98 rom to screen directly. Because of - // GetLongest() behaviour (not cutting off the last char, that causes a + // GetLongest() behavior (not cutting off the last char, that causes a // new line), results in the script thinking that the text would need // less space. The coordinate adjustment in fontsjis.cpp handles the // incorrect centering because of that and this code actually shows all diff --git a/engines/sci/graphics/transitions.cpp b/engines/sci/graphics/transitions.cpp index 1256db8969..d047eb10a1 100644 --- a/engines/sci/graphics/transitions.cpp +++ b/engines/sci/graphics/transitions.cpp @@ -189,14 +189,6 @@ void GfxTransitions::doit(Common::Rect picRect) { // Now we do the actual transition to the new screen doTransition(_number, false); - if (picRect.bottom != _screen->getHeight()) { - // TODO: this is a workaround for lsl6 not showing menubar when playing - // There is some new code in the sierra sci in ShowPic that seems to do - // something similar to this - _screen->copyToScreen(); - g_system->updateScreen(); - } - _screen->_picNotValid = 0; } diff --git a/engines/sci/graphics/view.cpp b/engines/sci/graphics/view.cpp index 5c8e9c3d2e..afb4c184e8 100644 --- a/engines/sci/graphics/view.cpp +++ b/engines/sci/graphics/view.cpp @@ -692,7 +692,7 @@ void GfxView::draw(const Common::Rect &rect, const Common::Rect &clipRect, const const int16 celHeight = celInfo->height; const int16 celWidth = celInfo->width; const byte clearKey = celInfo->clearKey; - const byte drawMask = (priority == 255) ? GFX_SCREEN_MASK_VISUAL : GFX_SCREEN_MASK_VISUAL|GFX_SCREEN_MASK_PRIORITY; + const byte drawMask = priority > 15 ? GFX_SCREEN_MASK_VISUAL : GFX_SCREEN_MASK_VISUAL|GFX_SCREEN_MASK_PRIORITY; int x, y; if (_embeddedPal) @@ -753,7 +753,7 @@ void GfxView::drawScaled(const Common::Rect &rect, const Common::Rect &clipRect, const int16 celHeight = celInfo->height; const int16 celWidth = celInfo->width; const byte clearKey = celInfo->clearKey; - const byte drawMask = (priority == 255) ? GFX_SCREEN_MASK_VISUAL : GFX_SCREEN_MASK_VISUAL|GFX_SCREEN_MASK_PRIORITY; + const byte drawMask = priority > 15 ? GFX_SCREEN_MASK_VISUAL : GFX_SCREEN_MASK_VISUAL|GFX_SCREEN_MASK_PRIORITY; uint16 scalingX[640]; uint16 scalingY[480]; int16 scaledWidth, scaledHeight; diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index cf46d41382..cc9042ceb7 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -213,8 +213,6 @@ Common::Error SciEngine::run() { _gfxScreen = new GfxScreen(_resMan); _gfxScreen->enableUndithering(ConfMan.getBool("disable_dithering")); - // Create debugger console. It requires GFX to be initialized - _console = new Console(this); _kernel = new Kernel(_resMan, segMan); _features = new GameFeatures(segMan, _kernel); @@ -227,6 +225,9 @@ Common::Error SciEngine::run() { _gamestate = new EngineState(segMan); _eventMan = new EventManager(_resMan->detectFontExtended()); + // Create debugger console. It requires GFX and _gamestate to be initialized + _console = new Console(this); + // The game needs to be initialized before the graphics system is initialized, as // the graphics code checks parts of the seg manager upon initialization (e.g. for // the presence of the fastCast object) diff --git a/engines/sci/sci.h b/engines/sci/sci.h index a340447354..04ccbd97d2 100644 --- a/engines/sci/sci.h +++ b/engines/sci/sci.h @@ -221,7 +221,7 @@ public: virtual GUI::Debugger *getDebugger(); Console *getSciDebugger(); Common::Error loadGameState(int slot); - Common::Error saveGameState(int slot, const char *desc); + Common::Error saveGameState(int slot, const Common::String &desc); bool canLoadGameStateCurrently(); bool canSaveGameStateCurrently(); void syncSoundSettings(); @@ -290,7 +290,7 @@ public: void setSciLanguage(kLanguage lang); void setSciLanguage(); - Common::String getSciLanguageString(const char *str, kLanguage lang, kLanguage *lang2 = NULL) const; + Common::String getSciLanguageString(const Common::String &str, kLanguage lang, kLanguage *lang2 = NULL) const; // Check if vocabulary needs to get switched (in multilingual parser games) void checkVocabularySwitch(); diff --git a/engines/sci/sound/drivers/amigamac.cpp b/engines/sci/sound/drivers/amigamac.cpp index 158b4b08fb..1436ca45a7 100644 --- a/engines/sci/sound/drivers/amigamac.cpp +++ b/engines/sci/sound/drivers/amigamac.cpp @@ -24,6 +24,7 @@ #include "sci/sound/drivers/mididriver.h" #include "sci/resource.h" +#include "common/debug-channels.h" #include "common/file.h" #include "common/frac.h" #include "common/memstream.h" @@ -33,8 +34,6 @@ namespace Sci { -//#define DEBUG - class MidiDriver_AmigaMac : public MidiDriver_Emulated { public: enum { @@ -287,12 +286,10 @@ void MidiDriver_AmigaMac::playInstrument(int16 *dest, Voice *channel, int count) } void MidiDriver_AmigaMac::changeInstrument(int channel, int instrument) { -#ifdef DEBUG - if (_bank.instruments[instrument][0]) - debugN("Amiga/Mac driver: Setting channel %i to \"%s\" (%i)\n", channel, _bank.instruments[instrument].name, instrument); + if (((uint)instrument < _bank.instruments.size()) && (_bank.instruments[instrument].size() > 0)) + debugC(1, kDebugLevelSound, "Amiga/Mac driver: Setting channel %i to \"%s\" (%i)", channel, _bank.instruments[instrument].name, instrument); else - warning("Amiga/Mac driver: instrument %i does not exist (channel %i)", instrument, channel); -#endif + debugC(kDebugLevelSound, "Amiga/Mac driver: instrument %i does not exist (channel %i)", instrument, channel); _channels[channel].instrument = instrument; } @@ -325,9 +322,7 @@ void MidiDriver_AmigaMac::stopNote(int ch, int note) { break; if (channel == kChannels) { -#ifdef DEBUG - warning("Amiga/Mac driver: cannot stop note %i on channel %i", note, ch); -#endif + debugC(1, kDebugLevelSound, "Amiga/Mac driver: cannot stop note %i on channel %i", note, ch); return; } @@ -466,9 +461,9 @@ MidiDriver_AmigaMac::InstrumentSample *MidiDriver_AmigaMac::readInstrumentSCI0(C instrument->fixedNote = 101; instrument->mode = header[33]; - instrument->transpose = (int8) header[34]; + instrument->transpose = (int8)header[34]; for (int i = 0; i < 4; i++) { - int length = (int8) header[49 + i]; + int length = (int8)header[49 + i]; if (length == 0 && i > 0) length = 256; @@ -488,15 +483,18 @@ MidiDriver_AmigaMac::InstrumentSample *MidiDriver_AmigaMac::readInstrumentSCI0(C strncpy(instrument->name, (char *) header + 2, 29); instrument->name[29] = 0; -#ifdef DEBUG - debugN("Amiga/Mac driver: Reading instrument %i: \"%s\" (%i bytes)\n", - *id, instrument->name, size); - debugN(" Mode: %02x\n", instrument->mode); - debugN(" Looping: %s\n", instrument->mode & kModeLoop ? "on" : "off"); - debugN(" Pitch changes: %s\n", instrument->mode & kModePitch ? "on" : "off"); - debugN(" Segment sizes: %i %i %i\n", seg_size[0], seg_size[1], seg_size[2]); - debugN(" Segment offsets: 0 %i %i\n", loop_offset, (int32)READ_BE_UINT32(header + 43)); -#endif + if (DebugMan.isDebugChannelEnabled(kDebugLevelSound)) { + debug("Amiga/Mac driver: Reading instrument %i: \"%s\" (%i bytes)", + *id, instrument->name, size); + debugN(" Mode: %02x (", header[33]); + debugN("looping: %s, ", header[33] & kModeLoop ? "on" : "off"); + debug("pitch changes: %s)", header[33] & kModePitch ? "on" : "off"); + debug(" Transpose: %i", (int8)header[34]); + for (uint i = 0; i < 3; i++) + debug(" Segment %i: %i words @ offset %i", i, (int16)READ_BE_UINT16(header + 35 + 6 * i), (i == 0 ? 0 : (int32)READ_BE_UINT32(header + 31 + 6 * i))); + for (uint i = 0; i < 4; i++) + debug(" Envelope %i: period %i / delta %i / target %i", i, header[49 + i], (int8)header[53 + i], header[57 + i]); + } instrument->samples = (int8 *) malloc(size + 1); if (file.read(instrument->samples, size) < (unsigned int)size) { @@ -511,10 +509,8 @@ MidiDriver_AmigaMac::InstrumentSample *MidiDriver_AmigaMac::readInstrumentSCI0(C if (instrument->mode & kModeLoop) { if (loop_offset + seg_size[1] > size) { -#ifdef DEBUG - warning("Amiga/Mac driver: looping samples extend %i bytes past end of sample block", - loop_offset + seg_size[1] - size); -#endif + debugC(kDebugLevelSound, "Amiga/Mac driver: looping samples extend %i bytes past end of sample block", + loop_offset + seg_size[1] - size); seg_size[1] = size - loop_offset; } @@ -675,15 +671,11 @@ void MidiDriver_AmigaMac::send(uint32 b) { break; case 0x0a: // pan // TODO -#ifdef DEBUG - warning("Amiga/Mac driver: ignoring pan 0x%02x event for channel %i", op2, channel); -#endif + debugC(1, kDebugLevelSound, "Amiga/Mac driver: ignoring pan 0x%02x event for channel %i", op2, channel); break; case 0x40: // hold // TODO -#ifdef DEBUG - warning("Amiga/Mac driver: ignoring hold 0x%02x event for channel %i", op2, channel); -#endif + debugC(1, kDebugLevelSound, "Amiga/Mac driver: ignoring hold 0x%02x event for channel %i", op2, channel); break; case 0x4b: // voice mapping break; @@ -768,9 +760,7 @@ bool MidiDriver_AmigaMac::loadInstrumentsSCI0(Common::File &file) { _bank.size = READ_BE_UINT16(header + 38); strncpy(_bank.name, (char *) header + 8, 29); _bank.name[29] = 0; -#ifdef DEBUG - debugN("Amiga/Mac driver: Reading %i instruments from bank \"%s\"\n", _bank.size, _bank.name); -#endif + debugC(kDebugLevelSound, "Amiga/Mac driver: Reading %i instruments from bank \"%s\"", _bank.size, _bank.name); for (uint i = 0; i < _bank.size; i++) { int id; @@ -807,9 +797,7 @@ bool MidiDriver_AmigaMac::loadInstrumentsSCI0Mac(Common::SeekableReadStream &fil _bank.size = 128; strncpy(_bank.name, (char *) header + 8, 29); _bank.name[29] = 0; -#ifdef DEBUG - debugN("Amiga/Mac driver: Reading %i instruments from bank \"%s\"\n", _bank.size, _bank.name); -#endif + debugC(kDebugLevelSound, "Amiga/Mac driver: Reading %i instruments from bank \"%s\"", _bank.size, _bank.name); Common::Array<uint32> instrumentOffsets; instrumentOffsets.resize(_bank.size); diff --git a/engines/scumm/actor.cpp b/engines/scumm/actor.cpp index 25a26f6cf2..e4057d1f13 100644 --- a/engines/scumm/actor.cpp +++ b/engines/scumm/actor.cpp @@ -2747,7 +2747,7 @@ void Actor::saveLoadWithSerializer(Serializer *ser) { if (ser->isLoading()) { // Not all actor data is saved; so when loading, we first reset - // the actor, to ensure completely reproducible behaviour (else, + // the actor, to ensure completely reproducible behavior (else, // some not saved value in the actor class can cause odd things) initActor(-1); } diff --git a/engines/scumm/boxes.cpp b/engines/scumm/boxes.cpp index ba4dedfbd3..64d4d7422c 100644 --- a/engines/scumm/boxes.cpp +++ b/engines/scumm/boxes.cpp @@ -726,7 +726,7 @@ int ScummEngine::getNextBox(byte from, byte to) { dest = to; do { dest = itineraryMatrix[numOfBoxes * from + dest]; - } while (dest != Actor::kInvalidBox && !areBoxesNeighbours(from, dest)); + } while (dest != Actor::kInvalidBox && !areBoxesNeighbors(from, dest)); if (dest == Actor::kInvalidBox) dest = -1; @@ -962,7 +962,7 @@ void ScummEngine::calcItineraryMatrix(byte *itineraryMatrix, int num) { // Allocate the adjacent & itinerary matrices adjacentMatrix = (byte *)malloc(boxSize * boxSize); - // Initialise the adjacent matrix: each box has distance 0 to itself, + // Initialize the adjacent matrix: each box has distance 0 to itself, // and distance 1 to its direct neighbors. Initially, it has distance // 255 (= infinity) to all other boxes. for (i = 0; i < num; i++) { @@ -970,7 +970,7 @@ void ScummEngine::calcItineraryMatrix(byte *itineraryMatrix, int num) { if (i == j) { adjacentMatrix[i * boxSize + j] = 0; itineraryMatrix[i * boxSize + j] = j; - } else if (areBoxesNeighbours(i, j)) { + } else if (areBoxesNeighbors(i, j)) { adjacentMatrix[i * boxSize + j] = 1; itineraryMatrix[i * boxSize + j] = j; } else { @@ -1060,8 +1060,8 @@ void ScummEngine::createBoxMatrix() { free(itineraryMatrix); } -/** Check if two boxes are neighbours. */ -bool ScummEngine::areBoxesNeighbours(int box1nr, int box2nr) { +/** Check if two boxes are neighbors. */ +bool ScummEngine::areBoxesNeighbors(int box1nr, int box2nr) { Common::Point tmp; BoxCoords box; BoxCoords box2; @@ -1158,7 +1158,7 @@ bool ScummEngine::areBoxesNeighbours(int box1nr, int box2nr) { return false; } -bool ScummEngine_v0::areBoxesNeighbours(int box1nr, int box2nr) { +bool ScummEngine_v0::areBoxesNeighbors(int box1nr, int box2nr) { int i; const int numOfBoxes = getNumBoxes(); const byte *boxm; diff --git a/engines/scumm/charset.cpp b/engines/scumm/charset.cpp index dce6c9c144..9238b25feb 100644 --- a/engines/scumm/charset.cpp +++ b/engines/scumm/charset.cpp @@ -50,6 +50,7 @@ void ScummEngine::loadCJKFont() { if (_game.version <= 5 && _game.platform == Common::kPlatformFMTowns && _language == Common::JA_JPN) { // FM-TOWNS v3 / v5 Kanji #ifdef DISABLE_TOWNS_DUAL_LAYER_MODE + GUIErrorMessage("FM-Towns Kanji font drawing requires dual graphics layer support which is disabled in this build"); error("FM-Towns Kanji font drawing requires dual graphics layer support which is disabled in this build"); #else // use FM-TOWNS font rom, since game files don't have kanji font resources diff --git a/engines/scumm/cursor.cpp b/engines/scumm/cursor.cpp index e9b5260eca..a8adb4d5c5 100644 --- a/engines/scumm/cursor.cpp +++ b/engines/scumm/cursor.cpp @@ -551,7 +551,7 @@ void ScummEngine_v5::setBuiltinCursor(int idx) { uint16 color; const uint16 *src = _cursorImages[_currentCursor]; - if (_bytesPerPixelOutput == 2) { + if (_outputPixelFormat.bytesPerPixel == 2) { if (_game.id == GID_LOOM && _game.platform == Common::kPlatformPCEngine) { byte r, g, b; colorPCEToRGB(default_pce_cursor_colors[idx], &r, &g, &b); @@ -577,14 +577,14 @@ void ScummEngine_v5::setBuiltinCursor(int idx) { _cursor.width = 16 * _textSurfaceMultiplier; _cursor.height = 16 * _textSurfaceMultiplier; - int scl = _bytesPerPixelOutput * _textSurfaceMultiplier; + int scl = _outputPixelFormat.bytesPerPixel * _textSurfaceMultiplier; for (i = 0; i < 16; i++) { for (j = 0; j < 16; j++) { if (src[i] & (1 << j)) { byte *dst1 = _grabbedCursor + 16 * scl * i * _textSurfaceMultiplier + (15 - j) * scl; byte *dst2 = (_textSurfaceMultiplier == 2) ? dst1 + 16 * scl : dst1; - if (_bytesPerPixelOutput == 2) { + if (_outputPixelFormat.bytesPerPixel == 2) { for (int b = 0; b < scl; b += 2) { *((uint16*)dst1) = *((uint16*)dst2) = color; dst1 += 2; diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp index bba26961c7..e5c5906404 100644 --- a/engines/scumm/detection.cpp +++ b/engines/scumm/detection.cpp @@ -69,26 +69,26 @@ static const MD5Table *findInMD5Table(const char *md5) { Common::String ScummEngine::generateFilename(const int room) const { const int diskNumber = (room > 0) ? _res->_types[rtRoom][room]._roomno : 0; - char buf[128]; + Common::String result; if (_game.version == 4) { if (room == 0 || room >= 900) { - snprintf(buf, sizeof(buf), "%03d.lfl", room); + result = Common::String::format("%03d.lfl", room); } else { - snprintf(buf, sizeof(buf), "disk%02d.lec", diskNumber); + result = Common::String::format("disk%02d.lec", diskNumber); } } else { switch (_filenamePattern.genMethod) { case kGenDiskNum: - snprintf(buf, sizeof(buf), _filenamePattern.pattern, diskNumber); + result = Common::String::format(_filenamePattern.pattern, diskNumber); break; case kGenRoomNum: - snprintf(buf, sizeof(buf), _filenamePattern.pattern, room); + result = Common::String::format(_filenamePattern.pattern, room); break; case kGenUnchanged: - strncpy(buf, _filenamePattern.pattern, sizeof(buf)); + result = _filenamePattern.pattern; break; default: @@ -96,11 +96,11 @@ Common::String ScummEngine::generateFilename(const int room) const { } } - return buf; + return result; } Common::String ScummEngine_v60he::generateFilename(const int room) const { - char buf[128]; + Common::String result; char id = 0; switch (_filenamePattern.genMethod) { @@ -115,16 +115,16 @@ Common::String ScummEngine_v60he::generateFilename(const int room) const { } if (_filenamePattern.genMethod == kGenHEPC) { - snprintf(buf, sizeof(buf), "%s.he%c", _filenamePattern.pattern, id); + result = Common::String::format("%s.he%c", _filenamePattern.pattern, id); } else { if (id == '3') { // special case for cursors // For mac they're stored in game binary - strncpy(buf, _filenamePattern.pattern, sizeof(buf)); + result = _filenamePattern.pattern; } else { if (_filenamePattern.genMethod == kGenHEMac) - snprintf(buf, sizeof(buf), "%s (%c)", _filenamePattern.pattern, id); + result = Common::String::format("%s (%c)", _filenamePattern.pattern, id); else - snprintf(buf, sizeof(buf), "%s %c", _filenamePattern.pattern, id); + result = Common::String::format("%s %c", _filenamePattern.pattern, id); } } @@ -135,11 +135,11 @@ Common::String ScummEngine_v60he::generateFilename(const int room) const { return ScummEngine::generateFilename(room); } - return buf; + return result; } Common::String ScummEngine_v70he::generateFilename(const int room) const { - char buf[128]; + Common::String result; char id = 0; switch (_filenamePattern.genMethod) { @@ -156,19 +156,19 @@ Common::String ScummEngine_v70he::generateFilename(const int room) const { id = 'b'; // Special cases for Blue's games, which share common (b) files if (_game.id == GID_BIRTHDAY && !(_game.features & GF_DEMO)) - strcpy(buf, "Blue'sBirthday.(b)"); + result = "Blue'sBirthday.(b)"; else if (_game.id == GID_TREASUREHUNT) - strcpy(buf, "Blue'sTreasureHunt.(b)"); + result = "Blue'sTreasureHunt.(b)"; else - snprintf(buf, sizeof(buf), "%s.(b)", _filenamePattern.pattern); + result = Common::String::format("%s.(b)", _filenamePattern.pattern); break; case 1: id = 'a'; - snprintf(buf, sizeof(buf), "%s.(a)", _filenamePattern.pattern); + result = Common::String::format("%s.(a)", _filenamePattern.pattern); break; default: id = '0'; - snprintf(buf, sizeof(buf), "%s.he0", _filenamePattern.pattern); + result = Common::String::format("%s.he0", _filenamePattern.pattern); } } else if (room < 0) { id = '0' - room; @@ -179,16 +179,16 @@ Common::String ScummEngine_v70he::generateFilename(const int room) const { if (_filenamePattern.genMethod == kGenHEPC) { // For HE >= 98, we already called snprintf above. if (_game.heversion < 98 || room < 0) - snprintf(buf, sizeof(buf), "%s.he%c", _filenamePattern.pattern, id); + result = Common::String::format("%s.he%c", _filenamePattern.pattern, id); } else { if (id == '3') { // special case for cursors // For mac they're stored in game binary - strncpy(buf, _filenamePattern.pattern, sizeof(buf)); + result = _filenamePattern.pattern; } else { if (_filenamePattern.genMethod == kGenHEMac) - snprintf(buf, sizeof(buf), "%s (%c)", _filenamePattern.pattern, id); + result = Common::String::format("%s (%c)", _filenamePattern.pattern, id); else - snprintf(buf, sizeof(buf), "%s %c", _filenamePattern.pattern, id); + result = Common::String::format("%s %c", _filenamePattern.pattern, id); } } @@ -199,40 +199,39 @@ Common::String ScummEngine_v70he::generateFilename(const int room) const { return ScummEngine_v60he::generateFilename(room); } - return buf; + return result; } static Common::String generateFilenameForDetection(const char *pattern, FilenameGenMethod genMethod) { - char buf[128]; + Common::String result; switch (genMethod) { case kGenDiskNum: case kGenRoomNum: - snprintf(buf, sizeof(buf), pattern, 0); + result = Common::String::format(pattern, 0); break; case kGenHEPC: - snprintf(buf, sizeof(buf), "%s.he0", pattern); + result = Common::String::format("%s.he0", pattern); break; case kGenHEMac: - snprintf(buf, sizeof(buf), "%s (0)", pattern); + result = Common::String::format("%s (0)", pattern); break; case kGenHEMacNoParens: - snprintf(buf, sizeof(buf), "%s 0", pattern); + result = Common::String::format("%s 0", pattern); break; case kGenUnchanged: - strncpy(buf, pattern, sizeof(buf)); + result = pattern; break; default: error("generateFilenameForDetection: Unsupported genMethod"); } - buf[sizeof(buf) - 1] = 0; - return buf; + return result; } struct DetectorDesc { @@ -432,7 +431,7 @@ static void computeGameSettingsFromMD5(const Common::FSList &fslist, const GameF } } -static void composeFileHashMap(const Common::FSList &fslist, DescMap &fileMD5Map, int depth, const char **globs) { +static void composeFileHashMap(DescMap &fileMD5Map, const Common::FSList &fslist, int depth, const char **globs) { if (depth <= 0) return; @@ -460,9 +459,8 @@ static void composeFileHashMap(const Common::FSList &fslist, DescMap &fileMD5Map continue; Common::FSList files; - if (file->getChildren(files, Common::FSNode::kListAll)) { - composeFileHashMap(files, fileMD5Map, depth - 1, globs); + composeFileHashMap(fileMD5Map, files, depth - 1, globs); } } } @@ -473,7 +471,7 @@ static void detectGames(const Common::FSList &fslist, Common::List<DetectorResul DetectorResult dr; // Dive one level down since mac indy3/loom has its files split into directories. See Bug #1438631 - composeFileHashMap(fslist, fileMD5Map, 2, directoryGlobs); + composeFileHashMap(fileMD5Map, fslist, 2, directoryGlobs); // Iterate over all filename patterns. for (const GameFilenamePattern *gfp = gameFilenamesTable; gfp->gameid; ++gfp) { @@ -883,7 +881,7 @@ GameList ScummMetaEngine::getSupportedGames() const { } GameDescriptor ScummMetaEngine::findGame(const char *gameid) const { - return AdvancedDetector::findGameID(gameid, gameDescriptions, obsoleteGameIDsTable); + return Engines::findGameID(gameid, gameDescriptions, obsoleteGameIDsTable); } static Common::String generatePreferredTarget(const DetectorResult &x) { @@ -976,20 +974,7 @@ Common::Error ScummMetaEngine::createInstance(OSystem *syst, Engine **engine) co // We start by checking whether the specified game ID is obsolete. // If that is the case, we automatically upgrade the target to use // the correct new game ID (and platform, if specified). - for (const ADObsoleteGameID *o = obsoleteGameIDsTable; o->from; ++o) { - if (!scumm_stricmp(gameid, o->from)) { - // Match found, perform upgrade - gameid = o->to; - ConfMan.set("gameid", o->to); - - if (o->platform != Common::kPlatformUnknown) - ConfMan.set("platform", Common::getPlatformCode(o->platform)); - - warning("Target upgraded from game ID %s to %s", o->from, o->to); - ConfMan.flushToDisk(); - break; - } - } + Engines::upgradeTargetIfNecessary(obsoleteGameIDsTable); // Fetch the list of files in the current directory Common::FSList fslist; diff --git a/engines/scumm/detection_tables.h b/engines/scumm/detection_tables.h index 7eb1e80132..e510c46cf2 100644 --- a/engines/scumm/detection_tables.h +++ b/engines/scumm/detection_tables.h @@ -23,7 +23,7 @@ #ifndef SCUMM_DETECTION_TABLES_H #define SCUMM_DETECTION_TABLES_H -#include "engines/advancedDetector.h" +#include "engines/obsolete.h" #include "common/rect.h" #include "common/util.h" @@ -145,7 +145,7 @@ static const PlainGameDescriptor gameDescriptions[] = { * Conversion table mapping old obsolete game IDs to the * corresponding new game ID and platform combination. */ -static const ADObsoleteGameID obsoleteGameIDsTable[] = { +static const Engines::ObsoleteGameID obsoleteGameIDsTable[] = { {"bluesabctimedemo", "bluesabctime", UNK}, {"BluesBirthdayDemo", "BluesBirthday", UNK}, {"comidemo", "comi", UNK}, diff --git a/engines/scumm/gfx.cpp b/engines/scumm/gfx.cpp index 08ae9fdd96..fd529b36fe 100644 --- a/engines/scumm/gfx.cpp +++ b/engines/scumm/gfx.cpp @@ -251,7 +251,7 @@ GdiV2::~GdiV2() { } #ifdef USE_RGB_COLOR -Gdi16Bit::Gdi16Bit(ScummEngine *vm) : Gdi(vm) { +GdiHE16bit::GdiHE16bit(ScummEngine *vm) : GdiHE(vm) { } #endif @@ -583,7 +583,7 @@ void ScummEngine::updateDirtyScreen(VirtScreenNumber slot) { vs->tdirty[i] = vs->h; vs->bdirty[i] = 0; if (i != (_gdi->_numStrips - 1) && vs->bdirty[i + 1] == bottom && vs->tdirty[i + 1] == top) { - // Simple optimizations: if two or more neighbouring strips + // Simple optimizations: if two or more neighboring strips // form one bigger rectangle, coalesce them. w += 8; continue; @@ -652,16 +652,13 @@ void ScummEngine::drawStripToScreen(VirtScreen *vs, int x, int width, int top, i assert(0 == (width & 3)); // Compose the text over the game graphics -#ifdef USE_ARM_GFX_ASM - asmDrawStripToScreen(height, width, text, src, _compositeBuf, vs->pitch, width, _textSurface.pitch); -#else #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE if (_game.platform == Common::kPlatformFMTowns) { towns_drawStripToScreen(vs, x, y, x, top, width, height); return; } else #endif - if (_bytesPerPixelOutput == 2) { + if (_outputPixelFormat.bytesPerPixel == 2) { const byte *srcPtr = (const byte *)src; const byte *textPtr = (byte *)_textSurface.getBasePtr(x * m, y * m); byte *dstPtr = _compositeBuf; @@ -682,7 +679,11 @@ void ScummEngine::drawStripToScreen(VirtScreen *vs, int x, int width, int top, i srcPtr += vsPitch; textPtr += _textSurface.pitch - width * m; } - } else { + } +#ifdef USE_ARM_GFX_ASM + asmDrawStripToScreen(height, width, text, src, _compositeBuf, vs->pitch, width, _textSurface.pitch); +#else + else { // We blit four pixels at a time, for improved performance. const uint32 *src32 = (const uint32 *)src; uint32 *dst32 = (uint32 *)_compositeBuf; @@ -3673,7 +3674,7 @@ void Gdi::unkDecode11(byte *dst, int dstPitch, const byte *src, int height) cons #undef READ_BIT_256 #ifdef USE_RGB_COLOR -void Gdi16Bit::writeRoomColor(byte *dst, byte color) const { +void GdiHE16bit::writeRoomColor(byte *dst, byte color) const { WRITE_UINT16(dst, READ_LE_UINT16(_vm->_hePalettes + 2048 + color * 2)); } #endif diff --git a/engines/scumm/gfx.h b/engines/scumm/gfx.h index 6da07efd18..2e7111e78b 100644 --- a/engines/scumm/gfx.h +++ b/engines/scumm/gfx.h @@ -430,11 +430,11 @@ public: }; #ifdef USE_RGB_COLOR -class Gdi16Bit : public Gdi { +class GdiHE16bit : public GdiHE { protected: virtual void writeRoomColor(byte *dst, byte color) const; public: - Gdi16Bit(ScummEngine *vm); + GdiHE16bit(ScummEngine *vm); }; #endif @@ -443,7 +443,7 @@ public: // switching graphics layers on and off). class TownsScreen { public: - TownsScreen(OSystem *system, int width, int height, int bpp); + TownsScreen(OSystem *system, int width, int height, Graphics::PixelFormat &format); ~TownsScreen(); void setupLayer(int layer, int width, int height, int numCol, void *srcPal = 0); @@ -490,7 +490,7 @@ private: int _height; int _width; int _pitch; - int _bpp; + Graphics::PixelFormat _pixelFormat; int _numDirtyRects; Common::List<Common::Rect> _dirtyRects; diff --git a/engines/scumm/gfx_towns.cpp b/engines/scumm/gfx_towns.cpp index 82bb32cdfb..4ec9c1bbf4 100644 --- a/engines/scumm/gfx_towns.cpp +++ b/engines/scumm/gfx_towns.cpp @@ -50,10 +50,10 @@ void ScummEngine::towns_drawStripToScreen(VirtScreen *vs, int dstX, int dstY, in if (vs->number == kMainVirtScreen || _game.id == GID_INDY3 || _game.id == GID_ZAK) { for (int h = 0; h < height; ++h) { - if (_bytesPerPixelOutput == 2) { + if (_outputPixelFormat.bytesPerPixel == 2) { for (int w = 0; w < width; ++w) { *(uint16*)dst1 = _16BitPalette[*src1++]; - dst1 += _bytesPerPixelOutput; + dst1 += _outputPixelFormat.bytesPerPixel; } src1 += sp1; @@ -197,8 +197,8 @@ const uint8 ScummEngine::_townsLayer2Mask[] = { #define DIRTY_RECTS_MAX 20 #define FULL_REDRAW (DIRTY_RECTS_MAX + 1) -TownsScreen::TownsScreen(OSystem *system, int width, int height, int bpp) : - _system(system), _width(width), _height(height), _bpp(bpp), _pitch(width * bpp) { +TownsScreen::TownsScreen(OSystem *system, int width, int height, Graphics::PixelFormat &format) : + _system(system), _width(width), _height(height), _pixelFormat(format), _pitch(width * format.bytesPerPixel) { memset(&_layers[0], 0, sizeof(TownsScreenLayer)); memset(&_layers[1], 0, sizeof(TownsScreenLayer)); _outBuffer = new byte[_pitch * _height]; @@ -247,8 +247,8 @@ void TownsScreen::setupLayer(int layer, int width, int height, int numCol, void l->pitch = width * l->bpp; l->palette = (uint8*)pal; - if (l->palette && _bpp == 1) - warning("TownsScreen::setupLayer(): Layer palette usage requires 15 bit graphics setting.\nLayer palette will be ignored."); + if (l->palette && _pixelFormat.bytesPerPixel == 1) + warning("TownsScreen::setupLayer(): Layer palette usage requires 16 bit graphics setting.\nLayer palette will be ignored."); delete[] l->pixels; l->pixels = new uint8[l->pitch * l->height]; @@ -267,10 +267,11 @@ void TownsScreen::setupLayer(int layer, int width, int height, int numCol, void l->bltInternY[i] = l->pixels + (i / l->scaleH) * l->pitch; delete[] l->bltTmpPal; - l->bltTmpPal = (l->bpp == 1 && _bpp == 2) ? new uint16[l->numCol] : 0; + l->bltTmpPal = (l->bpp == 1 && _pixelFormat.bytesPerPixel == 2) ? new uint16[l->numCol] : 0; l->enabled = true; - l->onBottom = (!layer || !_layers[0].enabled); + _layers[0].onBottom = true; + _layers[1].onBottom = _layers[0].enabled ? false : true; l->ready = true; } @@ -420,10 +421,10 @@ void TownsScreen::toggleLayers(int flag) { if (flag < 0 || flag > 3) return; - for (int i = 0; i < 2; ++i) { - _layers[i].enabled = (flag & (i + 1)) ? true : false; - _layers[i].onBottom = (!i || !_layers[0].enabled); - } + _layers[0].enabled = (flag & 1) ? true : false; + _layers[0].onBottom = true; + _layers[1].enabled = (flag & 2) ? true : false; + _layers[1].onBottom = _layers[0].enabled ? false : true; _dirtyRects.clear(); _dirtyRects.push_back(Common::Rect(_width - 1, _height - 1)); @@ -448,22 +449,24 @@ void TownsScreen::updateOutputBuffer() { if (!l->enabled || !l->ready) continue; - uint8 *dst = _outBuffer + r->top * _pitch + r->left * _bpp; - int ptch = _pitch - (r->right - r->left + 1) * _bpp; + uint8 *dst = _outBuffer + r->top * _pitch + r->left * _pixelFormat.bytesPerPixel; + int ptch = _pitch - (r->right - r->left + 1) * _pixelFormat.bytesPerPixel; - if (_bpp == 2 && l->bpp == 1) { + if (_pixelFormat.bytesPerPixel == 2 && l->bpp == 1) { + if (!l->palette) + error("void TownsScreen::updateOutputBuffer(): No palette assigned to 8 bit layer %d", i); for (int ic = 0; ic < l->numCol; ic++) l->bltTmpPal[ic] = calc16BitColor(&l->palette[ic * 3]); } for (int y = r->top; y <= r->bottom; ++y) { - if (l->bpp == _bpp && l->scaleW == 1 && l->onBottom) { - memcpy(dst, l->bltInternY[y] + l->bltInternX[r->left], (r->right + 1 - r->left) * _bpp); + if (l->bpp == _pixelFormat.bytesPerPixel && l->scaleW == 1 && l->onBottom && l->numCol & 0xff00) { + memcpy(dst, &l->bltInternY[y][l->bltInternX[r->left]], (r->right + 1 - r->left) * _pixelFormat.bytesPerPixel); dst += _pitch; - } else if (_bpp == 2) { + } else if (_pixelFormat.bytesPerPixel == 2) { for (int x = r->left; x <= r->right; ++x) { - uint8 *src = l->bltInternY[y] + l->bltInternX[x]; + uint8 *src = &l->bltInternY[y][l->bltInternX[x]]; if (l->bpp == 1) { uint8 col = *src; if (col || l->onBottom) { @@ -480,7 +483,7 @@ void TownsScreen::updateOutputBuffer() { } else { for (int x = r->left; x <= r->right; ++x) { - uint8 col = *(l->bltInternY[y] + l->bltInternX[x]); + uint8 col = l->bltInternY[y][l->bltInternX[x]]; if (col || l->onBottom) { if (l->numCol == 16) col = (col >> 4) & (col & 0x0f); @@ -497,17 +500,13 @@ void TownsScreen::updateOutputBuffer() { void TownsScreen::outputToScreen() { for (Common::List<Common::Rect>::iterator i = _dirtyRects.begin(); i != _dirtyRects.end(); ++i) - _system->copyRectToScreen(_outBuffer + i->top * _pitch + i->left * _bpp, _pitch, i->left, i->top, i->right - i->left + 1, i->bottom - i->top + 1); + _system->copyRectToScreen(_outBuffer + i->top * _pitch + i->left * _pixelFormat.bytesPerPixel, _pitch, i->left, i->top, i->right - i->left + 1, i->bottom - i->top + 1); _dirtyRects.clear(); _numDirtyRects = 0; } -uint16 TownsScreen::calc16BitColor(const uint8 *palEntry) { - uint16 ar = (palEntry[0] & 0xf8) << 7; - uint16 ag = (palEntry[1] & 0xf8) << 2; - uint16 ab = (palEntry[2] >> 3); - uint16 col = ar | ag | ab; - return col; +uint16 TownsScreen::calc16BitColor(const uint8 *palEntry) { + return _pixelFormat.RGBToColor(palEntry[0], palEntry[1], palEntry[2]); } #undef DIRTY_RECTS_MAX diff --git a/engines/scumm/he/resource_he.cpp b/engines/scumm/he/resource_he.cpp index 6b195bec84..4565bb9f26 100644 --- a/engines/scumm/he/resource_he.cpp +++ b/engines/scumm/he/resource_he.cpp @@ -171,7 +171,7 @@ bool MacResExtractor::extractResource(int id, CachedCursor *cc) { return false; // If we don't have a cursor palette, force monochrome cursors - bool forceMonochrome = !_vm->_system->hasFeature(OSystem::kFeatureCursorHasPalette); + bool forceMonochrome = !_vm->_system->hasFeature(OSystem::kFeatureCursorPalette); Graphics::MacCursor *macCursor = new Graphics::MacCursor(); diff --git a/engines/scumm/help.cpp b/engines/scumm/help.cpp index 59bf79658e..ae7a1ad3bc 100644 --- a/engines/scumm/help.cpp +++ b/engines/scumm/help.cpp @@ -107,7 +107,7 @@ void ScummHelp::updateStrings(byte gameId, byte version, Common::Platform platfo ADD_TEXT(_("* Note that using ctrl-f and")); ADD_TEXT(_(" ctrl-g are not recommended")); ADD_TEXT(_(" since they may cause crashes")); - ADD_TEXT(_(" or incorrect game behaviour.")); + ADD_TEXT(_(" or incorrect game behavior.")); break; case 3: if (gameId == GID_LOOM) diff --git a/engines/scumm/imuse/imuse.cpp b/engines/scumm/imuse/imuse.cpp index fe23b88e52..6813566144 100644 --- a/engines/scumm/imuse/imuse.cpp +++ b/engines/scumm/imuse/imuse.cpp @@ -26,6 +26,7 @@ #include "common/util.h" #include "common/system.h" +#include "common/endian.h" #include "scumm/imuse/imuse.h" #include "scumm/imuse/imuse_internal.h" @@ -99,9 +100,16 @@ IMuseInternal::~IMuseInternal() { } } -byte *IMuseInternal::findStartOfSound(int sound) { +byte *IMuseInternal::findStartOfSound(int sound, int ct) { int32 size, pos; - + + static const uint32 id[] = { + MKTAG('M', 'T', 'h', 'd'), + MKTAG('F', 'O', 'R', 'M'), + MKTAG('M', 'D', 'h', 'd'), + MKTAG('M', 'D', 'p', 'g') + }; + byte *ptr = g_scumm->_res->_types[rtSound][sound]._address; if (ptr == NULL) { @@ -110,10 +118,11 @@ byte *IMuseInternal::findStartOfSound(int sound) { } // Check for old-style headers first, like 'RO' + int trFlag = (kMThd | kFORM); if (ptr[0] == 'R' && ptr[1] == 'O'&& ptr[2] != 'L') - return ptr; + return ct == trFlag ? ptr : 0; if (ptr[4] == 'S' && ptr[5] == 'O') - return ptr + 4; + return ct == trFlag ? ptr + 4 : 0; ptr += 4; size = READ_BE_UINT32(ptr); @@ -124,12 +133,16 @@ byte *IMuseInternal::findStartOfSound(int sound) { size = 48; // Arbitrary; we should find our tag within the first 48 bytes of the resource pos = 0; while (pos < size) { - if (!memcmp(ptr + pos, "MThd", 4) || !memcmp(ptr + pos, "FORM", 4)) - return ptr + pos; + for (int i = 0; i < ARRAYSIZE(id); ++i) { + if ((ct & (1 << i)) && (READ_BE_UINT32(ptr + pos) == id[i])) + return ptr + pos; + } ++pos; // We could probably iterate more intelligently } - debug(3, "IMuseInternal::findStartOfSound(): Failed to align on sound %d", sound); + if (ct == (kMThd | kFORM)) + debug(3, "IMuseInternal::findStartOfSound(): Failed to align on sound %d", sound); + return 0; } @@ -556,7 +569,7 @@ bool IMuseInternal::startSound_internal(int sound, int offset) { return false; } - void *ptr = findStartOfSound(sound); + byte *ptr = findStartOfSound(sound); if (!ptr) { debug(2, "IMuseInternal::startSound(): Couldn't find sound %d", sound); return false; @@ -576,8 +589,11 @@ bool IMuseInternal::startSound_internal(int sound, int offset) { // Bug #590511 and Patch #607175 (which was reversed to fix // an FOA regression: Bug #622606). Player *player = findActivePlayer(sound); - if (!player) - player = allocate_player(128); + if (!player) { + ptr = findStartOfSound(sound, IMuseInternal::kMDhd); + player = allocate_player(ptr ? (READ_BE_UINT32(&ptr[4]) && ptr[10] ? ptr[10] : 128) : 128); + } + if (!player) return false; diff --git a/engines/scumm/imuse/imuse_internal.h b/engines/scumm/imuse/imuse_internal.h index ec60b22509..8808a3655a 100644 --- a/engines/scumm/imuse/imuse_internal.h +++ b/engines/scumm/imuse/imuse_internal.h @@ -229,6 +229,7 @@ protected: // Sequencer part int start_seq_sound(int sound, bool reset_vars = true); + void loadStartParameters(int sound); int query_param(int param); public: @@ -445,7 +446,14 @@ protected: static void midiTimerCallback(void *data); void on_timer(MidiDriver *midi); - byte *findStartOfSound(int sound); + enum ChunkType { + kMThd = 1, + kFORM = 2, + kMDhd = 4, // Used in MI2 and INDY4. Contain certain start parameters (priority, volume, etc. ) for the player. + kMDpg = 8 // These chunks exist in DOTT and SAMNMAX. They don't get processed, however. + }; + + byte *findStartOfSound(int sound, int ct = (kMThd | kFORM)); bool isMT32(int sound); bool isMIDI(int sound); int get_queue_sound_status(int sound) const; diff --git a/engines/scumm/imuse/imuse_part.cpp b/engines/scumm/imuse/imuse_part.cpp index 808af23dde..5df8407a96 100644 --- a/engines/scumm/imuse/imuse_part.cpp +++ b/engines/scumm/imuse/imuse_part.cpp @@ -137,7 +137,8 @@ void Part::set_pan(int8 pan) { } void Part::set_transpose(int8 transpose) { - _transpose_eff = transpose_clamp((_transpose = transpose) + _player->getTranspose(), -24, 24); + _transpose = transpose; + _transpose_eff = (_transpose == -128) ? 0 : transpose_clamp(_transpose + _player->getTranspose(), -24, 24); sendPitchBend(); } diff --git a/engines/scumm/imuse/imuse_player.cpp b/engines/scumm/imuse/imuse_player.cpp index e7ee935130..0b084f3116 100644 --- a/engines/scumm/imuse/imuse_player.cpp +++ b/engines/scumm/imuse/imuse_player.cpp @@ -90,7 +90,7 @@ Player::~Player() { } bool Player::startSound(int sound, MidiDriver *midi) { - void *ptr; + byte *ptr; int i; // Not sure what the old code was doing, @@ -108,13 +108,8 @@ bool Player::startSound(int sound, MidiDriver *midi) { _active = true; _midi = midi; _id = sound; - _priority = 0x80; - _volume = 0x7F; - _vol_chan = 0xFFFF; - _vol_eff = (_se->get_channel_volume(0xFFFF) << 7) >> 7; - _pan = 0; - _transpose = 0; - _detune = 0; + + loadStartParameters(sound); for (i = 0; i < ARRAYSIZE(_parameterFaders); ++i) _parameterFaders[i].init(); @@ -125,7 +120,7 @@ bool Player::startSound(int sound, MidiDriver *midi) { _midi = NULL; return false; } - + debugC(DEBUG_IMUSE, "Starting music %d", sound); return true; } @@ -199,11 +194,43 @@ int Player::start_seq_sound(int sound, bool reset_vars) { _parser->property(MidiParser::mpSmartJump, 1); _parser->loadMusic(ptr, 0); _parser->setTrack(_track_index); - setSpeed(reset_vars ? 128 : _speed); + + ptr = _se->findStartOfSound(sound, IMuseInternal::kMDhd); + setSpeed(reset_vars ? (ptr ? (READ_BE_UINT32(&ptr[4]) && ptr[15] ? ptr[15] : 128) : 128) : _speed); return 0; } +void Player::loadStartParameters(int sound) { + _priority = 0x80; + _volume = 0x7F; + _vol_chan = 0xFFFF; + _vol_eff = (_se->get_channel_volume(0xFFFF) << 7) >> 7; + _pan = 0; + _transpose = 0; + _detune = 0; + + byte *ptr = _se->findStartOfSound(sound, IMuseInternal::kMDhd); + uint32 size = 0; + + if (ptr) { + ptr += 4; + size = READ_BE_UINT32(ptr); + ptr += 4; + + // MDhd chunks don't get used in MI1 and contain only zeroes. + // We check for volume, priority and speed settings of zero here. + if (size && (ptr[2] | ptr[3] | ptr[7])) { + _priority = ptr[2]; + _volume = ptr[3]; + _pan = ptr[4]; + _transpose = ptr[5]; + _detune = ptr[6]; + setSpeed(ptr[7]); + } + } +} + void Player::uninit_parts() { assert(!_parts || _parts->_player == this); diff --git a/engines/scumm/imuse/sysex_scumm.cpp b/engines/scumm/imuse/sysex_scumm.cpp index 6ab71c2fa5..4eb3bee93c 100644 --- a/engines/scumm/imuse/sysex_scumm.cpp +++ b/engines/scumm/imuse/sysex_scumm.cpp @@ -64,6 +64,11 @@ void sysexHandler_Scumm(Player *player, const byte *msg, uint16 len) { // BYTE 14: Pitchbend range(lower 4 bits) [bug #1088045] // BYTE 15: Program(upper 4 bits) // BYTE 16: Program(lower 4 bits) + + // athrxx (05-21-2011): + // BYTE 9, 10: Transpose (if set to 0x80, this means that part->_transpose_eff will be 0 (also ignoring player->_transpose) + // BYTE 11, 12: Detune + part = player->getPart(p[0] & 0x0F); if (part) { part->set_onoff(p[2] & 0x01); @@ -71,7 +76,8 @@ void sysexHandler_Scumm(Player *player, const byte *msg, uint16 len) { part->set_pri(p[4]); part->volume((p[5] & 0x0F) << 4 |(p[6] & 0x0F)); part->set_pan((p[7] & 0x0F) << 4 | (p[8] & 0x0F)); - part->_percussion = player->_isMIDI ? ((p[9] & 0x08) > 0) : false; + part->_percussion = player->_isMIDI ? ((p[9] & 0x08) > 0) : false; + part->set_transpose((p[9] & 0x0F) << 4 | (p[10] & 0x0F)); part->set_detune((p[11] & 0x0F) << 4 | (p[12] & 0x0F)); part->pitchBendFactor((p[13] & 0x0F) << 4 | (p[14] & 0x0F)); if (part->_percussion) { diff --git a/engines/scumm/input.cpp b/engines/scumm/input.cpp index 1a4ed91f1c..07c52578c3 100644 --- a/engines/scumm/input.cpp +++ b/engines/scumm/input.cpp @@ -117,7 +117,7 @@ void ScummEngine::parseEvent(Common::Event event) { if (_saveLoadSlot == 0) _saveLoadSlot = 10; - sprintf(_saveLoadName, "Quicksave %d", _saveLoadSlot); + _saveLoadDescription = Common::String::format("Quicksave %d", _saveLoadSlot); _saveLoadFlag = (event.kbd.hasFlags(Common::KBD_ALT)) ? 1 : 2; _saveTemporaryState = false; } else if (event.kbd.hasFlags(Common::KBD_CTRL) && event.kbd.keycode == Common::KEYCODE_f) { @@ -303,14 +303,14 @@ void ScummEngine::processInput() { if ((_leftBtnPressed & msClicked) && (_rightBtnPressed & msClicked) && _game.version >= 4) { // Pressing both mouse buttons is treated as if you pressed // the cutscene exit key (ESC) in V4+ games. That mimicks - // the behaviour of the original engine where pressing both + // the behavior of the original engine where pressing both // mouse buttons also skips the current cutscene. _mouseAndKeyboardStat = 0; lastKeyHit = Common::KeyState(Common::KEYCODE_ESCAPE); } else if ((_rightBtnPressed & msClicked) && (_game.version <= 3 && _game.id != GID_LOOM)) { // Pressing right mouse button is treated as if you pressed // the cutscene exit key (ESC) in V0-V3 games. That mimicks - // the behaviour of the original engine where pressing right + // the behavior of the original engine where pressing right // mouse button also skips the current cutscene. _mouseAndKeyboardStat = 0; lastKeyHit = Common::KeyState(Common::KEYCODE_ESCAPE); diff --git a/engines/scumm/object.cpp b/engines/scumm/object.cpp index fb99d6ce7d..ae4bbc45a6 100644 --- a/engines/scumm/object.cpp +++ b/engines/scumm/object.cpp @@ -101,7 +101,7 @@ void ScummEngine::setOwnerOf(int obj, int owner) { // In Sam & Max this is necessary, or you won't get your stuff back // from the Lost and Found tent after riding the Cone of Tragedy. But // it probably applies to all V6+ games. See bugs #493153 and #907113. - // FT disassembly is checked, behaviour is correct. [sev] + // FT disassembly is checked, behavior is correct. [sev] int arg = (_game.version >= 6) ? obj : 0; diff --git a/engines/scumm/palette.cpp b/engines/scumm/palette.cpp index b85771e897..51ba2195d7 100644 --- a/engines/scumm/palette.cpp +++ b/engines/scumm/palette.cpp @@ -48,11 +48,7 @@ uint8 *ScummEngine::getHEPaletteSlot(uint16 palSlot) { } uint16 ScummEngine::get16BitColor(uint8 r, uint8 g, uint8 b) { - uint16 ar = (r >> 3) << 10; - uint16 ag = (g >> 3) << 5; - uint16 ab = (b >> 3) << 0; - uint16 col = ar | ag | ab; - return col; + return _outputPixelFormat.RGBToColor(r, g, b); } void ScummEngine::resetPalette() { @@ -214,7 +210,7 @@ void ScummEngine::resetPalette() { } else { if ((_game.platform == Common::kPlatformAmiga) && _game.version == 4) { // if rendermode is set to EGA we use the full palette from the resources - // else we initialise and then lock down the first 16 colors. + // else we initialize and then lock down the first 16 colors. if (_renderMode != Common::kRenderEGA) setPaletteFromTable(tableAmigaMIPalette, sizeof(tableAmigaMIPalette) / 3); #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE diff --git a/engines/scumm/player_towns.cpp b/engines/scumm/player_towns.cpp index 15b2f65797..e71a8d0587 100644 --- a/engines/scumm/player_towns.cpp +++ b/engines/scumm/player_towns.cpp @@ -581,15 +581,12 @@ Player_Towns_v2::Player_Towns_v2(ScummEngine *vm, Audio::Mixer *mixer, IMuse *im } Player_Towns_v2::~Player_Towns_v2() { - // Avoid lockup in imuse.cpp, line 78 - _intf->lockInternal(); - if (_imuseDispose) - delete _imuse; - _intf->unlockInternal(); - delete _intf; _intf = 0; + if (_imuseDispose) + delete _imuse; + delete[] _sblData; delete[] _soundOverride; } diff --git a/engines/scumm/player_v4a.h b/engines/scumm/player_v4a.h index b51ca2f993..d01c70f295 100644 --- a/engines/scumm/player_v4a.h +++ b/engines/scumm/player_v4a.h @@ -67,7 +67,7 @@ private: // byte type; } _sfxSlots[4]; - int8 _initState; // < 0: failed, 0: uninitialised, > 0: initialised + int8 _initState; // < 0: failed, 0: uninitialized, > 0: initialized int getSfxChan(int id) const { for (int i = 0; i < ARRAYSIZE(_sfxSlots); ++i) diff --git a/engines/scumm/resource.cpp b/engines/scumm/resource.cpp index 0448f60593..10301da3e3 100644 --- a/engines/scumm/resource.cpp +++ b/engines/scumm/resource.cpp @@ -822,11 +822,12 @@ byte *ResourceManager::createResource(ResType type, ResId idx, uint32 size) { expireResources(size); - byte *ptr = (byte *)calloc(size + SAFETY_AREA, 1); + byte *ptr = new byte[size + SAFETY_AREA]; if (ptr == NULL) { error("createResource(%s,%d): Out of memory while allocating %d", nameOfResType(type), idx, size); } + memset(ptr, 0, size + SAFETY_AREA); _allocatedSize += size; _types[type][idx]._address = ptr; @@ -845,12 +846,12 @@ ResourceManager::Resource::Resource() { } ResourceManager::Resource::~Resource() { - delete _address; + delete[] _address; _address = 0; } void ResourceManager::Resource::nuke() { - delete _address; + delete[] _address; _address = 0; _size = 0; _flags = 0; diff --git a/engines/scumm/resource.h b/engines/scumm/resource.h index e8b0c1eaae..2e8960717f 100644 --- a/engines/scumm/resource.h +++ b/engines/scumm/resource.h @@ -63,9 +63,9 @@ class ScummEngine; * marked in this way. */ enum ResTypeMode { - kDynamicResTypeMode = 0, ///!< Resource is generated during runtime and may change - kStaticResTypeMode = 1, ///!< Resource comes from data files, does not change - kSoundResTypeMode = 2 ///!< Resource comes from data files, but may change + kDynamicResTypeMode = 0, ///< Resource is generated during runtime and may change + kStaticResTypeMode = 1, ///< Resource comes from data files, does not change + kSoundResTypeMode = 2 ///< Resource comes from data files, but may change }; /** diff --git a/engines/scumm/saveload.cpp b/engines/scumm/saveload.cpp index f5d219c721..f9a6b211c3 100644 --- a/engines/scumm/saveload.cpp +++ b/engines/scumm/saveload.cpp @@ -103,7 +103,7 @@ bool ScummEngine::canLoadGameStateCurrently() { return (VAR_MAINMENU_KEY == 0xFF || VAR(VAR_MAINMENU_KEY) != 0); } -Common::Error ScummEngine::saveGameState(int slot, const char *desc) { +Common::Error ScummEngine::saveGameState(int slot, const Common::String &desc) { requestSave(slot, desc); return Common::kNoError; } @@ -135,13 +135,11 @@ bool ScummEngine::canSaveGameStateCurrently() { } -void ScummEngine::requestSave(int slot, const char *name) { +void ScummEngine::requestSave(int slot, const Common::String &name) { _saveLoadSlot = slot; _saveTemporaryState = false; _saveLoadFlag = 1; // 1 for save - assert(name); - strncpy(_saveLoadName, name, sizeof(_saveLoadName)); - _saveLoadName[sizeof(_saveLoadName) - 1] = 0; + _saveLoadDescription = name; } void ScummEngine::requestLoad(int slot) { @@ -166,7 +164,7 @@ bool ScummEngine::saveState(Common::OutSaveFile *out, bool writeHeader) { SaveGameHeader hdr; if (writeHeader) { - memcpy(hdr.name, _saveLoadName, sizeof(hdr.name)); + Common::strlcpy(hdr.name, _saveLoadDescription.c_str(), sizeof(hdr.name)); saveSaveGameHeader(out, hdr); } #if !defined(__DS__) && !defined(__N64__) /* && !defined(__PLAYSTATION2__) */ @@ -387,7 +385,8 @@ bool ScummEngine::loadState(int slot, bool compat) { if (hdr.ver == VER(7)) hdr.ver = VER(8); - memcpy(_saveLoadName, hdr.name, sizeof(hdr.name)); + hdr.name[sizeof(hdr.name)-1] = 0; + _saveLoadDescription = hdr.name; // Unless specifically requested with _saveSound, we do not save the iMUSE // state for temporary state saves - such as certain cutscenes in DOTT, @@ -589,9 +588,9 @@ bool ScummEngine::loadState(int slot, bool compat) { } Common::String ScummEngine::makeSavegameName(const Common::String &target, int slot, bool temporary) { - char extension[6]; - snprintf(extension, sizeof(extension), ".%c%02d", temporary ? 'c' : 's', slot); - return (target + extension); + Common::String extension; + extension = Common::String::format(".%c%02d", temporary ? 'c' : 's', slot); + return target + extension; } void ScummEngine::listSavegames(bool *marks, int num) { @@ -1490,7 +1489,7 @@ void ScummEngine_v5::saveOrLoad(Serializer *s) { // Reset cursors for old FM-Towns savegames saved with 256 color setting. // Otherwise the cursor will be messed up when displayed in the new hi color setting. - if (_game.platform == Common::kPlatformFMTowns && _bytesPerPixelOutput == 2 && s->isLoading() && s->getVersion() < VER(82)) { + if (_game.platform == Common::kPlatformFMTowns && _outputPixelFormat.bytesPerPixel == 2 && s->isLoading() && s->getVersion() < VER(82)) { if (_game.id == GID_LOOM) { redefineBuiltinCursorFromChar(1, 1); redefineBuiltinCursorHotspot(1, 0, 0); @@ -1498,6 +1497,16 @@ void ScummEngine_v5::saveOrLoad(Serializer *s) { resetCursors(); } } + + // Regenerate 16bit palette after loading. + // This avoids color issues when loading savegames that have been saved with a different ScummVM port + // that uses a different 16bit color mode than the ScummVM port which is currently used. +#ifdef USE_RGB_COLOR + if (_game.platform == Common::kPlatformPCEngine && s->isLoading()) { + for (int i = 0; i < 256; ++i) + _16BitPalette[i] = get16BitColor(_currentPalette[i * 3 + 0], _currentPalette[i * 3 + 1], _currentPalette[i * 3 + 2]); + } +#endif } #ifdef ENABLE_SCUMM_7_8 diff --git a/engines/scumm/script_v5.cpp b/engines/scumm/script_v5.cpp index b8f3b4b3b3..2c8f65496f 100644 --- a/engines/scumm/script_v5.cpp +++ b/engines/scumm/script_v5.cpp @@ -2646,7 +2646,7 @@ void ScummEngine_v5::decodeParseString() { // In SCUMM V1-V3, there were no 'default' values for the text slot - // values. Hence to achieve correct behaviour, we have to keep the + // values. Hence to achieve correct behavior, we have to keep the // 'default' values in sync with the active values. // // Note: This is needed for Indy3 (Grail Diary). It's also needed diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp index e8dd6cb548..4fd1f6b32d 100644 --- a/engines/scumm/scumm.cpp +++ b/engines/scumm/scumm.cpp @@ -114,17 +114,18 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr) _rnd("scumm") { - if (_game.heversion > 0) { - _gdi = new GdiHE(this); - } else if (_game.platform == Common::kPlatformNES) { - _gdi = new GdiNES(this); #ifdef USE_RGB_COLOR - } else if (_game.features & GF_16BIT_COLOR) { + if (_game.features & GF_16BIT_COLOR) { if (_game.platform == Common::kPlatformPCEngine) _gdi = new GdiPCEngine(this); - else - _gdi = new Gdi16Bit(this); + else if (_game.heversion > 0) + _gdi = new GdiHE16bit(this); + } else #endif + if (_game.heversion > 0) { + _gdi = new GdiHE(this); + } else if (_game.platform == Common::kPlatformNES) { + _gdi = new GdiNES(this); } else if (_game.version <= 1) { _gdi = new GdiV1(this); } else if (_game.version == 2) { @@ -162,7 +163,7 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr) _pauseDialog = NULL; _versionDialog = NULL; _fastMode = 0; - _actors = NULL; + _actors = _sortedActors = NULL; _arraySlot = NULL; _inventory = NULL; _newNames = NULL; @@ -213,7 +214,6 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr) _saveLoadSlot = 0; _lastSaveTime = 0; _saveTemporaryState = false; - memset(_saveLoadName, 0, sizeof(_saveLoadName)); memset(_localScriptOffsets, 0, sizeof(_localScriptOffsets)); _scriptPointer = NULL; _scriptOrgPointer = NULL; @@ -261,7 +261,7 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr) _switchRoomEffect2 = 0; _switchRoomEffect = 0; - _bytesPerPixelOutput = _bytesPerPixel = 1; + _bytesPerPixel = 1; _doEffect = false; _snapScroll = false; _currentLights = 0; @@ -546,18 +546,19 @@ ScummEngine::ScummEngine(OSystem *syst, const DetectorResult &dr) _screenHeight = 200; } - _bytesPerPixelOutput = _bytesPerPixel = (_game.features & GF_16BIT_COLOR) ? 2 : 1; + _bytesPerPixel = (_game.features & GF_16BIT_COLOR) ? 2 : 1; + uint8 sizeMult = _bytesPerPixel; #ifdef USE_RGB_COLOR #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE if (_game.platform == Common::kPlatformFMTowns) - _bytesPerPixelOutput = 2; + sizeMult = 2; #endif #endif // Allocate gfx compositing buffer (not needed for V7/V8 games). if (_game.version < 7) - _compositeBuf = (byte *)malloc(_screenWidth * _screenHeight * _bytesPerPixelOutput); + _compositeBuf = (byte *)malloc(_screenWidth * _screenHeight * sizeMult); else _compositeBuf = 0; @@ -585,9 +586,12 @@ ScummEngine::~ScummEngine() { _mixer->stopAll(); - for (int i = 0; i < _numActors; ++i) - delete _actors[i]; - delete[] _actors; + if (_actors) { + for (int i = 0; i < _numActors; ++i) + delete _actors[i]; + delete[] _actors; + } + delete[] _sortedActors; delete[] _2byteFontPtr; @@ -1152,10 +1156,31 @@ Common::Error ScummEngine::init() { #endif ) { #ifdef USE_RGB_COLOR - Graphics::PixelFormat format = Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0); - initGraphics(screenWidth, screenHeight, screenWidth > 320, &format); - if (format != _system->getScreenFormat()) - return Common::kUnsupportedColorMode; + _outputPixelFormat = Graphics::PixelFormat(2, 5, 5, 5, 0, 10, 5, 0, 0); + + if (_game.platform != Common::kPlatformFMTowns && _game.platform != Common::kPlatformPCEngine) { + initGraphics(screenWidth, screenHeight, screenWidth > 320, &_outputPixelFormat); + if (_outputPixelFormat != _system->getScreenFormat()) + return Common::kUnsupportedColorMode; + } else { + Common::List<Graphics::PixelFormat> tryModes = _system->getSupportedFormats(); + for (Common::List<Graphics::PixelFormat>::iterator g = tryModes.begin(); g != tryModes.end(); ++g) { + if (g->bytesPerPixel != 2 || g->aBits()) { + g = tryModes.erase(g); + g--; + } + + if (*g == _outputPixelFormat) { + tryModes.clear(); + tryModes.push_back(_outputPixelFormat); + break; + } + } + + initGraphics(screenWidth, screenHeight, screenWidth > 320, tryModes); + if (_system->getScreenFormat().bytesPerPixel != 2) + return Common::kUnsupportedColorMode; + } #else if (_game.platform == Common::kPlatformFMTowns && _game.version == 3) { warning("Starting game without the required 16bit color support.\nYou may experience color glitches"); @@ -1167,12 +1192,14 @@ Common::Error ScummEngine::init() { } else { #ifdef DISABLE_TOWNS_DUAL_LAYER_MODE if (_game.platform == Common::kPlatformFMTowns && _game.version == 5) - error("This game requires dual graphics layer support which is disabled in this build"); + return Common::Error(Common::kUnsupportedColorMode, "This game requires dual graphics layer support which is disabled in this build"); #endif initGraphics(screenWidth, screenHeight, (screenWidth > 320)); } } + _outputPixelFormat = _system->getScreenFormat(); + setupScumm(); readIndexFile(); @@ -1281,7 +1308,7 @@ void ScummEngine::setupScumm() { _res->setHeapThreshold(400000, maxHeapThreshold); free(_compositeBuf); - _compositeBuf = (byte *)malloc(_screenWidth * _textSurfaceMultiplier * _screenHeight * _textSurfaceMultiplier * _bytesPerPixelOutput); + _compositeBuf = (byte *)malloc(_screenWidth * _textSurfaceMultiplier * _screenHeight * _textSurfaceMultiplier * _outputPixelFormat.bytesPerPixel); } #ifdef ENABLE_SCUMM_7_8 @@ -1362,7 +1389,7 @@ void ScummEngine::resetScumm() { #ifdef USE_RGB_COLOR if (_game.features & GF_16BIT_COLOR #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE - || _game.platform == Common::kPlatformFMTowns + || (_game.platform == Common::kPlatformFMTowns) #endif ) _16BitPalette = (uint16 *)calloc(512, sizeof(uint16)); @@ -1371,8 +1398,8 @@ void ScummEngine::resetScumm() { #ifndef DISABLE_TOWNS_DUAL_LAYER_MODE if (_game.platform == Common::kPlatformFMTowns) { delete _townsScreen; - _townsScreen = new TownsScreen(_system, _screenWidth * _textSurfaceMultiplier, _screenHeight * _textSurfaceMultiplier, _bytesPerPixelOutput); - _townsScreen->setupLayer(0, _screenWidth, _screenHeight, (_bytesPerPixelOutput == 2) ? 32767 : 256); + _townsScreen = new TownsScreen(_system, _screenWidth * _textSurfaceMultiplier, _screenHeight * _textSurfaceMultiplier, _outputPixelFormat); + _townsScreen->setupLayer(0, _screenWidth, _screenHeight, (_outputPixelFormat.bytesPerPixel == 2) ? 32767 : 256); _townsScreen->setupLayer(1, _screenWidth * _textSurfaceMultiplier, _screenHeight * _textSurfaceMultiplier, 16, _textPalette); } #endif @@ -1763,8 +1790,10 @@ void ScummEngine::setupMusic(int midi) { if (missingFile) { GUI::MessageDialog dialog( - "Native MIDI support requires the Roland Upgrade from LucasArts,\n" - "but " + fileName + " is missing. Using AdLib instead.", "Ok"); + Common::String::format( + _("Native MIDI support requires the Roland Upgrade from LucasArts,\n" + "but %s is missing. Using AdLib instead."), fileName.c_str()), + _("OK")); dialog.runModal(); _musicType = MDT_ADLIB; } @@ -1833,7 +1862,7 @@ void ScummEngine::setupMusic(int midi) { if (nativeMidiDriver != NULL && _native_mt32) nativeMidiDriver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); bool multi_midi = ConfMan.getBool("multi_midi") && _musicType != MDT_NONE && (midi & MDT_ADLIB); - if (_musicType == MDT_ADLIB || MDT_TOWNS || multi_midi) { + if (_musicType == MDT_ADLIB || _musicType == MDT_TOWNS || multi_midi) { adlibMidiDriver = MidiDriver::createMidi(MidiDriver::detectDevice(_musicType == MDT_TOWNS ? MDT_TOWNS : MDT_ADLIB)); adlibMidiDriver->property(MidiDriver::PROP_OLD_ADLIB, (_game.features & GF_SMALL_HEADER) ? 1 : 0); } @@ -2056,7 +2085,7 @@ void ScummEngine::scummLoop(int delta) { // Trigger autosave if necessary. if (!_saveLoadFlag && shouldPerformAutoSave(_lastSaveTime) && canSaveGameStateCurrently()) { _saveLoadSlot = 0; - sprintf(_saveLoadName, "Autosave %d", _saveLoadSlot); + _saveLoadDescription = Common::String::format("Autosave %d", _saveLoadSlot); _saveLoadFlag = 1; _saveTemporaryState = false; } diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h index 636c909911..5700271911 100644 --- a/engines/scumm/scumm.h +++ b/engines/scumm/scumm.h @@ -44,7 +44,7 @@ #ifdef __DS__ /* This disables the dual layer mode which is used in FM-Towns versions - * of SCUMM games and which emulates the behaviour of the original code. + * of SCUMM games and which emulates the behavior of the original code. * The only purpose is code size reduction for certain backends. * SCUMM 3 (FM-Towns) games will run in normal (DOS VGA) mode, which should * work just fine in most situations. Some glitches might occur. SCUMM 5 games @@ -228,7 +228,7 @@ enum ScummGameId { GID_TENTACLE, GID_ZAK, - GID_HEGAME, // Generic name for all HE games with default behaviour + GID_HEGAME, // Generic name for all HE games with default behavior GID_PUTTDEMO, GID_FBEAR, GID_PUTTMOON, @@ -401,7 +401,7 @@ public: virtual Common::Error loadGameState(int slot); virtual bool canLoadGameStateCurrently(); - virtual Common::Error saveGameState(int slot, const char *desc); + virtual Common::Error saveGameState(int slot, const Common::String &desc); virtual bool canSaveGameStateCurrently(); virtual void pauseEngineIntern(bool pause); @@ -572,7 +572,7 @@ protected: uint32 _lastSaveTime; bool _saveTemporaryState; Common::String _saveLoadFileName; - char _saveLoadName[32]; + Common::String _saveLoadDescription; bool saveState(Common::OutSaveFile *out, bool writeHeader = true); bool saveState(int slot, bool compat); @@ -594,7 +594,7 @@ public: bool getSavegameName(int slot, Common::String &desc); void listSavegames(bool *marks, int num); - void requestSave(int slot, const char *name); + void requestSave(int slot, const Common::String &name); void requestLoad(int slot); // thumbnail + info stuff @@ -897,7 +897,7 @@ public: Common::RenderMode _renderMode; uint8 _bytesPerPixel; - uint8 _bytesPerPixelOutput; + Graphics::PixelFormat _outputPixelFormat; protected: ColorCycle _colorCycle[16]; // Palette cycles @@ -1120,7 +1120,7 @@ protected: void calcItineraryMatrix(byte *itineraryMatrix, int num); void createBoxMatrix(); - virtual bool areBoxesNeighbours(int i, int j); + virtual bool areBoxesNeighbors(int i, int j); /* String class */ public: diff --git a/engines/scumm/scumm_v0.h b/engines/scumm/scumm_v0.h index 9c492663dc..af481df0e0 100644 --- a/engines/scumm/scumm_v0.h +++ b/engines/scumm/scumm_v0.h @@ -94,7 +94,7 @@ protected: virtual void resetSentence(bool walking); - virtual bool areBoxesNeighbours(int box1nr, int box2nr); + virtual bool areBoxesNeighbors(int box1nr, int box2nr); /* Version C64 script opcodes */ void o_stopCurrentScript(); diff --git a/engines/scumm/string.cpp b/engines/scumm/string.cpp index c27b6d5e1c..4b3207c6bf 100644 --- a/engines/scumm/string.cpp +++ b/engines/scumm/string.cpp @@ -1210,7 +1210,8 @@ int ScummEngine::convertVerbMessage(byte *dst, int dstSize, int var) { num = readVar(var); if (num) { for (k = 1; k < _numVerbs; k++) { - if (num == _verbs[k].verbid && !_verbs[k].type && !_verbs[k].saveid) { + // Fix ZAK FM-TOWNS bug #1013617 by emulating exact (inconsistant?) behavior of the original code + if (num == _verbs[k].verbid && !_verbs[k].type && (!_verbs[k].saveid || (_game.version == 3 && _game.platform == Common::kPlatformFMTowns))) { const byte *ptr = getResourceAddress(rtVerb, k); return convertMessageToString(ptr, dst, dstSize); } diff --git a/engines/sky/compact.cpp b/engines/sky/compact.cpp index 66ce92f8fc..84609d5500 100644 --- a/engines/sky/compact.cpp +++ b/engines/sky/compact.cpp @@ -25,6 +25,7 @@ #include "common/endian.h" #include "common/file.h" #include "common/textconsole.h" +#include "common/translation.h" #include "sky/compact.h" #include "gui/message.h" #include <stddef.h> // for ptrdiff_t @@ -126,8 +127,8 @@ static const uint32 turnTableOffsets[] = { SkyCompact::SkyCompact() { _cptFile = new Common::File(); if (!_cptFile->open("sky.cpt")) { - GUI::MessageDialog dialog("Unable to find \"sky.cpt\" file!\n" - "Please download it from www.scummvm.org", "OK", NULL); + GUI::MessageDialog dialog(_("Unable to find \"sky.cpt\" file!\n" + "Please download it from www.scummvm.org"), _("OK"), NULL); dialog.runModal(); error("Unable to find \"sky.cpt\" file\nPlease download it from www.scummvm.org"); } @@ -137,7 +138,7 @@ SkyCompact::SkyCompact() { error("unknown \"sky.cpt\" version"); if (SKY_CPT_SIZE != _cptFile->size()) { - GUI::MessageDialog dialog("The \"sky.cpt\" file has an incorrect size.\nPlease (re)download it from www.scummvm.org", "OK", NULL); + GUI::MessageDialog dialog(_("The \"sky.cpt\" file has an incorrect size.\nPlease (re)download it from www.scummvm.org"), _("OK"), NULL); dialog.runModal(); error("Incorrect sky.cpt size (%d, expected: %d)", _cptFile->size(), SKY_CPT_SIZE); } diff --git a/engines/sky/detection.cpp b/engines/sky/detection.cpp index 6844d2eacb..f3cce06ad6 100644 --- a/engines/sky/detection.cpp +++ b/engines/sky/detection.cpp @@ -151,9 +151,7 @@ GameList SkyMetaEngine::detectGames(const Common::FSList &fslist) const { while (sv->dinnerTableEntries) { if (dinnerTableEntries == sv->dinnerTableEntries && (sv->dataDiskSize == dataDiskSize || sv->dataDiskSize == -1)) { - char buf[32]; - snprintf(buf, sizeof(buf), "v0.0%d %s", sv->version, sv->extraDesc); - dg.updateDesc(buf); + dg.updateDesc(Common::String::format("v0.0%d %s", sv->version, sv->extraDesc).c_str()); dg.setGUIOptions(sv->guioptions); break; } @@ -282,7 +280,7 @@ Common::Error SkyEngine::loadGameState(int slot) { return (result == GAME_RESTORED) ? Common::kNoError : Common::kUnknownError; } -Common::Error SkyEngine::saveGameState(int slot, const char *desc) { +Common::Error SkyEngine::saveGameState(int slot, const Common::String &desc) { if (slot == 0) return Common::kWritePermissionDenied; // we can't overwrite the auto save diff --git a/engines/sky/logic.cpp b/engines/sky/logic.cpp index de081bb631..616670b0fd 100644 --- a/engines/sky/logic.cpp +++ b/engines/sky/logic.cpp @@ -1890,7 +1890,7 @@ bool Logic::fnCheckRequest(uint32 a, uint32 b, uint32 c) { } bool Logic::fnStartMenu(uint32 firstObject, uint32 b, uint32 c) { - /// initialise the top menu bar + /// initialize the top menu bar // firstObject is o0 for game menu, k0 for linc uint i; @@ -1939,7 +1939,7 @@ bool Logic::fnStartMenu(uint32 firstObject, uint32 b, uint32 c) { else if (menuLength < _scriptVariables[SCROLL_OFFSET] + 11) _scriptVariables[SCROLL_OFFSET] = menuLength - 11; - // (6) AND FINALLY, INITIALISE THE 11 OBJECTS SO THEY APPEAR ON SCREEEN + // (6) AND FINALLY, INITIALIZE THE 11 OBJECTS SO THEY APPEAR ON SCREEEN uint16 rollingX = TOP_LEFT_X + 28; for (i = 0; i < 11; i++) { diff --git a/engines/sky/sky.h b/engines/sky/sky.h index 0b5f4c5c1c..cd8a650d60 100644 --- a/engines/sky/sky.h +++ b/engines/sky/sky.h @@ -87,7 +87,7 @@ public: static bool isCDVersion(); Common::Error loadGameState(int slot); - Common::Error saveGameState(int slot, const char *desc); + Common::Error saveGameState(int slot, const Common::String &desc); bool canLoadGameStateCurrently(); bool canSaveGameStateCurrently(); diff --git a/engines/sky/sound.cpp b/engines/sky/sound.cpp index c6bcb2a4c4..e94a2a61d9 100644 --- a/engines/sky/sound.cpp +++ b/engines/sky/sound.cpp @@ -313,7 +313,7 @@ static const Sfx fx_hello_helga = { } }; -static const Sfx fx_statue_on_armour = { +static const Sfx fx_statue_on_armor = { 8, 0, { @@ -985,7 +985,7 @@ static const Sfx *musicList[] = { &fx_null, // 365 &fx_break_crystals, // 366 &fx_disintegrate, // 367 - &fx_statue_on_armour, // 368 + &fx_statue_on_armor, // 368 &fx_null, // 369 &fx_null, // 360 &fx_ping, // 371 diff --git a/engines/sword1/animation.cpp b/engines/sword1/animation.cpp index b66cc6b5a7..cb86264eeb 100644 --- a/engines/sword1/animation.cpp +++ b/engines/sword1/animation.cpp @@ -24,6 +24,7 @@ #include "common/events.h" #include "common/keyboard.h" #include "common/textconsole.h" +#include "common/translation.h" #include "sword1/sword1.h" #include "sword1/animation.h" #include "sword1/text.h" @@ -85,7 +86,7 @@ MoviePlayer::~MoviePlayer() { */ bool MoviePlayer::load(uint32 id) { Common::File f; - char filename[20]; + Common::String filename; if (_decoderType == kVideoDecoderDXA) _bgSoundStream = Audio::SeekableAudioStream::openStreamFile(sequenceList[id]); @@ -93,7 +94,7 @@ bool MoviePlayer::load(uint32 id) { _bgSoundStream = NULL; if (SwordEngine::_systemVars.showText) { - sprintf(filename, "%s.txt", sequenceList[id]); + filename = Common::String::format("%s.txt", sequenceList[id]); if (f.open(filename)) { Common::String line; int lineNo = 0; @@ -117,12 +118,12 @@ bool MoviePlayer::load(uint32 id) { ptr++; if (startFrame > endFrame) { - warning("%s:%d: startFrame (%d) > endFrame (%d)", filename, lineNo, startFrame, endFrame); + warning("%s:%d: startFrame (%d) > endFrame (%d)", filename.c_str(), lineNo, startFrame, endFrame); continue; } if (startFrame <= lastEnd) { - warning("%s:%d startFrame (%d) <= lastEnd (%d)", filename, lineNo, startFrame, lastEnd); + warning("%s:%d startFrame (%d) <= lastEnd (%d)", filename.c_str(), lineNo, startFrame, lastEnd); continue; } @@ -135,14 +136,14 @@ bool MoviePlayer::load(uint32 id) { switch (_decoderType) { case kVideoDecoderDXA: - snprintf(filename, sizeof(filename), "%s.dxa", sequenceList[id]); + filename = Common::String::format("%s.dxa", sequenceList[id]); break; case kVideoDecoderSMK: - snprintf(filename, sizeof(filename), "%s.smk", sequenceList[id]); + filename = Common::String::format("%s.smk", sequenceList[id]); break; } - return _decoder->loadFile(filename); + return _decoder->loadFile(filename.c_str()); } void MoviePlayer::play() { @@ -323,41 +324,40 @@ uint32 DXADecoderWithSound::getElapsedTime() const { /////////////////////////////////////////////////////////////////////////////// MoviePlayer *makeMoviePlayer(uint32 id, SwordEngine *vm, Text *textMan, Audio::Mixer *snd, OSystem *system) { - char filename[20]; - char buf[60]; + Common::String filename; Audio::SoundHandle *bgSoundHandle = new Audio::SoundHandle; - snprintf(filename, sizeof(filename), "%s.smk", sequenceList[id]); + filename = Common::String::format("%s.smk", sequenceList[id]); if (Common::File::exists(filename)) { Video::SmackerDecoder *smkDecoder = new Video::SmackerDecoder(snd); return new MoviePlayer(vm, textMan, snd, system, bgSoundHandle, smkDecoder, kVideoDecoderSMK); } - snprintf(filename, sizeof(filename), "%s.dxa", sequenceList[id]); + filename = Common::String::format("%s.dxa", sequenceList[id]); if (Common::File::exists(filename)) { #ifdef USE_ZLIB DXADecoderWithSound *dxaDecoder = new DXADecoderWithSound(snd, bgSoundHandle); return new MoviePlayer(vm, textMan, snd, system, bgSoundHandle, dxaDecoder, kVideoDecoderDXA); #else - GUI::MessageDialog dialog("DXA cutscenes found but ScummVM has been built without zlib support", "OK"); + GUI::MessageDialog dialog(_("DXA cutscenes found but ScummVM has been built without zlib support"), _("OK")); dialog.runModal(); return NULL; #endif } // Old MPEG2 cutscenes - snprintf(filename, sizeof(filename), "%s.mp2", sequenceList[id]); + filename = Common::String::format("%s.mp2", sequenceList[id]); if (Common::File::exists(filename)) { - GUI::MessageDialog dialog("MPEG2 cutscenes are no longer supported", "OK"); + GUI::MessageDialog dialog(_("MPEG2 cutscenes are no longer supported"), _("OK")); dialog.runModal(); return NULL; } - sprintf(buf, "Cutscene '%s' not found", sequenceList[id]); - GUI::MessageDialog dialog(buf, "OK"); + Common::String buf = Common::String::format(_("Cutscene '%s' not found"), sequenceList[id]); + GUI::MessageDialog dialog(buf, _("OK")); dialog.runModal(); return NULL; diff --git a/engines/sword1/control.cpp b/engines/sword1/control.cpp index 86947db8ae..36d5a24e99 100644 --- a/engines/sword1/control.cpp +++ b/engines/sword1/control.cpp @@ -27,6 +27,7 @@ #include "common/system.h" #include "common/config-manager.h" #include "common/textconsole.h" +#include "common/translation.h" #include "graphics/palette.h" #include "graphics/thumbnail.h" @@ -859,9 +860,9 @@ void Control::checkForOldSaveGames() { } GUI::MessageDialog dialog0( - "ScummVM found that you have old savefiles for Broken Sword 1 that should be converted.\n" + _("ScummVM found that you have old savefiles for Broken Sword 1 that should be converted.\n" "The old save game format is no longer supported, so you will not be able to load your games if you don't convert them.\n\n" - "Press OK to convert them now, otherwise you will be asked again the next time you start the game.\n", "OK", "Cancel"); + "Press OK to convert them now, otherwise you will be asked again the next time you start the game.\n"), _("OK"), _("Cancel")); int choice = dialog0.runModal(); if (choice == GUI::kMessageCancel) { @@ -1228,11 +1229,10 @@ bool Control::convertSaveGame(uint8 slot, char* desc) { if (testSave) { delete testSave; - char msg[200]; - sprintf(msg, "Target new save game already exists!\n" - "Would you like to keep the old save game (%s) or the new one (%s)?\n", + Common::String msg = Common::String::format(_("Target new save game already exists!\n" + "Would you like to keep the old save game (%s) or the new one (%s)?\n"), oldFileName, newFileName); - GUI::MessageDialog dialog0(msg, "Keep the old one", "Keep the new one"); + GUI::MessageDialog dialog0(msg, _("Keep the old one"), _("Keep the new one")); int choice = dialog0.runModal(); if (choice == GUI::kMessageCancel) { diff --git a/engines/sword1/detection.cpp b/engines/sword1/detection.cpp index 8ffd96d308..0c1e74082f 100644 --- a/engines/sword1/detection.cpp +++ b/engines/sword1/detection.cpp @@ -33,18 +33,18 @@ #include "engines/metaengine.h" /* Broken Sword */ -static const PlainGameDescriptorGUIOpts sword1FullSettings = - {"sword1", "Broken Sword: The Shadow of the Templars", Common::GUIO_NOMIDI}; -static const PlainGameDescriptorGUIOpts sword1DemoSettings = - {"sword1demo", "Broken Sword: The Shadow of the Templars (Demo)", Common::GUIO_NOMIDI}; -static const PlainGameDescriptorGUIOpts sword1MacFullSettings = - {"sword1mac", "Broken Sword: The Shadow of the Templars (Mac)", Common::GUIO_NOMIDI}; -static const PlainGameDescriptorGUIOpts sword1MacDemoSettings = - {"sword1macdemo", "Broken Sword: The Shadow of the Templars (Mac demo)", Common::GUIO_NOMIDI}; -static const PlainGameDescriptorGUIOpts sword1PSXSettings = - {"sword1psx", "Broken Sword: The Shadow of the Templars (PlayStation)", Common::GUIO_NOMIDI}; -static const PlainGameDescriptorGUIOpts sword1PSXDemoSettings = - {"sword1psxdemo", "Broken Sword: The Shadow of the Templars (PlayStation demo)", Common::GUIO_NOMIDI}; +static const PlainGameDescriptor sword1FullSettings = + {"sword1", "Broken Sword: The Shadow of the Templars"}; +static const PlainGameDescriptor sword1DemoSettings = + {"sword1demo", "Broken Sword: The Shadow of the Templars (Demo)"}; +static const PlainGameDescriptor sword1MacFullSettings = + {"sword1mac", "Broken Sword: The Shadow of the Templars (Mac)"}; +static const PlainGameDescriptor sword1MacDemoSettings = + {"sword1macdemo", "Broken Sword: The Shadow of the Templars (Mac demo)"}; +static const PlainGameDescriptor sword1PSXSettings = + {"sword1psx", "Broken Sword: The Shadow of the Templars (PlayStation)"}; +static const PlainGameDescriptor sword1PSXDemoSettings = + {"sword1psxdemo", "Broken Sword: The Shadow of the Templars (PlayStation demo)"}; // check these subdirectories (if present) @@ -117,12 +117,12 @@ bool Sword1::SwordEngine::hasFeature(EngineFeature f) const { GameList SwordMetaEngine::getSupportedGames() const { GameList games; - games.push_back(sword1FullSettings); - games.push_back(sword1DemoSettings); - games.push_back(sword1MacFullSettings); - games.push_back(sword1MacDemoSettings); - games.push_back(sword1PSXSettings); - games.push_back(sword1PSXDemoSettings); + games.push_back(GameDescriptor(sword1FullSettings, Common::GUIO_NOMIDI)); + games.push_back(GameDescriptor(sword1DemoSettings, Common::GUIO_NOMIDI)); + games.push_back(GameDescriptor(sword1MacFullSettings, Common::GUIO_NOMIDI)); + games.push_back(GameDescriptor(sword1MacDemoSettings, Common::GUIO_NOMIDI)); + games.push_back(GameDescriptor(sword1PSXSettings, Common::GUIO_NOMIDI)); + games.push_back(GameDescriptor(sword1PSXDemoSettings, Common::GUIO_NOMIDI)); return games; } @@ -198,17 +198,17 @@ GameList SwordMetaEngine::detectGames(const Common::FSList &fslist) const { psxDemoFilesFound = false; if (mainFilesFound && pcFilesFound && demoFilesFound) - detectedGames.push_back(sword1DemoSettings); + detectedGames.push_back(GameDescriptor(sword1DemoSettings, Common::GUIO_NOMIDI)); else if (mainFilesFound && pcFilesFound && psxFilesFound) - detectedGames.push_back(sword1PSXSettings); + detectedGames.push_back(GameDescriptor(sword1PSXSettings, Common::GUIO_NOMIDI)); else if (mainFilesFound && pcFilesFound && psxDemoFilesFound) - detectedGames.push_back(sword1PSXDemoSettings); + detectedGames.push_back(GameDescriptor(sword1PSXDemoSettings, Common::GUIO_NOMIDI)); else if (mainFilesFound && pcFilesFound && !psxFilesFound) - detectedGames.push_back(sword1FullSettings); + detectedGames.push_back(GameDescriptor(sword1FullSettings, Common::GUIO_NOMIDI)); else if (mainFilesFound && macFilesFound) - detectedGames.push_back(sword1MacFullSettings); + detectedGames.push_back(GameDescriptor(sword1MacFullSettings, Common::GUIO_NOMIDI)); else if (mainFilesFound && macDemoFilesFound) - detectedGames.push_back(sword1MacDemoSettings); + detectedGames.push_back(GameDescriptor(sword1MacDemoSettings, Common::GUIO_NOMIDI)); return detectedGames; } @@ -249,15 +249,11 @@ SaveStateList SwordMetaEngine::listSaves(const char *target) const { int SwordMetaEngine::getMaximumSaveSlot() const { return 999; } void SwordMetaEngine::removeSaveState(const char *target, int slot) const { - char fileName[12]; - snprintf(fileName, 12, "sword1.%03d", slot); - - g_system->getSavefileManager()->removeSavefile(fileName); + g_system->getSavefileManager()->removeSavefile(Common::String::format("sword1.%03d", slot)); } SaveStateDescriptor SwordMetaEngine::querySaveMetaInfos(const char *target, int slot) const { - char fileName[12]; - snprintf(fileName, 12, "sword1.%03d", slot); + Common::String fileName = Common::String::format("sword1.%03d", slot); char name[40]; uint32 playTime = 0; byte versionSave; @@ -340,8 +336,8 @@ bool SwordEngine::canLoadGameStateCurrently() { return (mouseIsActive() && !_control->isPanelShown()); // Disable GMM loading when game panel is shown } -Common::Error SwordEngine::saveGameState(int slot, const char *desc) { - _control->setSaveDescription(slot, desc); +Common::Error SwordEngine::saveGameState(int slot, const Common::String &desc) { + _control->setSaveDescription(slot, desc.c_str()); _control->saveGameToFile(slot); return Common::kNoError; // TODO: return success/failure } diff --git a/engines/sword1/logic.cpp b/engines/sword1/logic.cpp index 00f7112c05..5b42c9340e 100644 --- a/engines/sword1/logic.cpp +++ b/engines/sword1/logic.cpp @@ -23,6 +23,7 @@ #include "common/endian.h" #include "common/util.h" #include "common/textconsole.h" +#include "common/translation.h" #include "sword1/logic.h" #include "sword1/text.h" @@ -1629,7 +1630,7 @@ int Logic::fnRestartGame(Object *cpt, int32 id, int32 a, int32 b, int32 c, int32 int Logic::fnQuitGame(Object *cpt, int32 id, int32 a, int32 b, int32 c, int32 d, int32 z, int32 x) { if (SwordEngine::_systemVars.isDemo) { - GUI::MessageDialog dialog("This is the end of the Broken Sword 1 Demo", "OK", NULL); + GUI::MessageDialog dialog(_("This is the end of the Broken Sword 1 Demo"), _("OK"), NULL); dialog.runModal(); Engine::quitGame(); } else diff --git a/engines/sword1/music.cpp b/engines/sword1/music.cpp index a291d80f85..b4656ff89f 100644 --- a/engines/sword1/music.cpp +++ b/engines/sword1/music.cpp @@ -47,68 +47,65 @@ namespace Sword1 { // These functions are only called from Music, so I'm just going to // assume that if locking is needed it has already been taken care of. -bool MusicHandle::play(const char *fileBase, bool loop) { - char fileName[30]; +bool MusicHandle::play(const Common::String &filename, bool loop) { stop(); // FIXME: How about using AudioStream::openStreamFile instead of the code below? // I.e.: //_audioSource = Audio::AudioStream::openStreamFile(fileBase, 0, 0, loop ? 0 : 1); + Audio::RewindableAudioStream *stream = 0; + #ifdef USE_FLAC - if (!_audioSource) { - sprintf(fileName, "%s.flac", fileBase); - if (_file.open(fileName)) { - _audioSource = Audio::makeLoopingAudioStream(Audio::makeFLACStream(&_file, DisposeAfterUse::NO), loop ? 0 : 1); - if (!_audioSource) + if (!stream) { + if (_file.open(filename + ".flac")) { + stream = Audio::makeFLACStream(&_file, DisposeAfterUse::NO); + if (!stream) _file.close(); } } - if (!_audioSource) { - sprintf(fileName, "%s.fla", fileBase); - if (_file.open(fileName)) { - _audioSource = Audio::makeLoopingAudioStream(Audio::makeFLACStream(&_file, DisposeAfterUse::NO), loop ? 0 : 1); - if (!_audioSource) + if (!stream) { + if (_file.open(filename + ".fla")) { + stream = Audio::makeFLACStream(&_file, DisposeAfterUse::NO); + if (!stream) _file.close(); } } #endif #ifdef USE_VORBIS - if (!_audioSource) { - sprintf(fileName, "%s.ogg", fileBase); - if (_file.open(fileName)) { - _audioSource = Audio::makeLoopingAudioStream(Audio::makeVorbisStream(&_file, DisposeAfterUse::NO), loop ? 0 : 1); - if (!_audioSource) + if (!stream) { + if (_file.open(filename + ".ogg")) { + stream = Audio::makeVorbisStream(&_file, DisposeAfterUse::NO); + if (!stream) _file.close(); } } #endif #ifdef USE_MAD - if (!_audioSource) { - sprintf(fileName, "%s.mp3", fileBase); - if (_file.open(fileName)) { - _audioSource = Audio::makeLoopingAudioStream(Audio::makeMP3Stream(&_file, DisposeAfterUse::NO), loop ? 0 : 1); - if (!_audioSource) + if (!stream) { + if (_file.open(filename + ".mp3")) { + stream = Audio::makeMP3Stream(&_file, DisposeAfterUse::NO); + if (!stream) _file.close(); } } #endif - if (!_audioSource) { - sprintf(fileName, "%s.wav", fileBase); - if (_file.open(fileName)) - _audioSource = Audio::makeLoopingAudioStream(Audio::makeWAVStream(&_file, DisposeAfterUse::NO), loop ? 0 : 1); + if (!stream) { + if (_file.open(filename + ".wav")) + stream = Audio::makeWAVStream(&_file, DisposeAfterUse::NO); } - if (!_audioSource) { - sprintf(fileName, "%s.aif", fileBase); - if (_file.open(fileName)) - _audioSource = Audio::makeLoopingAudioStream(Audio::makeAIFFStream(&_file, DisposeAfterUse::NO), loop ? 0 : 1); + if (!stream) { + if (_file.open(filename + ".aif")) + stream = Audio::makeAIFFStream(&_file, DisposeAfterUse::NO); } - if (!_audioSource) + if (!stream) return false; + _audioSource = Audio::makeLoopingAudioStream(stream, loop ? 0 : 1); + fadeUp(); return true; } @@ -219,12 +216,9 @@ int MusicHandle::readBuffer(int16 *buffer, const int numSamples) { } void MusicHandle::stop() { - if (_audioSource) { - delete _audioSource; - _audioSource = NULL; - } - if (_file.isOpen()) - _file.close(); + delete _audioSource; + _audioSource = NULL; + _file.close(); _fading = 0; } diff --git a/engines/sword1/music.h b/engines/sword1/music.h index 104bc1c536..4207019c13 100644 --- a/engines/sword1/music.h +++ b/engines/sword1/music.h @@ -43,7 +43,7 @@ private: public: MusicHandle() : _fading(0), _audioSource(NULL) {} virtual int readBuffer(int16 *buffer, const int numSamples); - bool play(const char *filename, bool loop); + bool play(const Common::String &filename, bool loop); bool playPSX(uint16 id, bool loop); void stop(); void fadeUp(); diff --git a/engines/sword1/router.cpp b/engines/sword1/router.cpp index e3b6ab3343..aaf475912d 100644 --- a/engines/sword1/router.cpp +++ b/engines/sword1/router.cpp @@ -261,7 +261,7 @@ int32 Router::getRoute() { // of a line // scan through the nodes linking each node to its nearest - // neighbour until no more nodes change + // neighbor until no more nodes change // This is the routine that finds a route using scan() diff --git a/engines/sword1/sword1.h b/engines/sword1/sword1.h index c83cb76461..2d6db21d19 100644 --- a/engines/sword1/sword1.h +++ b/engines/sword1/sword1.h @@ -110,7 +110,7 @@ protected: Common::Error loadGameState(int slot); bool canLoadGameStateCurrently(); - Common::Error saveGameState(int slot, const char *desc); + Common::Error saveGameState(int slot, const Common::String &desc); bool canSaveGameStateCurrently(); private: diff --git a/engines/sword1/sworddefs.h b/engines/sword1/sworddefs.h index 460b4dd2d1..15736dcae0 100644 --- a/engines/sword1/sworddefs.h +++ b/engines/sword1/sworddefs.h @@ -499,7 +499,7 @@ enum ScriptVariableNames { CASE_2_LOCKED_FLAG, CASE_3_LOCKED_FLAG, CASE_4_LOCKED_FLAG, - SEEN_ARMOUR_28_FLAG, + SEEN_ARMOR_28_FLAG, CLOSED_WINDOW_28_FLAG, WINDOW_28_FLAG, WINDOW_DRAUGHT_FLAG, @@ -1405,7 +1405,7 @@ enum ScriptVariableNames { SEEN_STATUE_FLAG, SYRIA_DEAD_FLAG, SYRIA_NICHE_FLAG, - ARMOUR_HIDE_FLAG, + ARMOR_HIDE_FLAG, CANDLE59_FLAG, CANDLE_BURNT, CHALICE_FLAG, diff --git a/engines/sword2/animation.cpp b/engines/sword2/animation.cpp index 5c5ff6c7ee..133abf165e 100644 --- a/engines/sword2/animation.cpp +++ b/engines/sword2/animation.cpp @@ -26,6 +26,7 @@ #include "common/mutex.h" #include "common/system.h" #include "common/textconsole.h" +#include "common/translation.h" #include "sword2/sword2.h" #include "sword2/defs.h" @@ -72,17 +73,17 @@ bool MoviePlayer::load(const char *name) { _textSurface = NULL; - char filename[20]; + Common::String filename; switch (_decoderType) { case kVideoDecoderDXA: - snprintf(filename, sizeof(filename), "%s.dxa", name); + filename = Common::String::format("%s.dxa", name); break; case kVideoDecoderSMK: - snprintf(filename, sizeof(filename), "%s.smk", name); + filename = Common::String::format("%s.smk", name); break; } - return _decoder->loadFile(filename); + return _decoder->loadFile(filename.c_str()); } void MoviePlayer::play(MovieText *movieTexts, uint32 numMovieTexts, uint32 leadIn, uint32 leadOut) { @@ -358,35 +359,34 @@ uint32 DXADecoderWithSound::getElapsedTime() const { /////////////////////////////////////////////////////////////////////////////// MoviePlayer *makeMoviePlayer(const char *name, Sword2Engine *vm, Audio::Mixer *snd, OSystem *system) { - char filename[20]; - char buf[60]; + Common::String filename; Audio::SoundHandle *bgSoundHandle = new Audio::SoundHandle; - snprintf(filename, sizeof(filename), "%s.smk", name); + filename = Common::String::format("%s.smk", name); if (Common::File::exists(filename)) { Video::SmackerDecoder *smkDecoder = new Video::SmackerDecoder(snd); return new MoviePlayer(vm, snd, system, bgSoundHandle, smkDecoder, kVideoDecoderSMK); } - snprintf(filename, sizeof(filename), "%s.dxa", name); + filename = Common::String::format("%s.dxa", name); if (Common::File::exists(filename)) { #ifdef USE_ZLIB DXADecoderWithSound *dxaDecoder = new DXADecoderWithSound(snd, bgSoundHandle); return new MoviePlayer(vm, snd, system, bgSoundHandle, dxaDecoder, kVideoDecoderDXA); #else - GUI::MessageDialog dialog("DXA cutscenes found but ScummVM has been built without zlib support", "OK"); + GUI::MessageDialog dialog(_("DXA cutscenes found but ScummVM has been built without zlib support"), _("OK")); dialog.runModal(); return NULL; #endif } // Old MPEG2 cutscenes - snprintf(filename, sizeof(filename), "%s.mp2", name); + filename = Common::String::format("%s.mp2", name); if (Common::File::exists(filename)) { - GUI::MessageDialog dialog("MPEG2 cutscenes are no longer supported", "OK"); + GUI::MessageDialog dialog(_("MPEG2 cutscenes are no longer supported"), _("OK")); dialog.runModal(); return NULL; } @@ -394,8 +394,8 @@ MoviePlayer *makeMoviePlayer(const char *name, Sword2Engine *vm, Audio::Mixer *s // The demo tries to play some cutscenes that aren't there, so make those warnings more discreet. // In addition, some of the later re-releases of the game don't have the "eye" Virgin logo movie. if (!vm->_logic->readVar(DEMO) && strcmp(name, "eye") != 0) { - sprintf(buf, "Cutscene '%s' not found", name); - GUI::MessageDialog dialog(buf, "OK"); + Common::String buf = Common::String::format(_("Cutscene '%s' not found"), name); + GUI::MessageDialog dialog(buf, _("OK")); dialog.runModal(); } else warning("Cutscene '%s' not found", name); diff --git a/engines/sword2/console.cpp b/engines/sword2/console.cpp index 8d95670308..957b2431e0 100644 --- a/engines/sword2/console.cpp +++ b/engines/sword2/console.cpp @@ -779,19 +779,19 @@ bool Debugger::Cmd_Sfx(int argc, const char **argv) { } bool Debugger::Cmd_English(int argc, const char **argv) { - _vm->initialiseFontResourceFlags(DEFAULT_TEXT); + _vm->initializeFontResourceFlags(DEFAULT_TEXT); DebugPrintf("Default fonts selected\n"); return true; } bool Debugger::Cmd_Finnish(int argc, const char **argv) { - _vm->initialiseFontResourceFlags(FINNISH_TEXT); + _vm->initializeFontResourceFlags(FINNISH_TEXT); DebugPrintf("Finnish fonts selected\n"); return true; } bool Debugger::Cmd_Polish(int argc, const char **argv) { - _vm->initialiseFontResourceFlags(POLISH_TEXT); + _vm->initializeFontResourceFlags(POLISH_TEXT); DebugPrintf("Polish fonts selected\n"); return true; } diff --git a/engines/sword2/controls.cpp b/engines/sword2/controls.cpp index d37edf3082..6ce447a4cc 100644 --- a/engines/sword2/controls.cpp +++ b/engines/sword2/controls.cpp @@ -618,7 +618,7 @@ public: // The sound mute switches have 0 as their "down" state and 1 as // their "up" state, so this function is needed to get consistent - // behaviour. + // behavior. void reverseStates() { _upState = 1; diff --git a/engines/sword2/icons.cpp b/engines/sword2/icons.cpp index f179f3c899..a555e63449 100644 --- a/engines/sword2/icons.cpp +++ b/engines/sword2/icons.cpp @@ -147,7 +147,7 @@ void Mouse::buildMenu() { } } - // Initialise the menu from the master list. + // Initialize the menu from the master list. for (i = 0; i < 15; i++) { uint32 res = _masterMenuList[i].icon_resource; diff --git a/engines/sword2/interpreter.cpp b/engines/sword2/interpreter.cpp index 7f340df171..e7fb979d69 100644 --- a/engines/sword2/interpreter.cpp +++ b/engines/sword2/interpreter.cpp @@ -264,7 +264,7 @@ int Logic::runScript2(byte *scriptData, byte *objectData, byte *offsetPtr) { // int32_TYPE 1 numberOfScripts // int32_TYPE numberOfScripts The offsets for each script - // Initialise some stuff + // Initialize some stuff uint32 ip = 0; // Code pointer int scriptNumber; @@ -374,7 +374,7 @@ int Logic::runScript2(byte *scriptData, byte *objectData, byte *offsetPtr) { // sets variable 913 to 1 (probably to stop him from // turning around every now and then). The script may // then go on to set the variable to different values - // to trigger various behaviours in him, but if you + // to trigger various behaviors in him, but if you // have run out of these cases the script won't ever // set it back to 0 again. // @@ -614,7 +614,7 @@ int Logic::runScript2(byte *scriptData, byte *objectData, byte *offsetPtr) { // The scripts do not always call the mcode command // with as many parameters as it can accept. To keep - // things predictable, initialise the remaining + // things predictable, initialize the remaining // parameters to 0. for (i = STACK_SIZE - 1; i >= value; i--) { diff --git a/engines/sword2/layers.cpp b/engines/sword2/layers.cpp index ad65336c0f..b13006cd70 100644 --- a/engines/sword2/layers.cpp +++ b/engines/sword2/layers.cpp @@ -22,7 +22,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -// high level layer initialising +// high level layer initializing // the system supports: // 1 optional background parallax layer @@ -97,7 +97,7 @@ void Screen::initBackground(int32 res, int32 new_palette) { debug(2, "layers=%d width=%d depth=%d", screen_head.noLayers, screen_head.width, screen_head.height); - // initialise the driver back buffer + // initialize the driver back buffer setLocationMetrics(screen_head.width, screen_head.height); for (i = 0; i < screen_head.noLayers; i++) { @@ -180,22 +180,22 @@ void Screen::initBackground(int32 res, int32 new_palette) { for (i = 0; i < 2; i++) { if (screenLayerTable.bg_parallax[i]) - initialiseBackgroundLayer(_vm->fetchBackgroundParallaxLayer(file, i)); + initializeBackgroundLayer(_vm->fetchBackgroundParallaxLayer(file, i)); else - initialiseBackgroundLayer(NULL); + initializeBackgroundLayer(NULL); } // Normal backround layer - initialiseBackgroundLayer(_vm->fetchBackgroundLayer(file)); + initializeBackgroundLayer(_vm->fetchBackgroundLayer(file)); // Foreground parallax layers for (i = 0; i < 2; i++) { if (screenLayerTable.fg_parallax[i]) - initialiseBackgroundLayer(_vm->fetchForegroundParallaxLayer(file, i)); + initializeBackgroundLayer(_vm->fetchForegroundParallaxLayer(file, i)); else - initialiseBackgroundLayer(NULL); + initializeBackgroundLayer(NULL); } _vm->_resman->closeResource(_thisScreen.background_layer_id); @@ -243,7 +243,7 @@ void Screen::initPsxBackground(int32 res, int32 new_palette) { debug(2, "layers=%d width=%d depth=%d", screen_head.noLayers, screen_head.width, screen_head.height); - // initialise the driver back buffer + // initialize the driver back buffer setLocationMetrics(screen_head.width, screen_head.height); for (i = 0; i < screen_head.noLayers; i++) { @@ -279,15 +279,15 @@ void Screen::initPsxBackground(int32 res, int32 new_palette) { _thisScreen.feet_y = 340; // Background parallax layers - initialisePsxParallaxLayer(_vm->fetchBackgroundParallaxLayer(file, 0)); - initialisePsxParallaxLayer(NULL); + initializePsxParallaxLayer(_vm->fetchBackgroundParallaxLayer(file, 0)); + initializePsxParallaxLayer(NULL); // Normal backround layer - initialisePsxBackgroundLayer(_vm->fetchBackgroundLayer(file)); + initializePsxBackgroundLayer(_vm->fetchBackgroundLayer(file)); // Foreground parallax layers - initialisePsxParallaxLayer(_vm->fetchForegroundParallaxLayer(file, 1)); - initialisePsxParallaxLayer(NULL); + initializePsxParallaxLayer(_vm->fetchForegroundParallaxLayer(file, 1)); + initializePsxParallaxLayer(NULL); _vm->_resman->closeResource(_thisScreen.background_layer_id); diff --git a/engines/sword2/maketext.cpp b/engines/sword2/maketext.cpp index dc88f6e68e..e279284d76 100644 --- a/engines/sword2/maketext.cpp +++ b/engines/sword2/maketext.cpp @@ -112,7 +112,7 @@ byte *FontRenderer::makeTextSprite(byte *sentence, uint16 maxWidth, uint8 pen, u // Get details of sentence breakdown into array of LineInfo structures // and get the number of lines involved - uint16 noOfLines = analyseSentence(sentence, maxWidth, fontRes, (LineInfo *)line); + uint16 noOfLines = analyzeSentence(sentence, maxWidth, fontRes, (LineInfo *)line); // Construct the sprite based on the info gathered - returns floating // mem block @@ -123,7 +123,7 @@ byte *FontRenderer::makeTextSprite(byte *sentence, uint16 maxWidth, uint8 pen, u return textSprite; } -uint16 FontRenderer::analyseSentence(byte *sentence, uint16 maxWidth, uint32 fontRes, LineInfo *line) { +uint16 FontRenderer::analyzeSentence(byte *sentence, uint16 maxWidth, uint32 fontRes, LineInfo *line) { // joinWidth = how much extra space is needed to append a word to a // line. NB. SPACE requires TWICE the '_charSpacing' to join a word // to line @@ -199,7 +199,7 @@ uint16 FontRenderer::analyseSentence(byte *sentence, uint16 maxWidth, uint32 fon * @param sentence pointer to a null-terminated string * @param fontRes the font resource id * @param pen the text color, or zero to use the source colors - * @param line array of LineInfo structures, created by analyseSentence() + * @param line array of LineInfo structures, created by analyzeSentence() * @param noOfLines the number of lines, i.e. the number of elements in 'line' * @return a handle to a floating memory block containing the text sprite * @note The sentence must contain no leading, trailing or extra spaces. @@ -636,7 +636,7 @@ void FontRenderer::killTextBloc(uint32 bloc_number) { #define SAVE_LINE_NO 1 -void Sword2Engine::initialiseFontResourceFlags() { +void Sword2Engine::initializeFontResourceFlags() { byte *textFile = _resman->openResource(TEXT_RES); // If language is Polish or Finnish it requires alternate fonts. @@ -649,11 +649,11 @@ void Sword2Engine::initialiseFontResourceFlags() { char *textLine = (char *)fetchTextLine(textFile, SAVE_LINE_NO) + 2; if (strcmp(textLine, "tallenna") == 0) - initialiseFontResourceFlags(FINNISH_TEXT); + initializeFontResourceFlags(FINNISH_TEXT); else if (strcmp(textLine, "zapisz") == 0) - initialiseFontResourceFlags(POLISH_TEXT); + initializeFontResourceFlags(POLISH_TEXT); else - initialiseFontResourceFlags(DEFAULT_TEXT); + initializeFontResourceFlags(DEFAULT_TEXT); // Get the game name for the windows application @@ -677,10 +677,10 @@ void Sword2Engine::initialiseFontResourceFlags() { } /** - * Called from initialiseFontResourceFlags(), and also from console.cpp + * Called from initializeFontResourceFlags(), and also from console.cpp */ -void Sword2Engine::initialiseFontResourceFlags(uint8 language) { +void Sword2Engine::initializeFontResourceFlags(uint8 language) { switch (language) { case FINNISH_TEXT: _speechFontId = FINNISH_SPEECH_FONT_ID; diff --git a/engines/sword2/maketext.h b/engines/sword2/maketext.h index db5833ac55..726c23a5f9 100644 --- a/engines/sword2/maketext.h +++ b/engines/sword2/maketext.h @@ -91,7 +91,7 @@ private: // each line - negative for overlap uint8 _borderPen; // output pen color of character borders - uint16 analyseSentence(byte *sentence, uint16 maxWidth, uint32 fontRes, LineInfo *line); + uint16 analyzeSentence(byte *sentence, uint16 maxWidth, uint32 fontRes, LineInfo *line); byte *buildTextSprite(byte *sentence, uint32 fontRes, uint8 pen, LineInfo *line, uint16 noOfLines); uint16 charWidth(byte ch, uint32 fontRes); uint16 charHeight(uint32 fontRes); diff --git a/engines/sword2/render.cpp b/engines/sword2/render.cpp index e3bce7d27f..1e068d6061 100644 --- a/engines/sword2/render.cpp +++ b/engines/sword2/render.cpp @@ -342,10 +342,10 @@ void Screen::renderParallax(byte *ptr, int16 l) { #define LIMIT_FRAME_RATE /** - * Initialises the timers before the render loop is entered. + * Initializes the timers before the render loop is entered. */ -void Screen::initialiseRenderCycle() { +void Screen::initializeRenderCycle() { _initialTime = _vm->_system->getMillis(); _totalTime = _initialTime + (1000 / _vm->getFramesPerSecond()); } @@ -399,7 +399,7 @@ bool Screen::endRenderCycle() { renderCountIndex = 0; if (_renderTooSlow) { - initialiseRenderCycle(); + initializeRenderCycle(); return true; } @@ -461,13 +461,13 @@ void Screen::resetRenderEngine() { * or a NULL pointer in order of background parallax to foreground parallax. */ -int32 Screen::initialiseBackgroundLayer(byte *parallax) { +int32 Screen::initializeBackgroundLayer(byte *parallax) { Parallax p; uint16 i, j, k; byte *data; byte *dst; - debug(2, "initialiseBackgroundLayer"); + debug(2, "initializeBackgroundLayer"); assert(_layer < MAXLAYERS); @@ -588,14 +588,14 @@ int32 Screen::initialiseBackgroundLayer(byte *parallax) { * ratio correction), while PC backgrounds are in tiles of 64x64. */ -int32 Screen::initialisePsxBackgroundLayer(byte *parallax) { +int32 Screen::initializePsxBackgroundLayer(byte *parallax) { uint16 bgXres, bgYres; uint16 trueXres, stripeNumber, totStripes; uint32 baseAddress, stripePos; uint16 i, j; byte *dst; - debug(2, "initialisePsxBackgroundLayer"); + debug(2, "initializePsxBackgroundLayer"); assert(_layer < MAXLAYERS); @@ -698,14 +698,14 @@ int32 Screen::initialisePsxBackgroundLayer(byte *parallax) { * can be understood by renderParallax functions. */ -int32 Screen::initialisePsxParallaxLayer(byte *parallax) { +int32 Screen::initializePsxParallaxLayer(byte *parallax) { uint16 plxXres, plxYres; uint16 xTiles, yTiles; uint16 i, j, k; byte *data; byte *dst; - debug(2, "initialisePsxParallaxLayer"); + debug(2, "initializePsxParallaxLayer"); assert(_layer < MAXLAYERS); diff --git a/engines/sword2/router.cpp b/engines/sword2/router.cpp index fa5a677b86..d3f274dd2c 100644 --- a/engines/sword2/router.cpp +++ b/engines/sword2/router.cpp @@ -320,7 +320,7 @@ int32 Router::getRoute() { // of a line // scan through the nodes linking each node to its nearest - // neighbour until no more nodes change + // neighbor until no more nodes change // This is the routine that finds a route using scan() diff --git a/engines/sword2/router.h b/engines/sword2/router.h index ec711bcc40..7196ea8df4 100644 --- a/engines/sword2/router.h +++ b/engines/sword2/router.h @@ -26,7 +26,7 @@ #define SWORD2_ROUTER_H // This used to be a variable, but it was never set. Actually, it wasn't even -// initialised! +// initialized! // // Define this to force the use of slidy router (so solid path not used when // ending walk in ANY direction) diff --git a/engines/sword2/saveload.cpp b/engines/sword2/saveload.cpp index 870170e378..34f99923f7 100644 --- a/engines/sword2/saveload.cpp +++ b/engines/sword2/saveload.cpp @@ -49,11 +49,8 @@ namespace Sword2 { -char *Sword2Engine::getSaveFileName(uint16 slotNo) { - static char buf[128]; - - snprintf(buf, sizeof(buf), "%s.%.3d", _targetName.c_str(), slotNo); - return buf; +Common::String Sword2Engine::getSaveFileName(uint16 slotNo) { + return Common::String::format("%s.%.3d", _targetName.c_str(), slotNo); } /** @@ -128,7 +125,7 @@ uint32 Sword2Engine::saveGame(uint16 slotNo, const byte *desc) { } uint32 Sword2Engine::saveData(uint16 slotNo, byte *buffer, uint32 bufferSize) { - char *saveFileName = getSaveFileName(slotNo); + Common::String saveFileName = getSaveFileName(slotNo); Common::OutSaveFile *out; @@ -206,7 +203,7 @@ uint32 Sword2Engine::restoreGame(uint16 slotNo) { } uint32 Sword2Engine::restoreData(uint16 slotNo, byte *buffer, uint32 bufferSize) { - char *saveFileName = getSaveFileName(slotNo); + Common::String saveFileName = getSaveFileName(slotNo); Common::InSaveFile *in; @@ -371,7 +368,7 @@ uint32 Sword2Engine::restoreFromBuffer(byte *buffer, uint32 size) { */ uint32 Sword2Engine::getSaveDescription(uint16 slotNo, byte *description) { - char *saveFileName = getSaveFileName(slotNo); + Common::String saveFileName = getSaveFileName(slotNo); Common::InSaveFile *in; @@ -394,7 +391,7 @@ bool Sword2Engine::saveExists() { } bool Sword2Engine::saveExists(uint16 slotNo) { - char *saveFileName = getSaveFileName(slotNo); + Common::String saveFileName = getSaveFileName(slotNo); Common::InSaveFile *in; if (!(in = _saveFileMan->openForLoading(saveFileName))) { diff --git a/engines/sword2/screen.cpp b/engines/sword2/screen.cpp index cae719c1d4..0cb951fdfc 100644 --- a/engines/sword2/screen.cpp +++ b/engines/sword2/screen.cpp @@ -61,11 +61,11 @@ Screen::Screen(Sword2Engine *vm, int16 width, int16 height) { _dirtyGrid = (byte *)calloc(_gridWide, _gridDeep); if (!_dirtyGrid) - error("Could not initialise dirty grid"); + error("Could not initialize dirty grid"); _buffer = (byte *)malloc(width * height); if (!_buffer) - error("Could not initialise display"); + error("Could not initialize display"); for (int i = 0; i < ARRAYSIZE(_blockSurfaces); i++) _blockSurfaces[i] = NULL; @@ -1225,11 +1225,11 @@ void Screen::rollCredits() { void Screen::splashScreen() { byte *bgfile = _vm->_resman->openResource(2950); - initialiseBackgroundLayer(NULL); - initialiseBackgroundLayer(NULL); - initialiseBackgroundLayer(_vm->fetchBackgroundLayer(bgfile)); - initialiseBackgroundLayer(NULL); - initialiseBackgroundLayer(NULL); + initializeBackgroundLayer(NULL); + initializeBackgroundLayer(NULL); + initializeBackgroundLayer(_vm->fetchBackgroundLayer(bgfile)); + initializeBackgroundLayer(NULL); + initializeBackgroundLayer(NULL); _vm->fetchPalette(bgfile, _palette); setPalette(0, 256, _palette, RDPAL_FADE); diff --git a/engines/sword2/screen.h b/engines/sword2/screen.h index 2d15692299..11e323d0a7 100644 --- a/engines/sword2/screen.h +++ b/engines/sword2/screen.h @@ -390,12 +390,12 @@ public: void resetRenderLists(); void setLocationMetrics(uint16 w, uint16 h); - int32 initialiseBackgroundLayer(byte *parallax); - int32 initialisePsxParallaxLayer(byte *parallax); // These are used to initialize psx backgrounds and - int32 initialisePsxBackgroundLayer(byte *parallax); // parallaxes, which are different from pc counterparts. + int32 initializeBackgroundLayer(byte *parallax); + int32 initializePsxParallaxLayer(byte *parallax); // These are used to initialize psx backgrounds and + int32 initializePsxBackgroundLayer(byte *parallax); // parallaxes, which are different from pc counterparts. void closeBackgroundLayer(); - void initialiseRenderCycle(); + void initializeRenderCycle(); void initBackground(int32 res, int32 new_palette); void initPsxBackground(int32 res, int32 new_palette); diff --git a/engines/sword2/sword2.cpp b/engines/sword2/sword2.cpp index bc34e15236..87c7c12ad6 100644 --- a/engines/sword2/sword2.cpp +++ b/engines/sword2/sword2.cpp @@ -210,11 +210,8 @@ SaveStateList Sword2MetaEngine::listSaves(const char *target) const { int Sword2MetaEngine::getMaximumSaveSlot() const { return 999; } void Sword2MetaEngine::removeSaveState(const char *target, int slot) const { - char extension[6]; - snprintf(extension, sizeof(extension), ".%03d", slot); - Common::String filename = target; - filename += extension; + filename += Common::String::format(".%03d", slot); g_system->getSavefileManager()->removeSavefile(filename); } @@ -425,7 +422,7 @@ Common::Error Sword2Engine::run() { setInputEventFilter(RD_LEFTBUTTONUP | RD_RIGHTBUTTONUP | RD_WHEELUP | RD_WHEELDOWN); setupPersistentResources(); - initialiseFontResourceFlags(); + initializeFontResourceFlags(); if (_features & GF_DEMO) _logic->writeVar(DEMO, 1); @@ -463,7 +460,7 @@ Common::Error Sword2Engine::run() { } else startGame(); - _screen->initialiseRenderCycle(); + _screen->initializeRenderCycle(); while (1) { _debugger->onFrame(); @@ -776,8 +773,8 @@ uint32 Sword2Engine::getMillis() { return _system->getMillis(); } -Common::Error Sword2Engine::saveGameState(int slot, const char *desc) { - uint32 saveVal = saveGame(slot, (const byte *)desc); +Common::Error Sword2Engine::saveGameState(int slot, const Common::String &desc) { + uint32 saveVal = saveGame(slot, (const byte *)desc.c_str()); if (saveVal == SR_OK) return Common::kNoError; diff --git a/engines/sword2/sword2.h b/engines/sword2/sword2.h index 27cbd9e49d..ef5c2b215e 100644 --- a/engines/sword2/sword2.h +++ b/engines/sword2/sword2.h @@ -164,7 +164,7 @@ public: void setSubtitles(bool b) { _useSubtitles = b; } // GMM Loading/Saving - Common::Error saveGameState(int slot, const char *desc); + Common::Error saveGameState(int slot, const Common::String &desc); bool canSaveGameStateCurrently(); Common::Error loadGameState(int slot); bool canLoadGameStateCurrently(); @@ -224,7 +224,7 @@ public: bool saveExists(); bool saveExists(uint16 slotNo); uint32 restoreFromBuffer(byte *buffer, uint32 size); - char *getSaveFileName(uint16 slotNo); + Common::String getSaveFileName(uint16 slotNo); uint32 findBufferSize(); void startGame(); @@ -233,8 +233,8 @@ public: void sleepUntil(uint32 time); - void initialiseFontResourceFlags(); - void initialiseFontResourceFlags(uint8 language); + void initializeFontResourceFlags(); + void initializeFontResourceFlags(uint8 language); bool initStartMenu(); void registerStartPoint(int32 key, char *name); diff --git a/engines/sword25/detection.cpp b/engines/sword25/detection.cpp index edb8c30545..b2f5795663 100644 --- a/engines/sword25/detection.cpp +++ b/engines/sword25/detection.cpp @@ -31,7 +31,7 @@ namespace Sword25 { uint32 Sword25Engine::getGameFlags() const { return _gameDescription->flags; } } -static const PlainGameDescriptor Sword25Game[] = { +static const PlainGameDescriptor sword25Game[] = { {"sword25", "Broken Sword 2.5"}, {0, 0} }; @@ -41,35 +41,13 @@ static const char *directoryGlobs[] = { 0 }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Sword25::gameDescriptions, - // Size of that superset structure - sizeof(ADGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - Sword25Game, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - NULL, - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NOMIDI, - // Maximum directory depth - 2, - // List of directory globs - directoryGlobs -}; - class Sword25MetaEngine : public AdvancedMetaEngine { public: - Sword25MetaEngine() : AdvancedMetaEngine(detectionParams) {} - + Sword25MetaEngine() : AdvancedMetaEngine(Sword25::gameDescriptions, sizeof(ADGameDescription), sword25Game) { + _guioptions = Common::GUIO_NOMIDI; + _maxScanDepth = 2; + _directoryGlobs = directoryGlobs; + } virtual const char *getName() const { return "Sword25"; } diff --git a/engines/sword25/detection_tables.h b/engines/sword25/detection_tables.h index ca586b4f01..fe9e6e7934 100644 --- a/engines/sword25/detection_tables.h +++ b/engines/sword25/detection_tables.h @@ -34,7 +34,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588), Common::EN_ANY, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, { @@ -43,7 +43,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_fr.b25c", "690caf157387e06d2c3d1ca53c43f428", 1006043), Common::FR_FRA, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, { @@ -52,7 +52,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("data.b25c", "f8b6e03ada2d2f6cf27fbc11ad1572e9", 654310588), Common::DE_DEU, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, { @@ -61,7 +61,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_hr.b25c", "e881054d1f8ec1e527422fc521c25405", 1273217), Common::HU_HUN, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, { @@ -70,7 +70,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_it.b25c", "f3325666da0515cc2b42062e953c0889", 996197), Common::IT_ITA, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, { @@ -79,7 +79,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_pl.b25c", "49dc1a20f95391a808e475c49be2bac0", 1281799), Common::PL_POL, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, { @@ -88,7 +88,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_pt.b25c", "1df701432f9e13dcefe1adeb890b9c69", 993812), Common::PT_BRA, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, { @@ -97,7 +97,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_ru.b25c", "deb33dd2f90a71ff60181918a8ce5063", 1235378), Common::RU_RUS, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, { @@ -106,7 +106,7 @@ static const ADGameDescription gameDescriptions[] = { AD_ENTRY1s("lang_es.b25c", "384c19072d83725f351bb9ecb4d3f02b", 987965), Common::ES_ESP, Common::kPlatformUnknown, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, @@ -120,7 +120,7 @@ static const ADGameDescription gameDescriptions[] = { AD_LISTEND}, Common::EN_ANY, Common::kPlatformUnknown, - GF_EXTRACTED, + GF_EXTRACTED | ADGF_UNSTABLE, Common::GUIO_NONE }, AD_TABLE_END_MARKER diff --git a/engines/sword25/fmv/theora_decoder.cpp b/engines/sword25/fmv/theora_decoder.cpp index be6d940d23..098bd2c6b9 100644 --- a/engines/sword25/fmv/theora_decoder.cpp +++ b/engines/sword25/fmv/theora_decoder.cpp @@ -479,12 +479,6 @@ void TheoraDecoder::reset() { if (_fileStream) _fileStream->seek(0); -#if ENABLE_THEORA_SEEKING - _videobufGranulePos = -1; - _audiobufGranulePos = 0; - _videobufTime = 0; -#endif - _audiobufFill = 0; _audiobufReady = false; diff --git a/engines/sword25/gfx/animationresource.cpp b/engines/sword25/gfx/animationresource.cpp index a9c9cf9c29..b9d70cf87b 100644 --- a/engines/sword25/gfx/animationresource.cpp +++ b/engines/sword25/gfx/animationresource.cpp @@ -38,11 +38,11 @@ namespace Sword25 { -namespace { -const int DEFAULT_FPS = 10; -const int MIN_FPS = 1; -const int MAX_FPS = 200; -} +enum { + DEFAULT_FPS = 10, + MIN_FPS = 1, + MAX_FPS = 200 +}; AnimationResource::AnimationResource(const Common::String &filename) : Resource(filename, Resource::TYPE_ANIMATION), @@ -112,8 +112,8 @@ bool AnimationResource::parseBooleanKey(Common::String s, bool &result) { bool AnimationResource::parserCallback_animation(ParserNode *node) { if (!parseIntegerKey(node->values["fps"], 1, &_FPS) || (_FPS < MIN_FPS) || (_FPS > MAX_FPS)) { - return parserError("Illegal or missing fps attribute in <animation> tag in \"%s\". Assuming default (\"%d\").", - getFileName().c_str(), DEFAULT_FPS); + return parserError(Common::String::format("Illegal or missing fps attribute in <animation> tag in \"%s\". Assuming default (\"%d\").", + getFileName().c_str(), DEFAULT_FPS)); } // Loop type value diff --git a/engines/sword25/gfx/animationresource.h b/engines/sword25/gfx/animationresource.h index 2a1e3ce882..70291f220e 100644 --- a/engines/sword25/gfx/animationresource.h +++ b/engines/sword25/gfx/animationresource.h @@ -48,36 +48,35 @@ public: AnimationResource(const Common::String &filename); virtual ~AnimationResource(); - virtual const Frame &getFrame(uint index) const { - assert(index < _frames.size()); + virtual const Frame &getFrame(uint index) const { return _frames[index]; } - virtual uint getFrameCount() const { + virtual uint getFrameCount() const { return _frames.size(); } - virtual void unlock() { + virtual void unlock() { release(); } - Animation::ANIMATION_TYPES getAnimationType() const { + Animation::ANIMATION_TYPES getAnimationType() const { return _animationType; } - int getFPS() const { + int getFPS() const { return _FPS; } - int getMillisPerFrame() const { + int getMillisPerFrame() const { return _millisPerFrame; } - bool isScalingAllowed() const { + bool isScalingAllowed() const { return _scalingAllowed; } - bool isAlphaAllowed() const { + bool isAlphaAllowed() const { return _alphaAllowed; } - bool isColorModulationAllowed() const { + bool isColorModulationAllowed() const { return _colorModulationAllowed; } - bool isValid() const { + bool isValid() const { return _valid; } diff --git a/engines/sword25/gfx/fontresource.cpp b/engines/sword25/gfx/fontresource.cpp index f99987fc91..7657abb5f2 100644 --- a/engines/sword25/gfx/fontresource.cpp +++ b/engines/sword25/gfx/fontresource.cpp @@ -115,23 +115,23 @@ bool FontResource::parserCallback_character(ParserNode *node) { int charCode, top, left, right, bottom; if (!parseIntegerKey(node->values["code"], 1, &charCode) || (charCode < 0) || (charCode >= 256)) { - return parserError("Illegal or missing code attribute in <character> tag in \"%s\".", getFileName().c_str()); + return parserError("Illegal or missing code attribute in <character> tag in '" + getFileName() + "'."); } if (!parseIntegerKey(node->values["top"], 1, &top) || (top < 0)) { - return parserError("Illegal or missing top attribute in <character> tag in \"%s\".", getFileName().c_str()); + return parserError("Illegal or missing top attribute in <character> tag in '" + getFileName() + "'."); } if (!parseIntegerKey(node->values["left"], 1, &left) || (left < 0)) { - return parserError("Illegal or missing left attribute in <character> tag in \"%s\".", getFileName().c_str()); + return parserError("Illegal or missing left attribute in <character> tag in '" + getFileName() + "'."); } if (!parseIntegerKey(node->values["right"], 1, &right) || (right < 0)) { - return parserError("Illegal or missing right attribute in <character> tag in \"%s\".", getFileName().c_str()); + return parserError("Illegal or missing right attribute in <character> tag in '" + getFileName() + "'."); } if (!parseIntegerKey(node->values["bottom"], 1, &bottom) || (bottom < 0)) { - return parserError("Illegal or missing bottom attribute in <character> tag in \"%s\".", getFileName().c_str()); + return parserError("Illegal or missing bottom attribute in <character> tag in '" + getFileName() + "'."); } - this->_characterRects[charCode] = Common::Rect(left, top, right, bottom); + _characterRects[charCode] = Common::Rect(left, top, right, bottom); return true; } diff --git a/engines/sword25/gfx/graphicengine.h b/engines/sword25/gfx/graphicengine.h index 04826c2e5a..3309763966 100644 --- a/engines/sword25/gfx/graphicengine.h +++ b/engines/sword25/gfx/graphicengine.h @@ -106,7 +106,7 @@ public: // --------- /** - * Initialises the graphics engine and sets the screen mode. Returns + * Initializes the graphics engine and sets the screen mode. Returns * true if initialisation failed. * @note This method should be called immediately after the * initialisation of all services. diff --git a/engines/sword25/gfx/image/imgloader.cpp b/engines/sword25/gfx/image/imgloader.cpp new file mode 100644 index 0000000000..1df0fba70c --- /dev/null +++ b/engines/sword25/gfx/image/imgloader.cpp @@ -0,0 +1,85 @@ +/* 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. + * + */ + +/* + * This code is based on Broken Sword 2.5 engine + * + * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer + * + * Licensed under GNU GPL v2 + * + */ + +#include "common/memstream.h" +#include "sword25/gfx/image/image.h" +#include "sword25/gfx/image/imgloader.h" +#include "graphics/pixelformat.h" +#include "graphics/png.h" + +namespace Sword25 { + +bool ImgLoader::decodePNGImage(const byte *fileDataPtr, uint fileSize, byte *&uncompressedDataPtr, int &width, int &height, int &pitch) { + Common::MemoryReadStream *fileStr = new Common::MemoryReadStream(fileDataPtr, fileSize, DisposeAfterUse::NO); + Graphics::PNG *png = new Graphics::PNG(); + if (!png->read(fileStr)) // the fileStr pointer, and thus pFileData will be deleted after this is done + error("Error while reading PNG image"); + + Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24); + Graphics::Surface *pngSurface = png->getSurface(format); + + width = pngSurface->w; + height = pngSurface->h; + uncompressedDataPtr = new byte[pngSurface->pitch * pngSurface->h]; + memcpy(uncompressedDataPtr, (byte *)pngSurface->pixels, pngSurface->pitch * pngSurface->h); + pngSurface->free(); + + delete pngSurface; + delete png; + + // Signal success + return true; +} + +bool ImgLoader::decodeThumbnailImage(const byte *pFileData, uint fileSize, byte *&pUncompressedData, int &width, int &height, int &pitch) { + const byte *src = pFileData + 4; // skip header + width = READ_LE_UINT16(src); src += 2; + height = READ_LE_UINT16(src); src += 2; + src++; // version, ignored for now + pitch = width * 4; + + uint32 totalSize = pitch * height; + pUncompressedData = new byte[totalSize]; + uint32 *dst = (uint32 *)pUncompressedData; // treat as uint32, for pixelformat output + const Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24); + byte r, g, b; + + for (uint32 i = 0; i < totalSize / 4; i++) { + r = *src++; + g = *src++; + b = *src++; + *dst++ = format.RGBToColor(r, g, b); + } + + return true; +} + +} // End of namespace Sword25 diff --git a/engines/sword25/gfx/image/pngloader.h b/engines/sword25/gfx/image/imgloader.h index 6b5f65ff57..735ab9203c 100644 --- a/engines/sword25/gfx/image/pngloader.h +++ b/engines/sword25/gfx/image/imgloader.h @@ -29,30 +29,22 @@ * */ -#ifndef SWORD25_PNGLOADER2_H -#define SWORD25_PNGLOADER2_H +#ifndef SWORD25_IMGLOADER_H +#define SWORD25_IMGLOADER_H #include "sword25/kernel/common.h" #include "sword25/gfx/graphicengine.h" namespace Sword25 { -// Define to use ScummVM's PNG decoder, instead of libpng -#define USE_INTERNAL_PNG_DECODER - /** * Class for loading PNG files, and PNG data embedded into savegames. * * Originally written by Malte Thiesen. */ -class PNGLoader { +class ImgLoader { protected: - PNGLoader() {} // Protected constructor to prevent instances - - static bool doDecodeImage(const byte *fileDataPtr, uint fileSize, byte *&uncompressedDataPtr, int &width, int &height, int &pitch); -#ifndef USE_INTERNAL_PNG_DECODER - static bool doImageProperties(const byte *fileDataPtr, uint fileSize, int &width, int &height); -#endif + ImgLoader() {} // Protected constructor to prevent instances public: @@ -70,28 +62,15 @@ public: * @remark This function does not free the image buffer passed to it, * it is the callers responsibility to do so. */ - static bool decodeImage(const byte *pFileData, uint fileSize, + static bool decodePNGImage(const byte *pFileData, uint fileSize, byte *&pUncompressedData, int &width, int &height, int &pitch); -#ifndef USE_INTERNAL_PNG_DECODER - /** - * Extract the properties of an image. - * @param[in] fileDatePtr pointer to the image data - * @param[in] fileSize size of the image data in bytes - * @param[out] width if successful, this is set to the width of the image - * @param[out] height if successful, this is set to the height of the image - * @return returns true if extraction of the properties was successful, false in case of an error - * - * @remark This function does not free the image buffer passed to it, - * it is the callers responsibility to do so. - */ - static bool imageProperties(const byte *fileDatePtr, uint fileSize, - int &width, - int &height); -#endif - + static bool decodeThumbnailImage(const byte *pFileData, uint fileSize, + byte *&pUncompressedData, + int &width, int &height, + int &pitch); }; } // End of namespace Sword25 diff --git a/engines/sword25/gfx/image/pngloader.cpp b/engines/sword25/gfx/image/pngloader.cpp deleted file mode 100644 index 6f370d8861..0000000000 --- a/engines/sword25/gfx/image/pngloader.cpp +++ /dev/null @@ -1,245 +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. - * - */ - -/* - * This code is based on Broken Sword 2.5 engine - * - * Copyright (c) Malte Thiesen, Daniel Queteschiner and Michael Elsdoerfer - * - * Licensed under GNU GPL v2 - * - */ - -#ifndef USE_INTERNAL_PNG_DECODER -// Disable symbol overrides so that we can use png.h -#define FORBIDDEN_SYMBOL_ALLOW_ALL -#endif - -#include "common/memstream.h" -#include "sword25/gfx/image/image.h" -#include "sword25/gfx/image/pngloader.h" -#ifndef USE_INTERNAL_PNG_DECODER -#include <png.h> -#else -#include "graphics/pixelformat.h" -#include "graphics/png.h" -#endif - -namespace Sword25 { - -#ifndef USE_INTERNAL_PNG_DECODER -static void png_user_read_data(png_structp png_ptr, png_bytep data, png_size_t length) { - const byte **ref = (const byte **)png_get_io_ptr(png_ptr); - memcpy(data, *ref, length); - *ref += length; -} - -static bool doIsCorrectImageFormat(const byte *fileDataPtr, uint fileSize) { - return (fileSize > 8) && png_check_sig(const_cast<byte *>(fileDataPtr), 8); -} -#endif - -bool PNGLoader::doDecodeImage(const byte *fileDataPtr, uint fileSize, byte *&uncompressedDataPtr, int &width, int &height, int &pitch) { -#ifndef USE_INTERNAL_PNG_DECODER - png_structp png_ptr = NULL; - png_infop info_ptr = NULL; - - int bitDepth; - int colorType; - int interlaceType; - int i; - - // Check for valid PNG signature - if (!doIsCorrectImageFormat(fileDataPtr, fileSize)) { - error("png_check_sig failed"); - } - - // Create both PNG structures - png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) { - error("Could not create libpng read struct."); - } - - info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) { - error("Could not create libpng info struct."); - } - - // Use alternative reading function - const byte **ref = &fileDataPtr; - png_set_read_fn(png_ptr, (void *)ref, png_user_read_data); - - // Read PNG header - png_read_info(png_ptr, info_ptr); - - // Read out PNG informations - - png_uint_32 w, h; - png_get_IHDR(png_ptr, info_ptr, &w, &h, &bitDepth, &colorType, &interlaceType, NULL, NULL); - width = w; - height = h; - - // Calculate pitch of output image - pitch = GraphicEngine::calcPitch(GraphicEngine::CF_ARGB32, width); - - // Allocate memory for the final image data. - // To keep memory framentation low this happens before allocating memory for temporary image data. - uncompressedDataPtr = new byte[pitch * height]; - if (!uncompressedDataPtr) { - error("Could not allocate memory for output image."); - } - - // Images of all color formates will be transformed into ARGB images - if (bitDepth == 16) - png_set_strip_16(png_ptr); - if (colorType == PNG_COLOR_TYPE_PALETTE) - png_set_expand(png_ptr); - if (bitDepth < 8) - png_set_expand(png_ptr); - if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) - png_set_expand(png_ptr); - if (colorType == PNG_COLOR_TYPE_GRAY || - colorType == PNG_COLOR_TYPE_GRAY_ALPHA) - png_set_gray_to_rgb(png_ptr); - - png_set_bgr(png_ptr); - - if (colorType != PNG_COLOR_TYPE_RGB_ALPHA) - png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER); - - // After the transformations have been registered, the image data is read again. - png_read_update_info(png_ptr, info_ptr); - png_get_IHDR(png_ptr, info_ptr, &w, &h, &bitDepth, &colorType, NULL, NULL, NULL); - width = w; - height = h; - - if (interlaceType == PNG_INTERLACE_NONE) { - // PNGs without interlacing can simply be read row by row. - for (i = 0; i < height; i++) { - png_read_row(png_ptr, uncompressedDataPtr + i * pitch, NULL); - } - } else { - // PNGs with interlacing require us to allocate an auxillary - // buffer with pointers to all row starts. - - // Allocate row pointer buffer - png_bytep *pRowPtr = new png_bytep[height]; - if (!pRowPtr) { - error("Could not allocate memory for row pointers."); - } - - // Initialize row pointers - for (i = 0; i < height; i++) - pRowPtr[i] = uncompressedDataPtr + i * pitch; - - // Read image data - png_read_image(png_ptr, pRowPtr); - - // Free row pointer buffer - delete[] pRowPtr; - } - - // Read additional data at the end. - png_read_end(png_ptr, NULL); - - // Destroy libpng structures - png_destroy_read_struct(&png_ptr, &info_ptr, NULL); -#else - Common::MemoryReadStream *fileStr = new Common::MemoryReadStream(fileDataPtr, fileSize, DisposeAfterUse::NO); - Graphics::PNG *png = new Graphics::PNG(); - if (!png->read(fileStr)) // the fileStr pointer, and thus pFileData will be deleted after this is done - error("Error while reading PNG image"); - - Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24); - Graphics::Surface *pngSurface = png->getSurface(format); - - width = pngSurface->w; - height = pngSurface->h; - uncompressedDataPtr = new byte[pngSurface->pitch * pngSurface->h]; - memcpy(uncompressedDataPtr, (byte *)pngSurface->pixels, pngSurface->pitch * pngSurface->h); - pngSurface->free(); - - delete pngSurface; - delete png; - -#endif - // Signal success - return true; -} - -bool PNGLoader::decodeImage(const byte *fileDataPtr, uint fileSize, byte *&uncompressedDataPtr, int &width, int &height, int &pitch) { - return doDecodeImage(fileDataPtr, fileSize, uncompressedDataPtr, width, height, pitch); -} - -#ifndef USE_INTERNAL_PNG_DECODER -bool PNGLoader::doImageProperties(const byte *fileDataPtr, uint fileSize, int &width, int &height) { - // Check for valid PNG signature - if (!doIsCorrectImageFormat(fileDataPtr, fileSize)) - return false; - - png_structp png_ptr = NULL; - png_infop info_ptr = NULL; - - // Create both PNG structures - png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) { - error("Could not create libpng read struct."); - } - - info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) { - error("Could not create libpng info struct."); - } - - // Use alternative reading function - const byte **ref = &fileDataPtr; - png_set_read_fn(png_ptr, (void *)ref, png_user_read_data); - - // Read PNG Header - png_read_info(png_ptr, info_ptr); - - // Read out PNG informations - int bitDepth; - int colorType; - png_uint_32 w, h; - png_get_IHDR(png_ptr, info_ptr, &w, &h, &bitDepth, &colorType, NULL, NULL, NULL); - - width = w; - height = h; - - // Destroy libpng structures - png_destroy_read_struct(&png_ptr, &info_ptr, NULL); - - return true; - -} - -bool PNGLoader::imageProperties(const byte *fileDataPtr, uint fileSize, int &width, int &height) { - return doImageProperties(fileDataPtr, fileSize, width, height); -} - -#else - // We don't need to read the image properties here... -#endif - - -} // End of namespace Sword25 diff --git a/engines/sword25/gfx/image/renderedimage.cpp b/engines/sword25/gfx/image/renderedimage.cpp index 395d29d81a..f5f33d8e02 100644 --- a/engines/sword25/gfx/image/renderedimage.cpp +++ b/engines/sword25/gfx/image/renderedimage.cpp @@ -35,7 +35,7 @@ #include "common/savefile.h" #include "sword25/package/packagemanager.h" -#include "sword25/gfx/image/pngloader.h" +#include "sword25/gfx/image/imgloader.h" #include "sword25/gfx/image/renderedimage.h" #include "common/system.h" @@ -93,30 +93,6 @@ static byte *readSavegameThumbnail(const Common::String &filename, uint &fileSiz return pFileData; } -// TODO: Move this method into a more generic image loading class, together with the PNG reading code -static bool decodeThumbnail(const byte *pFileData, uint fileSize, byte *&pUncompressedData, int &width, int &height, int &pitch) { - const byte *src = pFileData + 4; // skip header - width = READ_LE_UINT16(src); src += 2; - height = READ_LE_UINT16(src); src += 2; - src++; // version, ignored for now - pitch = width * 4; - - uint32 totalSize = pitch * height; - pUncompressedData = new byte[totalSize]; - uint32 *dst = (uint32 *)pUncompressedData; // treat as uint32, for pixelformat output - const Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24); - byte r, g, b; - - for (uint32 i = 0; i < totalSize / 4; i++) { - r = *src++; - g = *src++; - b = *src++; - *dst++ = format.RGBToColor(r, g, b); - } - - return true; -} - RenderedImage::RenderedImage(const Common::String &filename, bool &result) : _data(0), _width(0), @@ -145,21 +121,12 @@ RenderedImage::RenderedImage(const Common::String &filename, bool &result) : return; } -#ifndef USE_INTERNAL_PNG_DECODER - // Determine image properties - if (!PNGLoader::imageProperties(pFileData, fileSize, _width, _height)) { - error("Could not read image properties."); - delete[] pFileData; - return; - } -#endif - // Uncompress the image int pitch; if (isPNG) - result = PNGLoader::decodeImage(pFileData, fileSize, _data, _width, _height, pitch); + result = ImgLoader::decodePNGImage(pFileData, fileSize, _data, _width, _height, pitch); else - result = decodeThumbnail(pFileData, fileSize, _data, _width, _height, pitch); + result = ImgLoader::decodeThumbnailImage(pFileData, fileSize, _data, _width, _height, pitch); if (!result) { error("Could not decode image."); @@ -406,17 +373,23 @@ bool RenderedImage::blit(int posX, int posY, int flipping, Common::Rect *pPartRe default: // alpha blending #if defined(SCUMM_LITTLE_ENDIAN) - if (cb != 255) + if (cb == 0) + *out = 0; + else if (cb != 255) *out += ((b - *out) * a * cb) >> 16; else *out += ((b - *out) * a) >> 8; out++; - if (cg != 255) + if (cg == 0) + *out = 0; + else if (cg != 255) *out += ((g - *out) * a * cg) >> 16; else *out += ((g - *out) * a) >> 8; out++; - if (cr != 255) + if (cr == 0) + *out = 0; + else if (cr != 255) *out += ((r - *out) * a * cr) >> 16; else *out += ((r - *out) * a) >> 8; @@ -426,17 +399,23 @@ bool RenderedImage::blit(int posX, int posY, int flipping, Common::Rect *pPartRe #else *out = 255; out++; - if (cr != 255) + if (cr == 0) + *out = 0; + else if (cr != 255) *out += ((r - *out) * a * cr) >> 16; else *out += ((r - *out) * a) >> 8; out++; - if (cg != 255) + if (cg == 0) + *out = 0; + else if (cg != 255) *out += ((g - *out) * a * cg) >> 16; else *out += ((g - *out) * a) >> 8; out++; - if (cb != 255) + if (cb == 0) + *out = 0; + else if (cb != 255) *out += ((b - *out) * a * cb) >> 16; else *out += ((b - *out) * a) >> 8; diff --git a/engines/sword25/gfx/image/swimage.cpp b/engines/sword25/gfx/image/swimage.cpp index 92d47368b2..0b9cc11df2 100644 --- a/engines/sword25/gfx/image/swimage.cpp +++ b/engines/sword25/gfx/image/swimage.cpp @@ -30,7 +30,7 @@ */ #include "sword25/package/packagemanager.h" -#include "sword25/gfx/image/pngloader.h" +#include "sword25/gfx/image/imgloader.h" #include "sword25/gfx/image/swimage.h" namespace Sword25 { @@ -53,18 +53,10 @@ SWImage::SWImage(const Common::String &filename, bool &result) : return; } -#ifndef USE_INTERNAL_PNG_DECODER - // Determine image properties - if (!PNGLoader::imageProperties(pFileData, fileSize, _width, _height)) { - error("Could not read image properties."); - return; - } -#endif - // Uncompress the image int pitch; byte *pUncompressedData; - if (!PNGLoader::decodeImage(pFileData, fileSize, pUncompressedData, _width, _height, pitch)) { + if (!ImgLoader::decodePNGImage(pFileData, fileSize, pUncompressedData, _width, _height, pitch)) { error("Could not decode image."); return; } diff --git a/engines/sword25/gfx/panel.cpp b/engines/sword25/gfx/panel.cpp index 34ab4876ea..6d5b2a623d 100644 --- a/engines/sword25/gfx/panel.cpp +++ b/engines/sword25/gfx/panel.cpp @@ -47,12 +47,12 @@ Panel::Panel(RenderObjectPtr<RenderObject> parentPtr, int width, int height, uin _height = height; if (_width < 0) { - error("Tried to initialise a panel with an invalid width (%d).", _width); + error("Tried to initialize a panel with an invalid width (%d).", _width); return; } if (_height < 0) { - error("Tried to initialise a panel with an invalid height (%d).", _height); + error("Tried to initialize a panel with an invalid height (%d).", _height); return; } diff --git a/engines/sword25/input/inputengine.h b/engines/sword25/input/inputengine.h index a84c215076..f79890a9fd 100644 --- a/engines/sword25/input/inputengine.h +++ b/engines/sword25/input/inputengine.h @@ -172,7 +172,7 @@ public: /// -------------------------------------------------------------- /** - * Initialises the input engine + * Initializes the input engine * @return Returns a true on success, otherwise false. */ bool init(); diff --git a/engines/sword25/kernel/kernel.cpp b/engines/sword25/kernel/kernel.cpp index f45137ce02..d6388eee2b 100644 --- a/engines/sword25/kernel/kernel.cpp +++ b/engines/sword25/kernel/kernel.cpp @@ -63,7 +63,7 @@ Kernel::Kernel() : // Create the resource manager _resourceManager = new ResourceManager(this); - // Initialise the script engine + // Initialize the script engine _script = new LuaScriptEngine(this); if (!_script || !_script->init()) { _initSuccess = false; diff --git a/engines/sword25/kernel/kernel.h b/engines/sword25/kernel/kernel.h index a0c2927fdc..adf69f92d6 100644 --- a/engines/sword25/kernel/kernel.h +++ b/engines/sword25/kernel/kernel.h @@ -79,7 +79,7 @@ public: uint getMilliTicks(); /** - * Specifies whether the kernel was successfully initialised + * Specifies whether the kernel was successfully initialized */ bool getInitSuccess() const { return _initSuccess; diff --git a/engines/sword25/kernel/persistenceservice.cpp b/engines/sword25/kernel/persistenceservice.cpp index 4329502710..17e9199b5c 100644 --- a/engines/sword25/kernel/persistenceservice.cpp +++ b/engines/sword25/kernel/persistenceservice.cpp @@ -301,6 +301,7 @@ bool PersistenceService::saveGame(uint slotID, const Common::String &screenshotF if (thumbnail) { byte *buffer = new byte[FILE_COPY_BUFFER_SIZE]; + thumbnail->seek(0, SEEK_SET); while (!thumbnail->eos()) { int bytesRead = thumbnail->read(&buffer[0], FILE_COPY_BUFFER_SIZE); file->write(&buffer[0], bytesRead); diff --git a/engines/sword25/math/polygon.cpp b/engines/sword25/math/polygon.cpp index fe2fc84cad..2e7836ff77 100644 --- a/engines/sword25/math/polygon.cpp +++ b/engines/sword25/math/polygon.cpp @@ -59,7 +59,7 @@ Polygon::~Polygon() { } bool Polygon::init(int vertexCount_, const Vertex *vertices_) { - // Rember the old obstate to restore it if an error occurs whilst initialising it with the new data + // Rember the old obstate to restore it if an error occurs whilst initializing it with the new data int oldvertexCount = this->vertexCount; Vertex *oldvertices = this->vertices; diff --git a/engines/sword25/math/polygon.h b/engines/sword25/math/polygon.h index eac19d7900..ffdbf14f6b 100644 --- a/engines/sword25/math/polygon.h +++ b/engines/sword25/math/polygon.h @@ -78,15 +78,15 @@ public: virtual ~Polygon(); /** - * Initialises the BS_Polygon with a list of Vertecies. + * Initializes the BS_Polygon with a list of Vertecies. * * The Vertices need to define a polygon must not have self-intersections. - * If a polygon already has verticies, this will re-initialise it with the new list. + * If a polygon already has verticies, this will re-initialize it with the new list. * * @param VertexCount The number of vertices being passed * @param Vertecies An array of BS_Vertex objects representing the vertices in the polygon. * @return Returns false if the Vertecies have self-intersections. In this case, - * the object is not initialised. + * the object is not initialized. */ bool init(int vertexCount_, const Vertex *vertices_); diff --git a/engines/sword25/math/region.cpp b/engines/sword25/math/region.cpp index 8790860a55..7681ef6d9f 100644 --- a/engines/sword25/math/region.cpp +++ b/engines/sword25/math/region.cpp @@ -115,7 +115,7 @@ bool Region::init(const Polygon &contour, const Common::Array<Polygon> *pHoles) } - // Initialise bounding box + // Initialize bounding box updateBoundingBox(); _valid = true; diff --git a/engines/sword25/math/region.h b/engines/sword25/math/region.h index f9a3f50b3f..0fd7223631 100644 --- a/engines/sword25/math/region.h +++ b/engines/sword25/math/region.h @@ -73,12 +73,12 @@ public: virtual ~Region(); /** - * Initialises a BS_Region object + * Initializes a BS_Region object * @param Contour A polygon indicating the outline of the region * @param pHoles A pointer to an array of polygons representing the hole state in the region. * If the region has no holes, it must be passed as NULL. The default value is NULL. * @return Returns true if the initialisation was successful, otherwise false. - * @remark If the region was already initialised, the old state will be deleted. + * @remark If the region was already initialized, the old state will be deleted. */ virtual bool init(const Polygon &contour, const Common::Array<Polygon> *pHoles = NULL); diff --git a/engines/sword25/math/walkregion.cpp b/engines/sword25/math/walkregion.cpp index 3eea689877..bace4d54bc 100644 --- a/engines/sword25/math/walkregion.cpp +++ b/engines/sword25/math/walkregion.cpp @@ -101,7 +101,7 @@ static void initDijkstraNodes(DijkstraNode::Container &dijkstraNodes, const Regi // Allocate sufficient space in the array dijkstraNodes.resize(nodes.size()); - // Initialise all the nodes which are visible from the starting node + // Initialize all the nodes which are visible from the starting node DijkstraNode::Iter dijkstraIter = dijkstraNodes.begin(); for (Common::Array<Vertex>::const_iterator nodesIter = nodes.begin(); nodesIter != nodes.end(); nodesIter++, dijkstraIter++) { @@ -173,7 +173,7 @@ void reverseArray(Common::Array<T> &arr) { bool WalkRegion::findPath(const Vertex &start, const Vertex &end, BS_Path &path) const { // This is an implementation of Dijkstra's algorithm - // Initialise edge node list + // Initialize edge node list DijkstraNode::Container dijkstraNodes; initDijkstraNodes(dijkstraNodes, *this, start, _nodes); @@ -247,7 +247,7 @@ void WalkRegion::initNodeVector() { } void WalkRegion::computeVisibilityMatrix() { - // Initialise visibility matrix + // Initialize visibility matrix _visibilityMatrix = Common::Array< Common::Array <int> >(); for (uint idx = 0; idx < _nodes.size(); ++idx) { Common::Array<int> arr; diff --git a/engines/sword25/module.mk b/engines/sword25/module.mk index e87707d5a2..302120c500 100644 --- a/engines/sword25/module.mk +++ b/engines/sword25/module.mk @@ -24,7 +24,7 @@ MODULE_OBJS := \ gfx/text.o \ gfx/timedrenderobject.o \ gfx/image/art.o \ - gfx/image/pngloader.o \ + gfx/image/imgloader.o \ gfx/image/renderedimage.o \ gfx/image/swimage.o \ gfx/image/vectorimage.o \ @@ -60,7 +60,6 @@ MODULE_OBJS := \ util/lua/ldblib.o \ util/lua/ldebug.o \ util/lua/ldo.o \ - util/lua/ldump.o \ util/lua/lfunc.o \ util/lua/lgc.o \ util/lua/linit.o \ @@ -79,7 +78,6 @@ MODULE_OBJS := \ util/lua/ltable.o \ util/lua/ltablib.o \ util/lua/ltm.o \ - util/lua/lundump.o \ util/lua/lvm.o \ util/lua/lzio.o \ util/lua/scummvm_file.o \ diff --git a/engines/sword25/script/luascript.cpp b/engines/sword25/script/luascript.cpp index 7fd3d1b658..9d394309e6 100644 --- a/engines/sword25/script/luascript.cpp +++ b/engines/sword25/script/luascript.cpp @@ -112,7 +112,7 @@ bool LuaScriptEngine::init() { // Place the error handler function in the Lua registry, and remember the index _pcallErrorhandlerRegistryIndex = luaL_ref(_state, LUA_REGISTRYINDEX); - // Initialise the Pluto-Persistence library + // Initialize the Pluto-Persistence library luaopen_pluto(_state); lua_pop(_state, 1); @@ -177,7 +177,7 @@ bool LuaScriptEngine::executeFile(const Common::String &fileName) { } bool LuaScriptEngine::executeString(const Common::String &code) { - return executeBuffer((byte *)code.c_str(), code.size(), "???"); + return executeBuffer((const byte *)code.c_str(), code.size(), "???"); } namespace { diff --git a/engines/sword25/script/luascript.h b/engines/sword25/script/luascript.h index cd6d0e8878..1a4a38c3be 100644 --- a/engines/sword25/script/luascript.h +++ b/engines/sword25/script/luascript.h @@ -49,7 +49,7 @@ public: virtual ~LuaScriptEngine(); /** - * Initialises the scripting engine + * Initializes the scripting engine * @return Returns true if successful, otherwise false. */ virtual bool init(); diff --git a/engines/sword25/script/script.h b/engines/sword25/script/script.h index e4ce846b66..04f248fe7e 100644 --- a/engines/sword25/script/script.h +++ b/engines/sword25/script/script.h @@ -54,7 +54,7 @@ public: // ----------------------------------------------------------------------------- /** - * Initialises the scrip tengine. Returns true if successful, false otherwise. + * Initializes the scrip tengine. Returns true if successful, false otherwise. */ virtual bool init() = 0; diff --git a/engines/sword25/sfx/soundengine.cpp b/engines/sword25/sfx/soundengine.cpp index 20622b2098..9244137c25 100644 --- a/engines/sword25/sfx/soundengine.cpp +++ b/engines/sword25/sfx/soundengine.cpp @@ -37,6 +37,7 @@ #include "audio/decoders/vorbis.h" #include "common/system.h" +#include "common/config-manager.h" namespace Sword25 { @@ -65,8 +66,6 @@ SoundEngine::SoundEngine(Kernel *pKernel) : ResourceService(pKernel) { } bool SoundEngine::init(uint sampleRate, uint channels) { - warning("STUB: SoundEngine::init(%d, %d)", sampleRate, channels); - return true; } @@ -74,12 +73,44 @@ void SoundEngine::update() { } void SoundEngine::setVolume(float volume, SOUND_TYPES type) { - warning("STUB: SoundEngine::setVolume(%f, %d)", volume, type); + int val = (int)(255 * volume); + + switch (type) { + case SoundEngine::MUSIC: + ConfMan.setInt("music_volume", val); + _mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, val); + break; + case SoundEngine::SPEECH: + ConfMan.setInt("speech_volume", val); + _mixer->setVolumeForSoundType(Audio::Mixer::kSpeechSoundType, val); + break; + case SoundEngine::SFX: + ConfMan.setInt("sfx_volume", val); + _mixer->setVolumeForSoundType(Audio::Mixer::kSFXSoundType, val); + break; + default: + error("Unknown SOUND_TYPE"); + } } float SoundEngine::getVolume(SOUND_TYPES type) { - warning("STUB: SoundEngine::getVolume(%d)", type); - return 0; + int val = 0; + + switch (type) { + case SoundEngine::MUSIC: + val = ConfMan.getInt("music_volume"); + break; + case SoundEngine::SPEECH: + val = ConfMan.getInt("speech_volume"); + break; + case SoundEngine::SFX: + val = ConfMan.getInt("sfx_volume"); + break; + default: + error("Unknown SOUND_TYPE"); + } + + return (float)val / 255.0; } void SoundEngine::pauseAll() { @@ -95,11 +126,15 @@ void SoundEngine::resumeAll() { } void SoundEngine::pauseLayer(uint layer) { - warning("STUB: SoundEngine::pauseLayer(%d)", layer); + // Not used in the game + + warning("SoundEngine::pauseLayer(%d)", layer); } void SoundEngine::resumeLayer(uint layer) { - warning("STUB: SoundEngine::resumeLayer(%d)", layer); + // Not used in the game + + warning("SoundEngine::resumeLayer(%d)", layer); } SndHandle *SoundEngine::getHandle(uint *id) { @@ -207,7 +242,9 @@ void SoundEngine::stopSound(uint handle) { } bool SoundEngine::isSoundPaused(uint handle) { - warning("STUB: SoundEngine::isSoundPaused(%d)", handle); + // Not used in the game + + warning("SoundEngine::isSoundPaused(%d)", handle); return false; } @@ -221,20 +258,18 @@ bool SoundEngine::isSoundPlaying(uint handle) { } float SoundEngine::getSoundVolume(uint handle) { - warning("STUB: SoundEngine::getSoundVolume(%d)", handle); + debugC(1, kDebugSound, "SoundEngine::getSoundVolume(%d)", handle); - return 0; + return (float)_mixer->getChannelVolume(_handles[handle].handle) / 255.0; } float SoundEngine::getSoundPanning(uint handle) { - warning("STUB: SoundEngine::getSoundPanning(%d)", handle); + debugC(1, kDebugSound, "SoundEngine::getSoundPanning(%d)", handle); - return 0; + return (float)_mixer->getChannelBalance(_handles[handle].handle) / 127.0; } Resource *SoundEngine::loadResource(const Common::String &fileName) { - warning("STUB: SoundEngine::loadResource(%s)", fileName.c_str()); - return new SoundResource(fileName); } diff --git a/engines/sword25/sfx/soundengine.h b/engines/sword25/sfx/soundengine.h index c087392570..4dbd475846 100644 --- a/engines/sword25/sfx/soundengine.h +++ b/engines/sword25/sfx/soundengine.h @@ -88,7 +88,7 @@ public: ~SoundEngine() {} /** - * Initialises the sound engine + * Initializes the sound engine * @param SampleRate Specifies the sample rate to use. * @param Channels The maximum number of channels. The default is 32. * @return Returns true on success, otherwise false. diff --git a/engines/sword25/sword25.cpp b/engines/sword25/sword25.cpp index 93666fed39..b111746c32 100644 --- a/engines/sword25/sword25.cpp +++ b/engines/sword25/sword25.cpp @@ -94,7 +94,7 @@ Common::Error Sword25Engine::run() { } Common::Error Sword25Engine::appStart() { - // Initialise the graphics mode to ARGB8888 + // Initialize the graphics mode to ARGB8888 Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24); initGraphics(800, 600, true, &format); if (format != g_system->getScreenFormat()) @@ -142,7 +142,7 @@ bool Sword25Engine::appMain() { } bool Sword25Engine::appEnd() { - // The kernel is shutdown, and un-initialises all subsystems + // The kernel is shutdown, and un-initializes all subsystems Kernel::deleteInstance(); AnimationTemplateRegistry::destroy(); diff --git a/engines/sword25/sword25.h b/engines/sword25/sword25.h index 5d11aa69e5..1254ea177b 100644 --- a/engines/sword25/sword25.h +++ b/engines/sword25/sword25.h @@ -82,7 +82,7 @@ protected: // void pauseEngineIntern(bool pause); // TODO: Implement this!!! // void syncSoundSettings(); // TODO: Implement this!!! // Common::Error loadGameState(int slot); // TODO: Implement this? -// Common::Error saveGameState(int slot, const char *desc); // TODO: Implement this? +// Common::Error saveGameState(int slot, const Common::String &desc); // TODO: Implement this? // bool canLoadGameStateCurrently(); // TODO: Implement this? // bool canSaveGameStateCurrently(); // TODO: Implement this? diff --git a/engines/sword25/util/lua/lapi.cpp b/engines/sword25/util/lua/lapi.cpp index b1118db368..16f8460e39 100644 --- a/engines/sword25/util/lua/lapi.cpp +++ b/engines/sword25/util/lua/lapi.cpp @@ -26,9 +26,8 @@ #include "lstring.h" #include "ltable.h" #include "ltm.h" -#include "lundump.h" #include "lvm.h" - +#include "common/textconsole.h" const char lua_ident[] = @@ -876,17 +875,8 @@ LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data, LUA_API int lua_dump (lua_State *L, lua_Writer writer, void *data) { - int status; - TValue *o; - lua_lock(L); - api_checknelems(L, 1); - o = L->top - 1; - if (isLfunction(o)) - status = luaU_dump(L, clvalue(o)->l.p, writer, data, 0); - else - status = 1; - lua_unlock(L); - return status; + error("lua_dump not supported: Handling of precompiled LUA scripts has been removed in ScummVM"); + return 1; // error } diff --git a/engines/sword25/util/lua/ldblib.cpp b/engines/sword25/util/lua/ldblib.cpp index b2e249e9b7..4d0333b46e 100644 --- a/engines/sword25/util/lua/ldblib.cpp +++ b/engines/sword25/util/lua/ldblib.cpp @@ -4,6 +4,10 @@ ** See Copyright Notice in lua.h */ +#define FORBIDDEN_SYMBOL_EXCEPTION_stdin +#define FORBIDDEN_SYMBOL_EXCEPTION_stderr +#define FORBIDDEN_SYMBOL_EXCEPTION_fputs +#define FORBIDDEN_SYMBOL_EXCEPTION_fgets #include <stdio.h> #include <stdlib.h> diff --git a/engines/sword25/util/lua/ldo.cpp b/engines/sword25/util/lua/ldo.cpp index b699c5d8a7..bbcdf98b3d 100644 --- a/engines/sword25/util/lua/ldo.cpp +++ b/engines/sword25/util/lua/ldo.cpp @@ -36,10 +36,9 @@ #include "lstring.h" #include "ltable.h" #include "ltm.h" -#include "lundump.h" #include "lvm.h" #include "lzio.h" - +#include "common/textconsole.h" @@ -514,8 +513,9 @@ static void f_parser (lua_State *L, void *ud) { struct SParser *p = cast(struct SParser *, ud); int c = luaZ_lookahead(p->z); luaC_checkGC(L); - tf = ((c == LUA_SIGNATURE[0]) ? luaU_undump : luaY_parser)(L, p->z, - &p->buff, p->name); + if (c == LUA_SIGNATURE[0]) + error("Handling of precompiled LUA scripts has been removed in ScummVM"); + tf = luaY_parser(L, p->z, &p->buff, p->name); cl = luaF_newLclosure(L, tf->nups, hvalue(gt(L))); cl->l.p = tf; for (i = 0; i < tf->nups; i++) /* initialize eventual upvalues */ diff --git a/engines/sword25/util/lua/ldump.cpp b/engines/sword25/util/lua/ldump.cpp deleted file mode 100644 index 3ce16542d6..0000000000 --- a/engines/sword25/util/lua/ldump.cpp +++ /dev/null @@ -1,164 +0,0 @@ -/* -** $Id$ -** save precompiled Lua chunks -** See Copyright Notice in lua.h -*/ - -#include <stddef.h> - -#define ldump_c -#define LUA_CORE - -#include "lua.h" - -#include "lobject.h" -#include "lstate.h" -#include "lundump.h" - -typedef struct { - lua_State* L; - lua_Writer writer; - void* data; - int strip; - int status; -} DumpState; - -#define DumpMem(b,n,size,D) DumpBlock(b,(n)*(size),D) -#define DumpVar(x,D) DumpMem(&x,1,sizeof(x),D) - -static void DumpBlock(const void* b, size_t size, DumpState* D) -{ - if (D->status==0) - { - lua_unlock(D->L); - D->status=(*D->writer)(D->L,b,size,D->data); - lua_lock(D->L); - } -} - -static void DumpChar(int y, DumpState* D) -{ - char x=(char)y; - DumpVar(x,D); -} - -static void DumpInt(int x, DumpState* D) -{ - DumpVar(x,D); -} - -static void DumpNumber(lua_Number x, DumpState* D) -{ - DumpVar(x,D); -} - -static void DumpVector(const void* b, int n, size_t size, DumpState* D) -{ - DumpInt(n,D); - DumpMem(b,n,size,D); -} - -static void DumpString(const TString* s, DumpState* D) -{ - if (s==NULL || getstr(s)==NULL) - { - size_t size=0; - DumpVar(size,D); - } - else - { - size_t size=s->tsv.len+1; /* include trailing '\0' */ - DumpVar(size,D); - DumpBlock(getstr(s),size,D); - } -} - -#define DumpCode(f,D) DumpVector(f->code,f->sizecode,sizeof(Instruction),D) - -static void DumpFunction(const Proto* f, const TString* p, DumpState* D); - -static void DumpConstants(const Proto* f, DumpState* D) -{ - int i,n=f->sizek; - DumpInt(n,D); - for (i=0; i<n; i++) - { - const TValue* o=&f->k[i]; - DumpChar(ttype(o),D); - switch (ttype(o)) - { - case LUA_TNIL: - break; - case LUA_TBOOLEAN: - DumpChar(bvalue(o),D); - break; - case LUA_TNUMBER: - DumpNumber(nvalue(o),D); - break; - case LUA_TSTRING: - DumpString(rawtsvalue(o),D); - break; - default: - lua_assert(0); /* cannot happen */ - break; - } - } - n=f->sizep; - DumpInt(n,D); - for (i=0; i<n; i++) DumpFunction(f->p[i],f->source,D); -} - -static void DumpDebug(const Proto* f, DumpState* D) -{ - int i,n; - n= (D->strip) ? 0 : f->sizelineinfo; - DumpVector(f->lineinfo,n,sizeof(int),D); - n= (D->strip) ? 0 : f->sizelocvars; - DumpInt(n,D); - for (i=0; i<n; i++) - { - DumpString(f->locvars[i].varname,D); - DumpInt(f->locvars[i].startpc,D); - DumpInt(f->locvars[i].endpc,D); - } - n= (D->strip) ? 0 : f->sizeupvalues; - DumpInt(n,D); - for (i=0; i<n; i++) DumpString(f->upvalues[i],D); -} - -static void DumpFunction(const Proto* f, const TString* p, DumpState* D) -{ - DumpString((f->source==p || D->strip) ? NULL : f->source,D); - DumpInt(f->linedefined,D); - DumpInt(f->lastlinedefined,D); - DumpChar(f->nups,D); - DumpChar(f->numparams,D); - DumpChar(f->is_vararg,D); - DumpChar(f->maxstacksize,D); - DumpCode(f,D); - DumpConstants(f,D); - DumpDebug(f,D); -} - -static void DumpHeader(DumpState* D) -{ - char h[LUAC_HEADERSIZE]; - luaU_header(h); - DumpBlock(h,LUAC_HEADERSIZE,D); -} - -/* -** dump Lua function as precompiled chunk -*/ -int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip) -{ - DumpState D; - D.L=L; - D.writer=w; - D.data=data; - D.strip=strip; - D.status=0; - DumpHeader(&D); - DumpFunction(f,NULL,&D); - return D.status; -} diff --git a/engines/sword25/util/lua/loadlib.cpp b/engines/sword25/util/lua/loadlib.cpp index 2fa831ac2a..9795a575f5 100644 --- a/engines/sword25/util/lua/loadlib.cpp +++ b/engines/sword25/util/lua/loadlib.cpp @@ -8,19 +8,6 @@ ** implementation for Windows, and a stub for other systems. */ -// FIXME: Avoid using these APIs. -// Actually, this could be achieved by removing 80% of the remaining -// code in this file. Most of it is an elaborate way of expressing -// something like "return ERROR;" anyway, as we don't support loading -// dynamic libs -#define FORBIDDEN_SYMBOL_EXCEPTION_FILE -#define FORBIDDEN_SYMBOL_EXCEPTION_fopen -#define FORBIDDEN_SYMBOL_EXCEPTION_fclose - - -#include <stdlib.h> -#include <string.h> - #define loadlib_c #define LUA_LIB @@ -44,11 +31,6 @@ #define LIB_FAIL "open" -/* error codes for ll_loadfunc */ -#define ERRLIB 1 -#define ERRFUNC 2 - - /* ** {====================================================== ** Fallback for other systems @@ -97,29 +79,28 @@ static int gctm (lua_State *L) { } -static int ll_loadfunc (lua_State *L, const char *path, const char *sym) { - void **reg = ll_register(L, path); - if (*reg == NULL) { - lua_pushliteral(L, DLMSG); // loading not supported, just push an error msg - return ERRLIB; /* unable to load library */ - } else { - return ERRFUNC; /* unable to find function */ - } -} +/* error codes for ll_loadfunc */ +#define ERRLIB 1 +#define ERRFUNC 2 static int ll_loadlib (lua_State *L) { const char *path = luaL_checkstring(L, 1); - const char *init = luaL_checkstring(L, 2); - int stat = ll_loadfunc(L, path, init); - if (stat == 0) /* no errors? */ - return 1; /* return the loaded function */ - else { /* error; error message is on stack top */ - lua_pushnil(L); - lua_insert(L, -2); - lua_pushstring(L, (stat == ERRLIB) ? LIB_FAIL : "init"); - return 3; /* return nil, error message, and where */ +// const char *init = luaL_checkstring(L, 2); + int stat; + void **reg = ll_register(L, path); + if (*reg == NULL) { + stat = ERRLIB; /* unable to load library */ + } else { + stat = ERRFUNC; /* unable to find function */ } + lua_pushliteral(L, DLMSG); + + /* error; error message is on stack top */ + lua_pushnil(L); + lua_insert(L, -2); + lua_pushstring(L, (stat == ERRLIB) ? LIB_FAIL : "init"); + return 3; /* return nil, error message, and where */ } @@ -131,109 +112,6 @@ static int ll_loadlib (lua_State *L) { */ -static int readable (const char *filename) { - FILE *f = fopen(filename, "r"); /* try to open file */ - if (f == NULL) return 0; /* open failed */ - fclose(f); - return 1; -} - - -static const char *pushnexttemplate (lua_State *L, const char *path) { - const char *l; - while (*path == *LUA_PATHSEP) path++; /* skip separators */ - if (*path == '\0') return NULL; /* no more templates */ - l = strchr(path, *LUA_PATHSEP); /* find next separator */ - if (l == NULL) l = path + strlen(path); - lua_pushlstring(L, path, l - path); /* template */ - return l; -} - - -static const char *findfile (lua_State *L, const char *name, - const char *pname) { - const char *path; - name = luaL_gsub(L, name, ".", LUA_DIRSEP); - lua_getfield(L, LUA_ENVIRONINDEX, pname); - path = lua_tostring(L, -1); - if (path == NULL) - luaL_error(L, LUA_QL("package.%s") " must be a string", pname); - lua_pushliteral(L, ""); /* error accumulator */ - while ((path = pushnexttemplate(L, path)) != NULL) { - const char *filename; - filename = luaL_gsub(L, lua_tostring(L, -1), LUA_PATH_MARK, name); - lua_remove(L, -2); /* remove path template */ - if (readable(filename)) /* does file exist and is readable? */ - return filename; /* return that file name */ - lua_pushfstring(L, "\n\tno file " LUA_QS, filename); - lua_remove(L, -2); /* remove file name */ - lua_concat(L, 2); /* add entry to possible error message */ - } - return NULL; /* not found */ -} - - -static void loaderror (lua_State *L, const char *filename) { - luaL_error(L, "error loading module " LUA_QS " from file " LUA_QS ":\n\t%s", - lua_tostring(L, 1), filename, lua_tostring(L, -1)); -} - - -static int loader_Lua (lua_State *L) { - const char *filename; - const char *name = luaL_checkstring(L, 1); - filename = findfile(L, name, "path"); - if (filename == NULL) return 1; /* library not found in this path */ - if (luaL_loadfile(L, filename) != 0) - loaderror(L, filename); - return 1; /* library loaded successfully */ -} - - -static const char *mkfuncname (lua_State *L, const char *modname) { - const char *funcname; - const char *mark = strchr(modname, *LUA_IGMARK); - if (mark) modname = mark + 1; - funcname = luaL_gsub(L, modname, ".", LUA_OFSEP); - funcname = lua_pushfstring(L, POF"%s", funcname); - lua_remove(L, -2); /* remove 'gsub' result */ - return funcname; -} - - -static int loader_C (lua_State *L) { - const char *funcname; - const char *name = luaL_checkstring(L, 1); - const char *filename = findfile(L, name, "cpath"); - if (filename == NULL) return 1; /* library not found in this path */ - funcname = mkfuncname(L, name); - if (ll_loadfunc(L, filename, funcname) != 0) - loaderror(L, filename); - return 1; /* library loaded successfully */ -} - - -static int loader_Croot (lua_State *L) { - const char *funcname; - const char *filename; - const char *name = luaL_checkstring(L, 1); - const char *p = strchr(name, '.'); - int stat; - if (p == NULL) return 0; /* is root */ - lua_pushlstring(L, name, p - name); - filename = findfile(L, lua_tostring(L, -1), "cpath"); - if (filename == NULL) return 1; /* root not found */ - funcname = mkfuncname(L, name); - if ((stat = ll_loadfunc(L, filename, funcname)) != 0) { - if (stat != ERRFUNC) loaderror(L, filename); /* real error */ - lua_pushfstring(L, "\n\tno module " LUA_QS " in file " LUA_QS, - name, filename); - return 1; /* function not found */ - } - return 1; -} - - static int loader_preload (lua_State *L) { const char *name = luaL_checkstring(L, 1); lua_getfield(L, LUA_ENVIRONINDEX, "preload"); @@ -409,7 +287,7 @@ static const luaL_Reg ll_funcs[] = { static const lua_CFunction loaders[] = - {loader_preload, loader_Lua, loader_C, loader_Croot, NULL}; + {loader_preload, NULL}; LUALIB_API int luaopen_package (lua_State *L) { diff --git a/engines/sword25/util/lua/luaconf.h b/engines/sword25/util/lua/luaconf.h index 29411d5af1..f3509e969b 100644 --- a/engines/sword25/util/lua/luaconf.h +++ b/engines/sword25/util/lua/luaconf.h @@ -18,14 +18,6 @@ ** =================================================================== */ -#if defined(__ANDROID__) -/* Android is missing strcoll(). -** For more information, refer to: -** http://www.damonkohler.com/2008/12/lua-on-android.html -*/ -#define strcoll strcmp -#endif - /* @@ LUA_ANSI controls the use of non-ansi features. @@ -357,7 +349,7 @@ /* @@ LUA_COMPAT_LSTR controls compatibility with old long string nesting @* facility. -** CHANGE it to 2 if you want the old behaviour, or undefine it to turn +** CHANGE it to 2 if you want the old behavior, or undefine it to turn ** off the advisory error when nesting [[...]]. */ #define LUA_COMPAT_LSTR 1 diff --git a/engines/sword25/util/lua/lundump.cpp b/engines/sword25/util/lua/lundump.cpp deleted file mode 100644 index 4ffc623575..0000000000 --- a/engines/sword25/util/lua/lundump.cpp +++ /dev/null @@ -1,225 +0,0 @@ -/* -** $Id$ -** load precompiled Lua chunks -** See Copyright Notice in lua.h -*/ - -#include <string.h> - -#define lundump_c -#define LUA_CORE - -#include "lua.h" - -#include "ldebug.h" -#include "ldo.h" -#include "lfunc.h" -#include "lmem.h" -#include "lobject.h" -#include "lstring.h" -#include "lundump.h" -#include "lzio.h" - -typedef struct { - lua_State* L; - ZIO* Z; - Mbuffer* b; - const char* name; -} LoadState; - -#ifdef LUAC_TRUST_BINARIES -#define IF(c,s) -#define error(S,s) -#else -#define IF(c,s) if (c) error(S,s) - -static void error(LoadState* S, const char* why) -{ - luaO_pushfstring(S->L,"%s: %s in precompiled chunk",S->name,why); - luaD_throw(S->L,LUA_ERRSYNTAX); -} -#endif - -#define LoadMem(S,b,n,size) LoadBlock(S,b,(n)*(size)) -#define LoadByte(S) (lu_byte)LoadChar(S) -#define LoadVar(S,x) LoadMem(S,&x,1,sizeof(x)) -#define LoadVector(S,b,n,size) LoadMem(S,b,n,size) - -static void LoadBlock(LoadState* S, void* b, size_t size) -{ - size_t r=luaZ_read(S->Z,b,size); - UNUSED(r); - IF (r!=0, "unexpected end"); -} - -static int LoadChar(LoadState* S) -{ - char x; - LoadVar(S,x); - return x; -} - -static int LoadInt(LoadState* S) -{ - int x; - LoadVar(S,x); - IF (x<0, "bad integer"); - return x; -} - -static lua_Number LoadNumber(LoadState* S) -{ - lua_Number x; - LoadVar(S,x); - return x; -} - -static TString* LoadString(LoadState* S) -{ - size_t size; - LoadVar(S,size); - if (size==0) - return NULL; - else - { - char* s=luaZ_openspace(S->L,S->b,size); - LoadBlock(S,s,size); - return luaS_newlstr(S->L,s,size-1); /* remove trailing '\0' */ - } -} - -static void LoadCode(LoadState* S, Proto* f) -{ - int n=LoadInt(S); - f->code=luaM_newvector(S->L,n,Instruction); - f->sizecode=n; - LoadVector(S,f->code,n,sizeof(Instruction)); -} - -static Proto* LoadFunction(LoadState* S, TString* p); - -static void LoadConstants(LoadState* S, Proto* f) -{ - int i,n; - n=LoadInt(S); - f->k=luaM_newvector(S->L,n,TValue); - f->sizek=n; - for (i=0; i<n; i++) setnilvalue(&f->k[i]); - for (i=0; i<n; i++) - { - TValue* o=&f->k[i]; - int t=LoadChar(S); - switch (t) - { - case LUA_TNIL: - setnilvalue(o); - break; - case LUA_TBOOLEAN: - setbvalue(o,LoadChar(S)); - break; - case LUA_TNUMBER: - setnvalue(o,LoadNumber(S)); - break; - case LUA_TSTRING: - setsvalue2n(S->L,o,LoadString(S)); - break; - default: - error(S,"bad constant"); - break; - } - } - n=LoadInt(S); - f->p=luaM_newvector(S->L,n,Proto*); - f->sizep=n; - for (i=0; i<n; i++) f->p[i]=NULL; - for (i=0; i<n; i++) f->p[i]=LoadFunction(S,f->source); -} - -static void LoadDebug(LoadState* S, Proto* f) -{ - int i,n; - n=LoadInt(S); - f->lineinfo=luaM_newvector(S->L,n,int); - f->sizelineinfo=n; - LoadVector(S,f->lineinfo,n,sizeof(int)); - n=LoadInt(S); - f->locvars=luaM_newvector(S->L,n,LocVar); - f->sizelocvars=n; - for (i=0; i<n; i++) f->locvars[i].varname=NULL; - for (i=0; i<n; i++) - { - f->locvars[i].varname=LoadString(S); - f->locvars[i].startpc=LoadInt(S); - f->locvars[i].endpc=LoadInt(S); - } - n=LoadInt(S); - f->upvalues=luaM_newvector(S->L,n,TString*); - f->sizeupvalues=n; - for (i=0; i<n; i++) f->upvalues[i]=NULL; - for (i=0; i<n; i++) f->upvalues[i]=LoadString(S); -} - -static Proto* LoadFunction(LoadState* S, TString* p) -{ - Proto* f=luaF_newproto(S->L); - setptvalue2s(S->L,S->L->top,f); incr_top(S->L); - f->source=LoadString(S); if (f->source==NULL) f->source=p; - f->linedefined=LoadInt(S); - f->lastlinedefined=LoadInt(S); - f->nups=LoadByte(S); - f->numparams=LoadByte(S); - f->is_vararg=LoadByte(S); - f->maxstacksize=LoadByte(S); - LoadCode(S,f); - LoadConstants(S,f); - LoadDebug(S,f); - IF (!luaG_checkcode(f), "bad code"); - S->L->top--; - return f; -} - -static void LoadHeader(LoadState* S) -{ - char h[LUAC_HEADERSIZE]; - char s[LUAC_HEADERSIZE]; - luaU_header(h); - LoadBlock(S,s,LUAC_HEADERSIZE); - IF (memcmp(h,s,LUAC_HEADERSIZE)!=0, "bad header"); -} - -/* -** load precompiled chunk -*/ -Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name) -{ - LoadState S; - if (*name=='@' || *name=='=') - S.name=name+1; - else if (*name==LUA_SIGNATURE[0]) - S.name="binary string"; - else - S.name=name; - S.L=L; - S.Z=Z; - S.b=buff; - LoadHeader(&S); - return LoadFunction(&S,luaS_newliteral(L,"=?")); -} - -/* -* make header -*/ -void luaU_header (char* h) -{ - int x=1; - memcpy(h,LUA_SIGNATURE,sizeof(LUA_SIGNATURE)-1); - h+=sizeof(LUA_SIGNATURE)-1; - *h++=(char)LUAC_VERSION; - *h++=(char)LUAC_FORMAT; - *h++=(char)*(char*)&x; /* endianness */ - *h++=(char)sizeof(int); - *h++=(char)sizeof(size_t); - *h++=(char)sizeof(Instruction); - *h++=(char)sizeof(lua_Number); - *h++=(char)(((lua_Number)0.5)==0); /* is lua_Number integral? */ -} diff --git a/engines/sword25/util/lua/lundump.h b/engines/sword25/util/lua/lundump.h deleted file mode 100644 index c293c56ce9..0000000000 --- a/engines/sword25/util/lua/lundump.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -** $Id$ -** load precompiled Lua chunks -** See Copyright Notice in lua.h -*/ - -#ifndef lundump_h -#define lundump_h - -#include "lobject.h" -#include "lzio.h" - -/* load one chunk; from lundump.c */ -LUAI_FUNC Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name); - -/* make header; from lundump.c */ -LUAI_FUNC void luaU_header (char* h); - -/* dump one chunk; from ldump.c */ -LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip); - -/* for header of binary files -- this is Lua 5.1 */ -#define LUAC_VERSION 0x51 - -/* for header of binary files -- this is the official format */ -#define LUAC_FORMAT 0 - -/* size of header of binary files */ -#define LUAC_HEADERSIZE 12 - -#endif diff --git a/engines/sword25/util/lua/lvm.cpp b/engines/sword25/util/lua/lvm.cpp index ae70fe2645..fb700c20a2 100644 --- a/engines/sword25/util/lua/lvm.cpp +++ b/engines/sword25/util/lua/lvm.cpp @@ -202,7 +202,7 @@ static int l_strcmp (const TString *ls, const TString *rs) { const char *r = getstr(rs); size_t lr = rs->tsv.len; for (;;) { - int temp = strcoll(l, r); + int temp = strcmp(l, r); if (temp != 0) return temp; else { /* strings are equal up to a `\0' */ size_t len = strlen(l); /* index of first `\0' in both strings */ diff --git a/engines/sword25/util/lua/scummvm_file.cpp b/engines/sword25/util/lua/scummvm_file.cpp index 659f5a36c2..7667e19c6f 100644 --- a/engines/sword25/util/lua/scummvm_file.cpp +++ b/engines/sword25/util/lua/scummvm_file.cpp @@ -32,11 +32,30 @@ Sword25FileProxy::Sword25FileProxy(const Common::String &filename, const Common: setupConfigFile(); } +Common::String Sword25FileProxy::formatDouble(double value) { + // This is a bit hackish. The point of it is that it's important that + // we ignore the locale decimal mark and force it to be a point. If it + // would happen to be a comma instead, it seems that it's seen as two + // comma-separated integers rather than one floating-point value. Or + // something like that. + + bool negative = value < 0.0; + value = fabs(value); + double integerPart = floor(value); + double fractionalPart = (value - integerPart) * 1000000.0; + + Common::String out = Common::String::format("%.0f.%.0f", integerPart, fractionalPart); + if (negative) + out = "-" + out; + + return out; +} + void Sword25FileProxy::setupConfigFile() { - float sfxVolume = ConfMan.hasKey("sfx_volume") ? 1.0 : 1.0 * ConfMan.getInt("sfx_volume") / 255.0; - float musicVolume = ConfMan.hasKey("music_volume") ? 0.5 : 1.0 * ConfMan.getInt("music_volume") / 255.0; - float speechVolume = ConfMan.hasKey("speech_volume") ? 1.0 : 1.0 * ConfMan.getInt("speech_volume") / 255.0; - bool subtitles = ConfMan.hasKey("subtitles") ? true : ConfMan.getBool("subtitles"); + double sfxVolume = !ConfMan.hasKey("sfx_volume") ? 1.0 : 1.0 * ConfMan.getInt("sfx_volume") / 255.0; + double musicVolume = !ConfMan.hasKey("music_volume") ? 0.5 : 1.0 * ConfMan.getInt("music_volume") / 255.0; + double speechVolume = !ConfMan.hasKey("speech_volume") ? 1.0 : 1.0 * ConfMan.getInt("speech_volume") / 255.0; + bool subtitles = !ConfMan.hasKey("subtitles") ? true : ConfMan.getBool("subtitles"); _readData = Common::String::format( "GAME_LANGUAGE = \"%s\"\r\n\ @@ -45,10 +64,13 @@ MAX_MEMORY_USAGE = 256000000\r\n\ GFX_VSYNC_ACTIVE = true\r\n\ SFX_SAMPLING_RATE = 44100\r\n\ SFX_CHANNEL_COUNT = 32\r\n\ -SFX_SOUND_VOLUME = %f\r\n\ -SFX_MUSIC_VOLUME = %f\r\n\ -SFX_SPEECH_VOLUME = %f\r\n", - getLanguage().c_str(), subtitles ? "true" : "false", sfxVolume, musicVolume, speechVolume); +SFX_SOUND_VOLUME = %s\r\n\ +SFX_MUSIC_VOLUME = %s\r\n\ +SFX_SPEECH_VOLUME = %s\r\n", + getLanguage().c_str(), subtitles ? "true" : "false", + formatDouble(sfxVolume).c_str(), + formatDouble(musicVolume).c_str(), + formatDouble(speechVolume).c_str()); _readPos = 0; } diff --git a/engines/sword25/util/lua/scummvm_file.h b/engines/sword25/util/lua/scummvm_file.h index a4cbd2a6cf..e8c468ee07 100644 --- a/engines/sword25/util/lua/scummvm_file.h +++ b/engines/sword25/util/lua/scummvm_file.h @@ -37,6 +37,7 @@ private: uint _readPos; Common::String _settings; + Common::String formatDouble(double value); void setupConfigFile(); Common::String getLanguage(); void setLanguage(const Common::String &lang); diff --git a/engines/teenagent/detection.cpp b/engines/teenagent/detection.cpp index 5012e6af65..72a338664b 100644 --- a/engines/teenagent/detection.cpp +++ b/engines/teenagent/detection.cpp @@ -79,37 +79,14 @@ static const ADGameDescription teenAgentGameDescriptions[] = { AD_TABLE_END_MARKER, }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)teenAgentGameDescriptions, - // Size of that superset structure - sizeof(ADGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - teenAgentGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "teenagent", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NONE, - // Maximum directory depth - 1, - // List of directory globs - 0 +enum { + MAX_SAVES = 20 }; -#define MAX_SAVES 20 - - class TeenAgentMetaEngine : public AdvancedMetaEngine { public: - TeenAgentMetaEngine() : AdvancedMetaEngine(detectionParams) { + TeenAgentMetaEngine() : AdvancedMetaEngine(teenAgentGameDescriptions, sizeof(ADGameDescription), teenAgentGames) { + _singleid = "teenagent"; } virtual const char *getName() const { @@ -140,10 +117,6 @@ public: return desc != 0; } -// virtual const ADGameDescription *fallbackDetect(const Common::FSList &fslist) const { -// return 0; -// } - static Common::String generateGameStateFileName(const char *target, int slot) { return Common::String::format("%s.%02d", target, slot); } diff --git a/engines/teenagent/teenagent.cpp b/engines/teenagent/teenagent.cpp index f076dbc0a1..ce8862ffd0 100644 --- a/engines/teenagent/teenagent.cpp +++ b/engines/teenagent/teenagent.cpp @@ -240,7 +240,7 @@ Common::Error TeenAgentEngine::loadGameState(int slot) { return Common::kNoError; } -Common::Error TeenAgentEngine::saveGameState(int slot, const char *desc) { +Common::Error TeenAgentEngine::saveGameState(int slot, const Common::String &desc) { debug(0, "saving to slot %d", slot); Common::ScopedPtr<Common::OutSaveFile> out(_saveFileMan->openForSaving(Common::String::format("teenagent.%02d", slot))); if (!out) @@ -253,7 +253,7 @@ Common::Error TeenAgentEngine::saveGameState(int slot, const char *desc) { res->dseg.set_word(0x64B1, pos.y); assert(res->dseg.size() >= 0x6478 + 0x777a); - strncpy((char *)res->dseg.ptr(0x6478), desc, 0x16); + strncpy((char *)res->dseg.ptr(0x6478), desc.c_str(), 0x16); out->write(res->dseg.ptr(0x6478), 0x777a); if (!Graphics::saveThumbnail(*out)) warning("saveThumbnail failed"); diff --git a/engines/teenagent/teenagent.h b/engines/teenagent/teenagent.h index bc802da8bc..a054f72d25 100644 --- a/engines/teenagent/teenagent.h +++ b/engines/teenagent/teenagent.h @@ -56,7 +56,7 @@ public: virtual Common::Error run(); virtual Common::Error loadGameState(int slot); - virtual Common::Error saveGameState(int slot, const char *desc); + virtual Common::Error saveGameState(int slot, const Common::String &desc); virtual bool canLoadGameStateCurrently() { return true; } virtual bool canSaveGameStateCurrently() { return !scene_busy; } virtual bool hasFeature(EngineFeature f) const; diff --git a/engines/testbed/config.cpp b/engines/testbed/config.cpp index 6adf82952f..6bd4c82b41 100644 --- a/engines/testbed/config.cpp +++ b/engines/testbed/config.cpp @@ -126,10 +126,13 @@ void TestbedOptionsDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, ws = _testbedConfMan->getConfigWriteStream(); _testbedConfMan->writeTestbedConfigToStream(ws); delete ws; - default: - GUI::Dialog::handleCommand(sender, cmd, data); + break; + default: + break; } + + GUI::Dialog::handleCommand(sender, cmd, data); } void TestbedInteractionDialog::addText(uint w, uint h, const Common::String text, Graphics::TextAlign textAlign, uint xOffset, uint yPadding) { @@ -150,7 +153,7 @@ void TestbedInteractionDialog::addButton(uint w, uint h, const Common::String na _yOffset += h; } -void TestbedInteractionDialog::addList(uint x, uint y, uint w, uint h, Common::Array<Common::String> &strArray, GUI::ListWidget::ColorList *colors, uint yPadding) { +void TestbedInteractionDialog::addList(uint x, uint y, uint w, uint h, const Common::Array<Common::String> &strArray, GUI::ListWidget::ColorList *colors, uint yPadding) { _yOffset += yPadding; GUI::ListWidget *list = new GUI::ListWidget(this, x, y, w, h); list->setEditable(false); @@ -159,7 +162,7 @@ void TestbedInteractionDialog::addList(uint x, uint y, uint w, uint h, Common::A _yOffset += h; } -void TestbedInteractionDialog::addButtonXY(uint x, uint y, uint w, uint h, const Common::String name, uint32 cmd) { +void TestbedInteractionDialog::addButtonXY(uint x, uint /* y */, uint w, uint h, const Common::String name, uint32 cmd) { _buttonArray.push_back(new GUI::ButtonWidget(this, x, _yOffset, w, h, name, 0, cmd)); } @@ -174,7 +177,6 @@ void TestbedConfigManager::initDefaultConfiguration() { } void TestbedConfigManager::writeTestbedConfigToStream(Common::WriteStream *ws) { - Common::String wStr; for (Common::Array<Testsuite *>::const_iterator i = _testsuiteList.begin(); i < _testsuiteList.end(); i++) { _configFileInterface.setKey("this", (*i)->getName(), boolToString((*i)->isEnabled())); const Common::Array<Test *> &testList = (*i)->getTestList(); @@ -186,13 +188,13 @@ void TestbedConfigManager::writeTestbedConfigToStream(Common::WriteStream *ws) { ws->flush(); } -Common::SeekableReadStream *TestbedConfigManager::getConfigReadStream() { +Common::SeekableReadStream *TestbedConfigManager::getConfigReadStream() const { // Look for config file using SearchMan Common::SeekableReadStream *rs = SearchMan.createReadStreamForMember(_configFileName); return rs; } -Common::WriteStream *TestbedConfigManager::getConfigWriteStream() { +Common::WriteStream *TestbedConfigManager::getConfigWriteStream() const { // Look for config file in game-path const Common::String &path = ConfMan.get("path"); Common::WriteStream *ws; diff --git a/engines/testbed/config.h b/engines/testbed/config.h index c0df65ad32..fd5588aa31 100644 --- a/engines/testbed/config.h +++ b/engines/testbed/config.h @@ -50,8 +50,8 @@ public: ~TestbedConfigManager() {} void selectTestsuites(); void setConfigFile(const Common::String fName) { _configFileName = fName; } - Common::SeekableReadStream *getConfigReadStream(); - Common::WriteStream *getConfigWriteStream(); + Common::SeekableReadStream *getConfigReadStream() const; + Common::WriteStream *getConfigWriteStream() const; void writeTestbedConfigToStream(Common::WriteStream *ws); Testsuite *getTestsuiteByName(const Common::String &name); bool stringToBool(const Common::String str) { return str.equalsIgnoreCase("true") ? true : false; } @@ -119,7 +119,7 @@ public: void addButton(uint w, uint h, const Common::String name, uint32 cmd, uint xOffset = 0, uint yPadding = 8); void addButtonXY(uint x, uint y, uint w, uint h, const Common::String name, uint32 cmd); void addText(uint w, uint h, const Common::String text, Graphics::TextAlign textAlign, uint xOffset, uint yPadding = 8); - void addList(uint x, uint y, uint w, uint h, Common::Array<Common::String> &strArray, GUI::ListWidget::ColorList *colors = 0, uint yPadding = 8); + void addList(uint x, uint y, uint w, uint h, const Common::Array<Common::String> &strArray, GUI::ListWidget::ColorList *colors = 0, uint yPadding = 8); protected: Common::Array<GUI::ButtonWidget *> _buttonArray; uint _xOffset; diff --git a/engines/testbed/detection.cpp b/engines/testbed/detection.cpp index 91518b2b8e..b869bb8ebb 100644 --- a/engines/testbed/detection.cpp +++ b/engines/testbed/detection.cpp @@ -45,34 +45,11 @@ static const ADGameDescription testbedDescriptions[] = { AD_TABLE_END_MARKER }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)testbedDescriptions, - // Size of that superset structure - sizeof(ADGameDescription), - // Number of bytes to compute MD5 sum for - 512, - // List of all engine targets - testbed_setting, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "testbed", - // List of files for file-based fallback detection (optional) - 0, - // Flags - ADGF_NO_FLAGS, - // Additional GUI options (for every game} - Common::GUIO_NONE, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class TestbedMetaEngine : public AdvancedMetaEngine { public: - TestbedMetaEngine() : AdvancedMetaEngine(detectionParams) { + TestbedMetaEngine() : AdvancedMetaEngine(testbedDescriptions, sizeof(ADGameDescription), testbed_setting) { + _md5Bytes = 512; + _singleid = "testbed"; } virtual const char *getName() const { @@ -83,7 +60,7 @@ public: return "Copyright (C) ScummVM"; } - virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const { + virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription * /* desc */) const { // Instantiate Engine even if the game data is not found. *engine = new Testbed::TestbedEngine(syst); return true; diff --git a/engines/testbed/fs.cpp b/engines/testbed/fs.cpp index e2bedb1898..62ac616192 100644 --- a/engines/testbed/fs.cpp +++ b/engines/testbed/fs.cpp @@ -167,7 +167,7 @@ TestExitStatus FStests::testWriteFile() { return kTestPassed; } - return kTestFailed; + return kTestFailed; } @@ -189,7 +189,7 @@ FSTestSuite::FSTestSuite() { } void FSTestSuite::enable(bool flag) { - Testsuite::enable(ConfParams.isGameDataFound() & flag); + Testsuite::enable(ConfParams.isGameDataFound() ? flag : false); } } // End of namespace Testbed diff --git a/engines/testbed/graphics.cpp b/engines/testbed/graphics.cpp index b38b83f222..36ec726fc7 100644 --- a/engines/testbed/graphics.cpp +++ b/engines/testbed/graphics.cpp @@ -102,7 +102,7 @@ void GFXtests::initMousePalette() { CursorMan.replaceCursorPalette(palette, 0, 3); } -Common::Rect GFXtests::computeSize(Common::Rect &cursorRect, int scalingFactor, int cursorTargetScale) { +Common::Rect GFXtests::computeSize(const Common::Rect &cursorRect, int scalingFactor, int cursorTargetScale) { if (cursorTargetScale == 1 || scalingFactor == 1) { // Game data and cursor would be scaled equally. // so dimensions would be same. @@ -137,7 +137,7 @@ void GFXtests::HSVtoRGB(int &rComp, int &gComp, int &bComp, int hue, int sat, in float f, p, q, t; if (s == 0) { - r = g = b = v * 255; + rComp = gComp = bComp = (int)(v * 255); return; } @@ -186,7 +186,7 @@ void GFXtests::HSVtoRGB(int &rComp, int &gComp, int &bComp, int hue, int sat, in bComp = (int)(b * 255); } -Common::Rect GFXtests::drawCursor(bool cursorPaletteDisabled, const char *gfxModeName, int cursorTargetScale) { +Common::Rect GFXtests::drawCursor(bool cursorPaletteDisabled, int cursorTargetScale) { // Buffer initialized with yellow color byte buffer[500]; memset(buffer, 2, sizeof(buffer)); @@ -244,12 +244,12 @@ void rotatePalette(byte *palette, int size) { */ void GFXtests::setupMouseLoop(bool disableCursorPalette, const char *gfxModeName, int cursorTargetScale) { bool isFeaturePresent; - isFeaturePresent = g_system->hasFeature(OSystem::kFeatureCursorHasPalette); + isFeaturePresent = g_system->hasFeature(OSystem::kFeatureCursorPalette); Common::Rect cursorRect; if (isFeaturePresent) { - cursorRect = GFXtests::drawCursor(disableCursorPalette, gfxModeName, cursorTargetScale); + cursorRect = GFXtests::drawCursor(disableCursorPalette, cursorTargetScale); Common::EventManager *eventMan = g_system->getEventManager(); Common::Event event; @@ -741,7 +741,7 @@ TestExitStatus GFXtests::scaledCursors() { if (isAspectRatioCorrected) { info += "\nDisabling Aspect ratio correction, for letting cusors match exactly, will be restored after this test."; } - + if (Testsuite::handleInteractiveInput(info, "OK", "Skip", kOptionRight)) { Testsuite::logPrintf("Info! Skipping test : Scaled Cursors\n"); return kTestSkipped; @@ -753,7 +753,7 @@ TestExitStatus GFXtests::scaledCursors() { } - if (isAspectRatioCorrected) { + if (isAspectRatioCorrected) { g_system->beginGFXTransaction(); g_system->setFeatureState(OSystem::kFeatureAspectRatioCorrection, false); g_system->endGFXTransaction(); @@ -766,7 +766,7 @@ TestExitStatus GFXtests::scaledCursors() { // for every graphics mode display cursors for cursorTargetScale 1, 2 and 3 // Switch Graphics mode // FIXME: Crashes with "3x" mode now.: - + info = Common::String::format("Testing : Scaled cursors with GFX Mode %s\n", gfxMode->name); if (Testsuite::handleInteractiveInput(info, "OK", "Skip", kOptionRight)) { Testsuite::logPrintf("\tInfo! Skipping sub-test : Scaled Cursors :: GFX Mode %s\n", gfxMode->name); @@ -779,7 +779,7 @@ TestExitStatus GFXtests::scaledCursors() { Testsuite::logPrintf("Info! Explicit exit requested during scaling test, this test may be incomplete\n"); return kTestSkipped; } - + g_system->beginGFXTransaction(); bool isGFXModeSet = g_system->setGraphicsMode(gfxMode->id); @@ -807,7 +807,7 @@ TestExitStatus GFXtests::scaledCursors() { if (Testsuite::handleInteractiveInput(info, "Yes", "No", kOptionRight)) { Testsuite::logPrintf("\tInfo! Failed sub-test : Scaled Cursors :: GFX Mode %s\n", gfxMode->name); } - + if (Engine::shouldQuit()) { // Explicit exit requested Testsuite::logPrintf("Info! Explicit exit requested during scaling test, this test may be incomplete\n"); @@ -824,7 +824,7 @@ TestExitStatus GFXtests::scaledCursors() { if (isAspectRatioCorrected) { g_system->setFeatureState(OSystem::kFeatureAspectRatioCorrection, true); } - + OSystem::TransactionError gfxError = g_system->endGFXTransaction(); if (gfxError != OSystem::kTransactionSuccess || !isGFXModeSet) { @@ -962,13 +962,14 @@ TestExitStatus GFXtests::paletteRotation() { Testsuite::logPrintf("Info! Skipping test : palette Rotation\n"); return kTestSkipped; } - Common::Point pt(0, 10); + Testsuite::clearEntireScreen(); // Use 256 colors byte palette[256 * 3] = {0}; int r, g, b; + r = g = b = 0; int colIndx; for (int i = 0; i < 256; i++) { @@ -1065,7 +1066,6 @@ TestExitStatus GFXtests::pixelFormats() { } Common::List<Graphics::PixelFormat> pfList = g_system->getSupportedFormats(); - Common::List<Graphics::PixelFormat>::const_iterator iter = pfList.begin(); int numFormatsTested = 0; int numPassed = 0; @@ -1073,7 +1073,7 @@ TestExitStatus GFXtests::pixelFormats() { Testsuite::logDetailedPrintf("Testing Pixel Formats. Size of list : %d\n", pfList.size()); - for (iter = pfList.begin(); iter != pfList.end(); iter++) { + for (Common::List<Graphics::PixelFormat>::const_iterator iter = pfList.begin(); iter != pfList.end(); iter++) { numFormatsTested++; if (iter->bytesPerPixel == 1) { // Palettes already tested diff --git a/engines/testbed/graphics.h b/engines/testbed/graphics.h index 7fa8f9d708..f3013fdf53 100644 --- a/engines/testbed/graphics.h +++ b/engines/testbed/graphics.h @@ -32,9 +32,9 @@ namespace GFXtests { void drawEllipse(int x, int y, int a, int b); void setupMouseLoop(bool disableCursorPalette = false, const char *gfxModeName = "", int cursorTargetScale = 1); void initMousePalette(); -Common::Rect computeSize(Common::Rect &cursorRect, int scalingFactor, int cursorTargetScale); +Common::Rect computeSize(const Common::Rect &cursorRect, int scalingFactor, int cursorTargetScale); void HSVtoRGB(int &rComp, int &gComp, int &bComp, int hue, int sat, int val); -Common::Rect drawCursor(bool cursorPaletteDisabled = false, const char *gfxModeName = "", int cursorTargetScale = 1); +Common::Rect drawCursor(bool cursorPaletteDisabled = false, int cursorTargetScale = 1); // will contain function declarations for GFX tests TestExitStatus cursorTrails(); diff --git a/engines/testbed/midi.cpp b/engines/testbed/midi.cpp index 54be866b4c..69d361b0d6 100644 --- a/engines/testbed/midi.cpp +++ b/engines/testbed/midi.cpp @@ -142,12 +142,12 @@ MidiTestSuite::MidiTestSuite() { // add some fallback test if filesystem loading failed Testsuite::logPrintf("Warning! Midi: Sound data file music.mid not found\n"); _isMidiDataFound = false; - enable(false); + MidiTestSuite::enable(false); } } void MidiTestSuite::enable(bool flag) { - Testsuite::enable(_isMidiDataFound & flag); + Testsuite::enable(_isMidiDataFound ? flag : false); } } diff --git a/engines/testbed/misc.cpp b/engines/testbed/misc.cpp index 35b3c6bfe2..034d3eb27e 100644 --- a/engines/testbed/misc.cpp +++ b/engines/testbed/misc.cpp @@ -24,13 +24,12 @@ namespace Testbed { -Common::String MiscTests::getHumanReadableFormat(TimeDate &td) { +Common::String MiscTests::getHumanReadableFormat(const TimeDate &td) { return Common::String::format("%d:%d:%d on %d/%d/%d (dd/mm/yyyy)", td.tm_hour, td.tm_min, td.tm_sec, td.tm_mday, td.tm_mon + 1, td.tm_year + 1900); } void MiscTests::timerCallback(void *arg) { // Increment arg which actually points to an int - // arg must point to a static data, threads otherwise have their own stack int &valToModify = *((int *) arg); valToModify = 999; // some arbitrary value } @@ -110,7 +109,7 @@ TestExitStatus MiscTests::testDateTime() { } TestExitStatus MiscTests::testTimers() { - static int valToModify = 0; + int valToModify = 0; if (g_system->getTimerManager()->installTimerProc(timerCallback, 100000, &valToModify)) { g_system->delayMillis(150); g_system->getTimerManager()->removeTimerProc(timerCallback); @@ -132,7 +131,7 @@ TestExitStatus MiscTests::testMutexes() { Testsuite::writeOnScreen("Installing mutex", Common::Point(0, 100)); } - static SharedVars sv = {1, 1, true, g_system->createMutex()}; + SharedVars sv = {1, 1, true, g_system->createMutex()}; if (g_system->getTimerManager()->installTimerProc(criticalSection, 100000, &sv)) { g_system->delayMillis(150); diff --git a/engines/testbed/misc.h b/engines/testbed/misc.h index 415fe82903..3f0772c6e5 100644 --- a/engines/testbed/misc.h +++ b/engines/testbed/misc.h @@ -40,7 +40,7 @@ namespace MiscTests { // Miscellaneous tests include testing datetime, timers and mutexes // Helper functions for Misc tests -Common::String getHumanReadableFormat(TimeDate &td); +Common::String getHumanReadableFormat(const TimeDate &td); void timerCallback(void *arg); void criticalSection(void *arg); diff --git a/engines/testbed/savegame.cpp b/engines/testbed/savegame.cpp index b19c8e3872..226e9880a6 100644 --- a/engines/testbed/savegame.cpp +++ b/engines/testbed/savegame.cpp @@ -133,11 +133,11 @@ TestExitStatus SaveGametests::testListingSavefile() { writeDataToFile("tBedSavefileToList.1", "Save me!"); writeDataToFile("tBedSavefileToList.2", "Save me!"); - Common::Error error = saveFileMan->getError(); + Common::Error err = saveFileMan->getError(); - if (error.getCode() != Common::kNoError) { + if (err.getCode() != Common::kNoError) { // Abort. Some Error in writing files - Testsuite::logDetailedPrintf("Error while creating savefiles: %s\n", error.getDesc().c_str()); + Testsuite::logDetailedPrintf("Error while creating savefiles: %s\n", err.getDesc().c_str()); return kTestFailed; } @@ -158,11 +158,9 @@ TestExitStatus SaveGametests::testListingSavefile() { } } return kTestPassed; - } else { - Testsuite::logDetailedPrintf("listing Savefiles failed!\n"); - return kTestFailed; } + Testsuite::logDetailedPrintf("listing Savefiles failed!\n"); return kTestFailed; } @@ -173,8 +171,8 @@ TestExitStatus SaveGametests::testErrorMessages() { // Try opening a non existing file readAndVerifyData("tBedSomeNonExistentSaveFile.0", "File doesn't exists!"); - Common::Error error = saveFileMan->getError(); - if (error.getCode() == Common::kNoError) { + Common::Error err = saveFileMan->getError(); + if (err.getCode() == Common::kNoError) { // blunder! how come? Testsuite::logDetailedPrintf("SaveFileMan.getError() failed\n"); return kTestFailed; diff --git a/engines/testbed/sound.h b/engines/testbed/sound.h index 76d0c7bb61..fea7d9d45b 100644 --- a/engines/testbed/sound.h +++ b/engines/testbed/sound.h @@ -69,10 +69,6 @@ public: const char *getDescription() const { return "Sound Subsystem"; } - -private: - bool _isTestDataFound; - }; } // End of namespace Testbed diff --git a/engines/testbed/testbed.cpp b/engines/testbed/testbed.cpp index 41a705e292..152764eb27 100644 --- a/engines/testbed/testbed.cpp +++ b/engines/testbed/testbed.cpp @@ -76,12 +76,16 @@ void TestbedExitDialog::init() { void TestbedExitDialog::handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) { switch (cmd) { + default: + break; + case kCmdRerunTestbed : ConfParams.setRerunFlag(true); cmd = GUI::kCloseCmd; - default: - GUI::Dialog::handleCommand(sender, cmd, data); + break; } + + GUI::Dialog::handleCommand(sender, cmd, data); } bool TestbedEngine::hasFeature(EngineFeature f) const { diff --git a/engines/testbed/testsuite.cpp b/engines/testbed/testsuite.cpp index 77211b3e64..655179aa74 100644 --- a/engines/testbed/testsuite.cpp +++ b/engines/testbed/testsuite.cpp @@ -113,7 +113,7 @@ bool Testsuite::handleInteractiveInput(const Common::String &textToDisplay, cons return prompt.runModal() == result ? true : false; } -void Testsuite::displayMessage(const Common::String &textToDisplay, const char *defaultButton, const char *altButton) { +void Testsuite::displayMessage(const Common::String &textToDisplay, const char *defaultButton) { GUI::MessageDialog prompt(textToDisplay, defaultButton); prompt.runModal(); } @@ -214,10 +214,11 @@ uint Testsuite::parseEvents() { return kSkipNext; } break; + case Common::EVENT_QUIT: case Common::EVENT_RTL: return kEngineQuit; - break; + default: break; } diff --git a/engines/testbed/testsuite.h b/engines/testbed/testsuite.h index 3a3a78b9bb..dc159ce25f 100644 --- a/engines/testbed/testsuite.h +++ b/engines/testbed/testsuite.h @@ -112,7 +112,7 @@ public: */ static bool handleInteractiveInput(const Common::String &textToDisplay, const char *opt1 = "Yes", const char *opt2 = "No", OptionSelected result = kOptionLeft); - static void displayMessage(const Common::String &textToDisplay, const char *defaultButton = "OK", const char *altButton = 0); + static void displayMessage(const Common::String &textToDisplay, const char *defaultButton = "OK"); static Common::Rect writeOnScreen(const Common::String &textToDisplay, const Common::Point &pt, bool flag = false); static void clearScreen(const Common::Rect &rect); static void clearEntireScreen() { @@ -145,7 +145,7 @@ public: static void logPrintf(const char *s, ...) GCC_PRINTF(1, 2); static void logDetailedPrintf(const char *s, ...) GCC_PRINTF(1, 2); - + // Progress bar (Information Display) related methods. /** * Display region is in the bottom. Probably 1/4th of the game screen. @@ -180,7 +180,7 @@ protected: bool _isTsEnabled; private: - + /** * Used from the code to decide if the engine needs to exit */ diff --git a/engines/tinsel/actors.cpp b/engines/tinsel/actors.cpp index 9caa12d320..4e9847f8b4 100644 --- a/engines/tinsel/actors.cpp +++ b/engines/tinsel/actors.cpp @@ -434,7 +434,7 @@ void StartTaggedActors(SCNHANDLE ah, int numActors, bool bRunScript) { memset(taggedActors, 0, sizeof(taggedActors)); numTaggedActors = numActors; } else { - // Only actors with code blocks got (x, y) re-initialised, so... + // Only actors with code blocks got (x, y) re-initialized, so... for (i = 0; i < NumActors; i++) { actorInfo[i].x = actorInfo[i].y = 0; actorInfo[i].mtype = 0; diff --git a/engines/tinsel/background.cpp b/engines/tinsel/background.cpp index 5e2ebaafdc..72397db97f 100644 --- a/engines/tinsel/background.cpp +++ b/engines/tinsel/background.cpp @@ -37,7 +37,7 @@ namespace Tinsel { const BACKGND *pCurBgnd = NULL; /** - * Called to initialise a background. + * Called to initialize a background. * @param pBgnd Pointer to data struct for current background */ diff --git a/engines/tinsel/background.h b/engines/tinsel/background.h index 37ab4d4d5c..34f1bd6dd2 100644 --- a/engines/tinsel/background.h +++ b/engines/tinsel/background.h @@ -73,7 +73,7 @@ struct BACKGND { |* Background Function Prototypes *| \*----------------------------------------------------------------------*/ -void InitBackground( // called to initialise a background +void InitBackground( // called to initialize a background const BACKGND *pBgnd); // pointer to data struct for current background void StartupBackground(CORO_PARAM, SCNHANDLE hFilm); diff --git a/engines/tinsel/bg.cpp b/engines/tinsel/bg.cpp index e5618afc5c..cf692e16ea 100644 --- a/engines/tinsel/bg.cpp +++ b/engines/tinsel/bg.cpp @@ -126,7 +126,7 @@ static void BGmainProcess(CORO_PARAM, const void *param) { // Get the MULTI_INIT structure pmi = (const MULTI_INIT *)LockMem(FROM_LE_32(pReel->mobj)); - // Initialise and insert the object, and initialise its script. + // Initialize and insert the object, and initialize its script. pBG[0] = MultiInitObject(pmi); MultiInsertObject(GetPlayfieldList(FIELD_WORLD), pBG[0]); InitStepAnimScript(&thisAnim[0], pBG[0], FROM_LE_32(pReel->script), BGspeed); @@ -141,7 +141,7 @@ static void BGmainProcess(CORO_PARAM, const void *param) { // Get the MULTI_INIT structure pmi = (PMULTI_INIT) LockMem(FROM_LE_32(pFilm->reels[i].mobj)); - // Initialise and insert the object, and initialise its script. + // Initialize and insert the object, and initialize its script. pBG[i] = MultiInitObject(pmi); MultiInsertObject(GetPlayfieldList(FIELD_WORLD), pBG[i]); MultiSetZPosition(pBG[i], 0); @@ -176,7 +176,7 @@ static void BGmainProcess(CORO_PARAM, const void *param) { pFilm = (const FILM *)LockMem(hBackground); assert(bgReels == (int32)FROM_LE_32(pFilm->numreels)); - // Just re-initialise the scripts. + // Just re-initialize the scripts. for (int i = 0; i < bgReels; i++) { InitStepAnimScript(&thisAnim[i], pBG[i], pFilm->reels[i].script, BGspeed); StepAnimScript(&thisAnim[i]); @@ -202,7 +202,7 @@ static void BGotherProcess(CORO_PARAM, const void *param) { CORO_BEGIN_CODE(_ctx); - // Initialise and insert the object, and initialise its script. + // Initialize and insert the object, and initialize its script. _ctx->pObj = MultiInitObject(pmi); MultiInsertObject(GetPlayfieldList(FIELD_WORLD), _ctx->pObj); diff --git a/engines/tinsel/bmv.cpp b/engines/tinsel/bmv.cpp index db56c5bbba..24d47b920f 100644 --- a/engines/tinsel/bmv.cpp +++ b/engines/tinsel/bmv.cpp @@ -385,7 +385,7 @@ void BMVPlayer::MoviePalette(int paletteOffset) { SetTextPal(talkColor); } -void BMVPlayer::InitialiseMovieSound() { +void BMVPlayer::InitializeMovieSound() { _audioStream = Audio::makeQueuingAudioStream(22050, true); audioStarted = false; } @@ -663,7 +663,7 @@ void BMVPlayer::LoadSlots(int number) { /** * Called from the foreground when starting playback of a movie. */ -void BMVPlayer::InitialiseBMV() { +void BMVPlayer::InitializeBMV() { if (!stream.open(szMovieFile)) error(CANNOT_FIND_FILE, szMovieFile); @@ -680,7 +680,7 @@ void BMVPlayer::InitialiseBMV() { // Pass the sceen buffer to the decompresser InitBMV(screenBuffer); - // Initialise some stuff + // Initialize some stuff nextUseOffset = 0; nextSoundOffset = 0; wrapUseOffset = -1; @@ -705,8 +705,8 @@ void BMVPlayer::InitialiseBMV() { while (numAdvancePackets < ADVANCE_SOUND) LoadSlots(1); - // Initialise the sound channel - InitialiseMovieSound(); + // Initialize the sound channel + InitializeMovieSound(); } /** @@ -1066,7 +1066,7 @@ void BMVPlayer::FettleBMV() { // First time in with this movie - InitialiseBMV(); + InitializeBMV(); for (i = 0; i < ADVANCE_SOUND;) { if (DoSoundFrame()) diff --git a/engines/tinsel/bmv.h b/engines/tinsel/bmv.h index 02ba6d100f..eadf65c3aa 100644 --- a/engines/tinsel/bmv.h +++ b/engines/tinsel/bmv.h @@ -134,7 +134,7 @@ private: void InitBMV(byte *memoryBuffer); void PrepAudio(const byte *sourceData, int blobCount, byte *destPtr); void MoviePalette(int paletteOffset); - void InitialiseMovieSound(); + void InitializeMovieSound(); void StartMovieSound(); void FinishMovieSound(); void MovieAudio(int audioOffset, int blobs); @@ -144,7 +144,7 @@ private: int MovieCommand(char cmd, int commandOffset); int FollowingPacket(int thisPacket, bool bReallyImportant); void LoadSlots(int number); - void InitialiseBMV(); + void InitializeBMV(); bool MaintainBuffer(); bool DoBMVFrame(); bool DoSoundFrame(); diff --git a/engines/tinsel/cliprect.cpp b/engines/tinsel/cliprect.cpp index f8d8011b12..76feede83f 100644 --- a/engines/tinsel/cliprect.cpp +++ b/engines/tinsel/cliprect.cpp @@ -209,7 +209,7 @@ void UpdateClipRect(OBJECT **pObjList, Common::Point *pWin, Common::Rect *pClip) DRAWOBJECT currentObj; // filled in to draw the current object in list OBJECT *pObj; // object list iterator - // Initialise the fields of the drawing object to empty + // Initialize the fields of the drawing object to empty memset(¤tObj, 0, sizeof(DRAWOBJECT)); for (pObj = *pObjList; pObj != NULL; pObj = pObj->pNext) { diff --git a/engines/tinsel/cursor.cpp b/engines/tinsel/cursor.cpp index 6e04feff57..8248609a81 100644 --- a/engines/tinsel/cursor.cpp +++ b/engines/tinsel/cursor.cpp @@ -77,7 +77,7 @@ static int nextTrail = 0; static bool bWhoa = false; // Set by DropCursor() at the end of a scene // - causes cursor processes to do nothing - // Reset when main cursor has re-initialised + // Reset when main cursor has re-initialized static uint16 restart = 0; // When main cursor has been bWhoa-ed, it waits // for this to be set to 0x8000. @@ -106,8 +106,8 @@ static int lastCursorX = 0, lastCursorY = 0; static void DoCursorMove(); /** - * Initialise and insert a cursor trail object, set its Z-pos, and hide - * it. Also initialise its animation script. + * Initialize and insert a cursor trail object, set its Z-pos, and hide + * it. Also initialize its animation script. */ static void InitCurTrailObj(int i, int x, int y) { const FREEL *pfr; // pointer to reel @@ -127,13 +127,13 @@ static void InitCurTrailObj(int i, int x, int y) { assert(BgPal()); // No background palette pim->hImgPal = TO_LE_32(BgPal()); - // Initialise and insert the object, set its Z-pos, and hide it + // Initialize and insert the object, set its Z-pos, and hide it ntrailData[i].trailObj = MultiInitObject(pmi); MultiInsertObject(GetPlayfieldList(FIELD_STATUS), ntrailData[i].trailObj); MultiSetZPosition(ntrailData[i].trailObj, Z_CURSORTRAIL); MultiSetAniXY(ntrailData[i].trailObj, x, y); - // Initialise the animation script + // Initialize the animation script InitStepAnimScript(&ntrailData[i].trailAnim, ntrailData[i].trailObj, FROM_LE_32(pfr->script), ONE_SECOND / FROM_LE_32(pfilm->frate)); StepAnimScript(&ntrailData[i].trailAnim); } @@ -227,7 +227,7 @@ void GetCursorXY(int *x, int *y, bool absolute) { } /** - * Re-initialise the main cursor to use the main cursor reel. + * Re-initialize the main cursor to use the main cursor reel. * Called from TINLIB.C to restore cursor after hiding it. * Called from INVENTRY.C to restore cursor after customising it. */ @@ -385,11 +385,11 @@ void SetAuxCursor(SCNHANDLE hFilm) { ACoY = (short)((FROM_LE_16(pim->imgHeight) & ~C16_FLAG_MASK)/2 - ((int16) FROM_LE_16(pim->anioffY))); - // Initialise and insert the auxillary cursor object + // Initialize and insert the auxillary cursor object AcurObj = MultiInitObject(pmi); MultiInsertObject(GetPlayfieldList(FIELD_STATUS), AcurObj); - // Initialise the animation and set its position + // Initialize the animation and set its position InitStepAnimScript(&AcurAnim, AcurObj, FROM_LE_32(pfr->script), ONE_SECOND / FROM_LE_32(pfilm->frate)); MultiSetAniXY(AcurObj, x - ACoX, y - ACoY); MultiSetZPosition(AcurObj, Z_ACURSOR); @@ -470,7 +470,7 @@ static void DoCursorMove() { } /** - * Initialise cursor object. + * Initialize cursor object. */ static void InitCurObj() { const FILM *pFilm; @@ -500,7 +500,7 @@ static void InitCurObj() { } /** - * Initialise the cursor position. + * Initialize the cursor position. */ static void InitCurPos() { Common::Point ptMouse = _vm->getMousePosition(); @@ -530,7 +530,7 @@ static void CursorStoppedCheck(CORO_PARAM) { while (restart != 0x8000) CORO_SLEEP(1); - // Re-initialise + // Re-initialize InitCurObj(); InitCurPos(); InventoryIconCursor(false); // May be holding something @@ -656,7 +656,7 @@ void DropCursor() { * RestartCursor is called when a new scene is starting up. */ void RestartCursor() { - restart = 0x8000; // Get the main cursor to re-initialise + restart = 0x8000; // Get the main cursor to re-initialize } /** diff --git a/engines/tinsel/detection.cpp b/engines/tinsel/detection.cpp index 27b16c5b93..9c52305a1c 100644 --- a/engines/tinsel/detection.cpp +++ b/engines/tinsel/detection.cpp @@ -63,7 +63,7 @@ uint16 TinselEngine::getVersion() const { return _gameDescription->version; } -} +} // End of namespace Tinsel static const PlainGameDescriptor tinselGames[] = { {"tinsel", "Tinsel engine game"}, @@ -74,34 +74,11 @@ static const PlainGameDescriptor tinselGames[] = { #include "tinsel/detection_tables.h" -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Tinsel::gameDescriptions, - // Size of that superset structure - sizeof(Tinsel::TinselGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - tinselGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "tinsel", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NONE, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - class TinselMetaEngine : public AdvancedMetaEngine { public: - TinselMetaEngine() : AdvancedMetaEngine(detectionParams) {} + TinselMetaEngine() : AdvancedMetaEngine(Tinsel::gameDescriptions, sizeof(Tinsel::TinselGameDescription), tinselGames) { + _singleid = "tinsel"; + } virtual const char *getName() const { return "Tinsel"; @@ -112,7 +89,7 @@ public: } virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const; - const ADGameDescription *fallbackDetect(const Common::FSList &fslist) const; + const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const; virtual bool hasFeature(MetaEngineFeature f) const; virtual SaveStateList listSaves(const char *target) const; @@ -198,7 +175,7 @@ typedef Common::Array<const ADGameDescription*> ADGameDescList; * Fallback detection scans the list of Discworld 2 targets to see if it can detect an installation * where the files haven't been renamed (i.e. don't have the '1' just before the extension) */ -const ADGameDescription *TinselMetaEngine::fallbackDetect(const Common::FSList &fslist) const { +const ADGameDescription *TinselMetaEngine::fallbackDetect(const FileMap &allFilesXXX, const Common::FSList &fslist) const { Common::String extra; FileMap allFiles; SizeMD5Map filesSizeMD5; @@ -265,7 +242,7 @@ const ADGameDescription *TinselMetaEngine::fallbackDetect(const Common::FSList & if (testFile.open(allFiles[fname])) { tmp.size = (int32)testFile.size(); - tmp.md5 = computeStreamMD5AsString(testFile, detectionParams.md5Bytes); + tmp.md5 = computeStreamMD5AsString(testFile, _md5Bytes); } else { tmp.size = -1; } @@ -285,11 +262,6 @@ const ADGameDescription *TinselMetaEngine::fallbackDetect(const Common::FSList & bool fileMissing = false; - if ((detectionParams.flags & kADFlagUseExtraAsHint) && !extra.empty() && g->desc.extra != extra) - continue; - - bool allFilesPresent = true; - // Try to match all files for this game for (fileDesc = g->desc.filesDescriptions; fileDesc->fileName; fileDesc++) { // Get the next filename, stripping off any '1' suffix character @@ -307,7 +279,6 @@ const ADGameDescription *TinselMetaEngine::fallbackDetect(const Common::FSList & if (!filesSizeMD5.contains(tstr)) { fileMissing = true; - allFilesPresent = false; break; } @@ -410,7 +381,7 @@ Common::Error TinselEngine::loadGameState(int slot) { } #if 0 -Common::Error TinselEngine::saveGameState(int slot, const char *desc) { +Common::Error TinselEngine::saveGameState(int slot, const Common::String &desc) { Common::String saveName = _vm->getSavegameFilename((int16)(slot + 1)); char saveDesc[SG_DESC_LEN]; Common::strlcpy(saveDesc, desc, SG_DESC_LEN); diff --git a/engines/tinsel/dialogs.cpp b/engines/tinsel/dialogs.cpp index 6deeab27cd..6ca070b67a 100644 --- a/engines/tinsel/dialogs.cpp +++ b/engines/tinsel/dialogs.cpp @@ -1319,7 +1319,7 @@ extern int WhichItemHeld() { } /** - * Called from the cursor module when it re-initialises (at the start of + * Called from the cursor module when it re-initializes (at the start of * a new scene). For if we are holding something at scene-change time. */ extern void InventoryIconCursor(bool bNewItem) { diff --git a/engines/tinsel/heapmem.cpp b/engines/tinsel/heapmem.cpp index 2376583222..026dc9457e 100644 --- a/engines/tinsel/heapmem.cpp +++ b/engines/tinsel/heapmem.cpp @@ -100,7 +100,7 @@ static void MemoryStats() { #endif /** - * Initialises the memory manager. + * Initializes the memory manager. */ void MemoryInit() { // place first node on free list @@ -133,7 +133,7 @@ void MemoryInit() { } /** - * Deinitialises the memory manager. + * Deinitializes the memory manager. */ void MemoryDeinit() { const MEM_NODE *pHeap = &heapSentinel; diff --git a/engines/tinsel/heapmem.h b/engines/tinsel/heapmem.h index 277463e4ef..7b29a3ecce 100644 --- a/engines/tinsel/heapmem.h +++ b/engines/tinsel/heapmem.h @@ -35,8 +35,8 @@ struct MEM_NODE; |* Memory Function Prototypes *| \*----------------------------------------------------------------------*/ -void MemoryInit(); // initialises the memory manager -void MemoryDeinit(); // deinitialises the memory manager +void MemoryInit(); // initializes the memory manager +void MemoryDeinit(); // deinitializes the memory manager // reserves a memory node for a movable & discardable block MEM_NODE *MemoryNoAlloc(); diff --git a/engines/tinsel/move.cpp b/engines/tinsel/move.cpp index d6b96fee7b..e20f28d528 100644 --- a/engines/tinsel/move.cpp +++ b/engines/tinsel/move.cpp @@ -578,7 +578,7 @@ static void SetMoverUltDest(PMOVER pActor, int x, int y) { * Set intermediate destination. * * If in final destination path, go straight to target. - * If in a neighbouring path to the final destination, if the target path + * If in a neighboring path to the final destination, if the target path * is a follow nodes path, head for the end node, otherwise head straight * for the target. * Otherwise, head towards the pseudo-center or end node of the first diff --git a/engines/tinsel/multiobj.cpp b/engines/tinsel/multiobj.cpp index 4a9d4b65d4..c48fefdd22 100644 --- a/engines/tinsel/multiobj.cpp +++ b/engines/tinsel/multiobj.cpp @@ -29,7 +29,7 @@ namespace Tinsel { /** - * Initialise a multi-part object using a list of images to init + * Initialize a multi-part object using a list of images to init * each object piece. One object is created for each image in the list. * All objects are given the same palette as the first image. A pointer * to the first (master) object created is returned. diff --git a/engines/tinsel/multiobj.h b/engines/tinsel/multiobj.h index a467fac425..a0f977553a 100644 --- a/engines/tinsel/multiobj.h +++ b/engines/tinsel/multiobj.h @@ -53,7 +53,7 @@ typedef MULTI_INIT *PMULTI_INIT; |* Multi Object Function Prototypes *| \*----------------------------------------------------------------------*/ -OBJECT *MultiInitObject( // Initialise a multi-part object +OBJECT *MultiInitObject( // Initialize a multi-part object const MULTI_INIT *pInitTbl); // pointer to multi-object initialisation table void MultiInsertObject( // Insert a multi-part object onto a object list diff --git a/engines/tinsel/object.cpp b/engines/tinsel/object.cpp index b1090058d1..cbe5b0a88f 100644 --- a/engines/tinsel/object.cpp +++ b/engines/tinsel/object.cpp @@ -345,7 +345,7 @@ void GetAniPosition(OBJECT *pObj, int *pPosX, int *pPosY) { } /** - * Initialise a object using a OBJ_INIT structure to supply parameters. + * Initialize a object using a OBJ_INIT structure to supply parameters. * @param pInitTbl Pointer to object initialisation table */ OBJECT *InitObject(const OBJ_INIT *pInitTbl) { @@ -486,7 +486,7 @@ void AnimateObject(OBJECT *pAniObj, SCNHANDLE hNewImg) { * @param height Height of rectangle */ OBJECT *RectangleObject(SCNHANDLE hPal, int color, int width, int height) { - // template for initialising the rectangle object + // template for initializing the rectangle object static const OBJ_INIT rectObj = {0, DMA_CONST, OID_EFFECTS, 0, 0, 0}; PALQ *pPalQ; // palette queue pointer @@ -522,7 +522,7 @@ OBJECT *RectangleObject(SCNHANDLE hPal, int color, int width, int height) { * @param height Height of rectangle */ OBJECT *TranslucentObject(int width, int height) { - // template for initialising the rectangle object + // template for initializing the rectangle object static const OBJ_INIT rectObj = {0, DMA_TRANS, OID_EFFECTS, 0, 0, 0}; // allocate and init a new object diff --git a/engines/tinsel/pcode.cpp b/engines/tinsel/pcode.cpp index 39423813bf..0834e7df24 100644 --- a/engines/tinsel/pcode.cpp +++ b/engines/tinsel/pcode.cpp @@ -348,7 +348,7 @@ void FreeMasterInterpretContext() { } /** - * Allocate and initialise an interpret context. + * Allocate and initialize an interpret context. * Called from a process prior to Interpret(). * @param gsort which sort of code * @param hCode Handle to code to execute @@ -385,7 +385,7 @@ INT_CONTEXT *InitInterpretContext(GSORT gsort, SCNHANDLE hCode, TINSEL_EVENT eve } /** - * Allocate and initialise an interpret context with restored data. + * Allocate and initialize an interpret context with restored data. */ INT_CONTEXT *RestoreInterpretContext(INT_CONTEXT *ric) { INT_CONTEXT *ic; diff --git a/engines/tinsel/pcode.h b/engines/tinsel/pcode.h index eedf9fb827..971a42d7bd 100644 --- a/engines/tinsel/pcode.h +++ b/engines/tinsel/pcode.h @@ -74,7 +74,7 @@ struct INT_CONTEXT { int ip; ///< instruction pointer bool bHalt; ///< set to exit interpeter bool escOn; - int myEscape; ///< only initialised to prevent compiler warning! + int myEscape; ///< only initialized to prevent compiler warning! uint32 waitNumber1; // The waiting numbert uint32 waitNumber2; // The wait for number diff --git a/engines/tinsel/polygons.cpp b/engines/tinsel/polygons.cpp index 26a861f692..6fc1c65ec5 100644 --- a/engines/tinsel/polygons.cpp +++ b/engines/tinsel/polygons.cpp @@ -1275,13 +1275,13 @@ HPOLYGON GetPolyHandle(int i) { // ************************************************************************** // -// Code called to initialise or wrap up a scene: +// Code called to initialize or wrap up a scene: // // ************************************************************************** /** * Called at the start of a scene, when all polygons have been - * initialised, to work out which paths are adjacent to which. + * initialized, to work out which paths are adjacent to which. */ static int DistinctCorners(HPOLYGON hp1, HPOLYGON hp2) { const POLYGON *pp1, *pp2; @@ -1593,7 +1593,7 @@ static PPOLYGON GetPolyEntry() { /** * Variation of GetPolyEntry from Tinsel 1 that splits up getting a new - * polygon structure from initialising it + * polygon structure from initializing it */ static PPOLYGON CommonInits(PTYPE polyType, int pno, const Poly &ptp, bool bRestart) { int i; @@ -1657,14 +1657,14 @@ static void PseudoCenter(POLYGON *p) { } /** - * Initialise an EXIT polygon. + * Initialize an EXIT polygon. */ static void InitExit(const Poly &ptp, int pno, bool bRestart) { CommonInits(EXIT, pno, ptp, bRestart); } /** - * Initialise a PATH or NPATH polygon. + * Initialize a PATH or NPATH polygon. */ static void InitPath(const Poly &ptp, bool NodePath, int pno, bool bRestart) { PPOLYGON p = CommonInits(PATH, pno, ptp, bRestart); @@ -1676,14 +1676,14 @@ static void InitPath(const Poly &ptp, bool NodePath, int pno, bool bRestart) { /** - * Initialise a BLOCKING polygon. + * Initialize a BLOCKING polygon. */ static void InitBlock(const Poly &ptp, int pno, bool bRestart) { CommonInits(BLOCK, pno, ptp, bRestart); } /** - * Initialise an extra BLOCKING polygon related to a moving actor. + * Initialize an extra BLOCKING polygon related to a moving actor. * The width of the polygon depends on the width of the actor which is * trying to walk through the actor you first thought of. * This is for dynamic blocking. @@ -1718,7 +1718,7 @@ HPOLYGON InitExtraBlock(PMOVER ca, PMOVER ta) { } /** - * Initialise an EFFECT polygon. + * Initialize an EFFECT polygon. */ static void InitEffect(const Poly &ptp, int pno, bool bRestart) { CommonInits(EFFECT, pno, ptp, bRestart); @@ -1726,7 +1726,7 @@ static void InitEffect(const Poly &ptp, int pno, bool bRestart) { /** - * Initialise a REFER polygon. + * Initialize a REFER polygon. */ static void InitRefer(const Poly &ptp, int pno, bool bRestart) { PPOLYGON p = CommonInits(REFER, pno, ptp, bRestart); @@ -1736,7 +1736,7 @@ static void InitRefer(const Poly &ptp, int pno, bool bRestart) { /** - * Initialise a TAG polygon. + * Initialize a TAG polygon. */ static void InitTag(const Poly &ptp, int pno, bool bRestart) { CommonInits(TAG, pno, ptp, bRestart); @@ -1781,7 +1781,7 @@ static void KillDeadPolygons() { } /** - * Called at the start of a scene to initialise the polys in that scene. + * Called at the start of a scene to initialize the polys in that scene. */ void InitPolygons(SCNHANDLE ph, int numPoly, bool bRestart) { pHandle = ph; diff --git a/engines/tinsel/saveload.cpp b/engines/tinsel/saveload.cpp index caaf9a13f8..1244168a21 100644 --- a/engines/tinsel/saveload.cpp +++ b/engines/tinsel/saveload.cpp @@ -34,6 +34,7 @@ #include "common/serializer.h" #include "common/savefile.h" #include "common/textconsole.h" +#include "common/translation.h" #include "gui/message.h" @@ -464,7 +465,7 @@ static bool DoRestore() { delete f; if (failed) { - GUI::MessageDialog dialog("Failed to load game state from file."); + GUI::MessageDialog dialog(_("Failed to load game state from file.")); dialog.runModal(); } @@ -542,7 +543,7 @@ save_failure: _vm->getSaveFileMan()->removeSavefile(SaveSceneName); SaveSceneName = NULL; // Invalidate save name } - GUI::MessageDialog dialog("Failed to save game state to file."); + GUI::MessageDialog dialog(_("Failed to save game state to file.")); dialog.runModal(); } diff --git a/engines/tinsel/savescn.cpp b/engines/tinsel/savescn.cpp index 7be24cc964..89d68a611e 100644 --- a/engines/tinsel/savescn.cpp +++ b/engines/tinsel/savescn.cpp @@ -150,14 +150,14 @@ void DoRestoreScene(SAVED_DATA *sd, bool bFadeOut) { RestoreSceneCount = RS_COUNT; // Set restore scene count } -void InitialiseSaveScenes() { +void InitializeSaveScenes() { if (ssData == NULL) { ssData = (SAVED_DATA *)calloc(MAX_NEST, sizeof(SAVED_DATA)); if (ssData == NULL) { error("Cannot allocate memory for scene changes"); } } else { - // Re-initialise - no scenes saved + // Re-initialize - no scenes saved savedSceneCount = 0; } } diff --git a/engines/tinsel/savescn.h b/engines/tinsel/savescn.h index 27840876f2..894af0d6b8 100644 --- a/engines/tinsel/savescn.h +++ b/engines/tinsel/savescn.h @@ -96,7 +96,7 @@ void ProcessSRQueue(); void RequestSaveGame(char *name, char *desc, SAVED_DATA *sd, int *ssCount, SAVED_DATA *ssData); void RequestRestoreGame(int num, SAVED_DATA *sd, int *ssCount, SAVED_DATA *ssData); -void InitialiseSaveScenes(); +void InitializeSaveScenes(); void FreeSaveScenes(); } // End of namespace Tinsel diff --git a/engines/tinsel/scene.cpp b/engines/tinsel/scene.cpp index f2c3bff1d5..89b0da7d65 100644 --- a/engines/tinsel/scene.cpp +++ b/engines/tinsel/scene.cpp @@ -201,8 +201,8 @@ void SendSceneTinselProcess(TINSEL_EVENT event) { /** * Get the SCENE_STRUC - * Initialise polygons for the scene - * Initialise the actors for this scene + * Initialize polygons for the scene + * Initialize the actors for this scene * Run the appropriate entrance code (if any) * Get the default refer type */ @@ -244,10 +244,10 @@ static void LoadScene(SCNHANDLE scene, int entry) { if (entry == NO_ENTRY_NUM) { // Restoring scene - // Initialise all the polygons for this scene + // Initialize all the polygons for this scene InitPolygons(FROM_LE_32(ss->hPoly), FROM_LE_32(ss->numPoly), true); - // Initialise the actors for this scene + // Initialize the actors for this scene StartTaggedActors(FROM_LE_32(ss->hTaggedActor), FROM_LE_32(ss->numTaggedActor), false); if (TinselV2) @@ -257,10 +257,10 @@ static void LoadScene(SCNHANDLE scene, int entry) { } else { // Genuine new scene - // Initialise all the polygons for this scene + // Initialize all the polygons for this scene InitPolygons(FROM_LE_32(ss->hPoly), FROM_LE_32(ss->numPoly), false); - // Initialise the actors for this scene + // Initialize the actors for this scene StartTaggedActors(FROM_LE_32(ss->hTaggedActor), FROM_LE_32(ss->numTaggedActor), true); // Run the appropriate entrance code (if any) diff --git a/engines/tinsel/scroll.cpp b/engines/tinsel/scroll.cpp index 7637664163..d75e649be3 100644 --- a/engines/tinsel/scroll.cpp +++ b/engines/tinsel/scroll.cpp @@ -416,7 +416,7 @@ void ScrollProcess(CORO_PARAM, const void *) { CORO_BEGIN_CODE(_ctx); // In Tinsel v2, scenes may play movies, so the background may not always - // already be initialised like it is in v1 + // already be initialized like it is in v1 while (!GetBgObject()) CORO_SLEEP(1); diff --git a/engines/tinsel/sysvar.cpp b/engines/tinsel/sysvar.cpp index aa3fdeead8..88053f15c6 100644 --- a/engines/tinsel/sysvar.cpp +++ b/engines/tinsel/sysvar.cpp @@ -112,7 +112,7 @@ static SCNHANDLE systemStrings[SS_MAX_VALID]; // FIXME: Avoid non-const global v //----------------- FUNCTIONS -------------------------------- /** - * Initialises the system variable list + * Initializes the system variable list */ void InitSysVars() { diff --git a/engines/tinsel/tinlib.cpp b/engines/tinsel/tinlib.cpp index a5a0c73395..7613c1a897 100644 --- a/engines/tinsel/tinlib.cpp +++ b/engines/tinsel/tinlib.cpp @@ -2749,7 +2749,7 @@ static void SetTag(CORO_PARAM, int tagno) { } /** - * Initialise a timer. + * Initialize a timer. */ static void SetTimer(int timerno, int start, bool up, bool frame) { StartTimer(timerno, start, up != 0, frame != 0); @@ -2999,7 +2999,7 @@ static void StartProcess(CORO_PARAM, uint32 procID) { } /** - * Initialise a timer. + * Initialize a timer. */ static void StartTimerFn(int timerno, int start, bool up, int fs) { StartTimer(timerno, start, up, fs); diff --git a/engines/tinsel/tinsel.cpp b/engines/tinsel/tinsel.cpp index 84a8ea8eb3..80f02ff8d1 100644 --- a/engines/tinsel/tinsel.cpp +++ b/engines/tinsel/tinsel.cpp @@ -705,7 +705,7 @@ void LoadBasicChunks() { int numObjects; // Allocate RAM for savescene data - InitialiseSaveScenes(); + InitializeSaveScenes(); // CHUNK_TOTAL_ACTORS seems to be missing in the released version, hard coding a value // TODO: Would be nice to just change 511 to MAX_SAVED_ALIVES @@ -886,9 +886,7 @@ TinselEngine::~TinselEngine() { } Common::String TinselEngine::getSavegameFilename(int16 saveNum) const { - char filename[256]; - snprintf(filename, 256, "%s.%03d", getTargetName().c_str(), saveNum); - return filename; + return Common::String::format("%s.%03d", getTargetName().c_str(), saveNum); } Common::Error TinselEngine::run() { diff --git a/engines/tinsel/tinsel.h b/engines/tinsel/tinsel.h index d0875f9fdf..30b060766e 100644 --- a/engines/tinsel/tinsel.h +++ b/engines/tinsel/tinsel.h @@ -169,7 +169,7 @@ protected: virtual bool hasFeature(EngineFeature f) const; Common::Error loadGameState(int slot); #if 0 - Common::Error saveGameState(int slot, const char *desc); + Common::Error saveGameState(int slot, const Common::String &desc); #endif bool canLoadGameStateCurrently(); #if 0 diff --git a/engines/toon/audio.cpp b/engines/toon/audio.cpp index 46b96286b3..0bf3316209 100644 --- a/engines/toon/audio.cpp +++ b/engines/toon/audio.cpp @@ -232,8 +232,8 @@ AudioStreamInstance::AudioStreamInstance(AudioManager *man, Audio::Mixer *mixer, _mixer = mixer; _compBuffer = NULL; _bufferOffset = 0; - _lastADPCMval1 = 0; - _lastADPCMval2 = 0; + _lastSample = 0; + _lastStepIndex = 0; _file = stream; _fadingIn = false; _fadingOut = false; @@ -307,8 +307,8 @@ bool AudioStreamInstance::readPacket() { if (_looping) { _file->seek(8); _currentReadSize = 8; - _lastADPCMval1 = 0; - _lastADPCMval2 = 0; + _lastSample = 0; + _lastStepIndex = 0; } else { _bufferSize = 0; stopNow(); @@ -342,58 +342,54 @@ bool AudioStreamInstance::readPacket() { void AudioStreamInstance::decodeADPCM(uint8 *comp, int16 *dest, int32 packetSize) { debugC(5, kDebugAudio, "decodeADPCM(comp, dest, %d)", packetSize); + // standard IMA ADPCM decoding int32 numSamples = 2 * packetSize; - int32 v18 = _lastADPCMval1; - int32 v19 = _lastADPCMval2; + int32 samp = _lastSample; + int32 stepIndex = _lastStepIndex; for (int32 i = 0; i < numSamples; i++) { uint8 comm = *comp; + bool isOddSample = (i & 1); - int32 v29 = i & 1; - int32 v30; - if (v29 == 0) - v30 = comm & 0xf; + uint8 code; + if (!isOddSample) + code = comm & 0xf; else - v30 = (comm & 0xf0) >> 4; + code = (comm & 0xf0) >> 4; - int32 v31 = v30 & 0x8; - int32 v32 = v30 & 0x7; - int32 v33 = Audio::Ima_ADPCMStream::_imaTable[v19]; - int32 v34 = v33 >> 3; - if (v32 & 4) - v34 += v33; + uint8 sample = code & 0x7; - if (v32 & 2) - v34 += v33 >> 1; + int32 step = Audio::Ima_ADPCMStream::_imaTable[stepIndex]; + int32 E = step >> 3; + if (sample & 4) + E += step; + if (sample & 2) + E += step >> 1; + if (sample & 1) + E += step >> 2; - if (v32 & 1) - v34 += v33 >> 2; + stepIndex += Audio::ADPCMStream::_stepAdjustTable[sample]; + stepIndex = CLIP<int32>(stepIndex, 0, ARRAYSIZE(Audio::Ima_ADPCMStream::_imaTable) - 1); - v19 += Audio::ADPCMStream::_stepAdjustTable[v32]; - v19 = CLIP<int32>(v19, 0, ARRAYSIZE(Audio::Ima_ADPCMStream::_imaTable) - 1); - - if (v31) - v18 -= v34; + if (code & 0x8) + samp -= E; else - v18 += v34; + samp += E; - if (v18 > 32767) - v18 = 32767; - else if (v18 < -32768) - v18 = -32768; + samp = CLIP<int32>(samp, -32768, 32767); - *dest = v18; - comp += v29; + *dest = samp; + if (isOddSample) + comp++; dest++; } - _lastADPCMval1 = v18; - _lastADPCMval2 = v19; + _lastSample = samp; + _lastStepIndex = stepIndex; } void AudioStreamInstance::play(bool fade, Audio::Mixer::SoundType soundType) { debugC(1, kDebugAudio, "play(%d)", (fade) ? 1 : 0); - Audio::SoundHandle soundHandle; _stopped = false; _fadingIn = fade; _fadeTime = 0; diff --git a/engines/toon/audio.h b/engines/toon/audio.h index 52ca21b075..61a534265e 100644 --- a/engines/toon/audio.h +++ b/engines/toon/audio.h @@ -84,8 +84,8 @@ protected: Audio::SoundHandle _handle; Audio::Mixer::SoundType _soundType; Audio::Mixer *_mixer; - int32 _lastADPCMval1; - int32 _lastADPCMval2; + int32 _lastSample; + int32 _lastStepIndex; bool _stopped; AudioManager *_man; int32 _totalSize; diff --git a/engines/toon/detection.cpp b/engines/toon/detection.cpp index 1056f6ec0d..810a37720a 100644 --- a/engines/toon/detection.cpp +++ b/engines/toon/detection.cpp @@ -28,7 +28,7 @@ #include "graphics/thumbnail.h" #include "toon/toon.h" -static const PlainGameDescriptor ToonGames[] = { +static const PlainGameDescriptor toonGames[] = { { "toon", "Toonstruck" }, { 0, 0 } }; @@ -117,34 +117,17 @@ static const char * const directoryGlobs[] = { 0 }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Toon::gameDescriptions, - // Size of that superset structure - sizeof(ADGameDescription), - // Number of bytes to compute MD5 sum for - 5000, - // List of all engine targets - ToonGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "toon", - // List of files for file-based fallback detection (optional) - Toon::fileBasedFallback, - // Flags - 0, - // Additional GUI options (for every game} - Common::GUIO_NONE, - // Maximum directory depth - 3, - // List of directory globs - directoryGlobs -}; - class ToonMetaEngine : public AdvancedMetaEngine { public: - ToonMetaEngine() : AdvancedMetaEngine(detectionParams) {} + ToonMetaEngine() : AdvancedMetaEngine(Toon::gameDescriptions, sizeof(ADGameDescription), toonGames) { + _singleid = "toon"; + _maxScanDepth = 3; + _directoryGlobs = directoryGlobs; + } + + virtual const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const { + return detectGameFilebased(allFiles, Toon::fileBasedFallback); + } virtual const char *getName() const { return "Toon"; diff --git a/engines/toon/script_func.cpp b/engines/toon/script_func.cpp index 693f308707..005a299502 100644 --- a/engines/toon/script_func.cpp +++ b/engines/toon/script_func.cpp @@ -312,13 +312,13 @@ int32 ScriptFunc::sys_Cmd_Flip_Screens(EMCState *state) { int32 ScriptFunc::sys_Cmd_Play_Flic(EMCState *state) { - char name[256]; + Common::String name; // workaround for the video of the beginning if (strstr(GetText(0, state), "209")) - sprintf(name, "%s", GetText(0, state)); + name = GetText(0, state); else - strcpy(name, _vm->createRoomFilename(GetText(0, state)).c_str()); + name = _vm->createRoomFilename(GetText(0, state)); int32 stopMusic = stackPos(2); _vm->getMoviePlayer()->play(name, stopMusic); diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp index 44c747c4c4..0e0978b3d6 100644 --- a/engines/toon/toon.cpp +++ b/engines/toon/toon.cpp @@ -28,6 +28,7 @@ #include "common/savefile.h" #include "common/memstream.h" +#include "engines/advancedDetector.h" #include "engines/util.h" #include "graphics/palette.h" #include "graphics/surface.h" @@ -215,15 +216,13 @@ void ToonEngine::parseInput() { if (slotNum >= 0 && slotNum <= 9 && canSaveGameStateCurrently()) { if (saveGame(slotNum, Common::String())) { // ok - char buf[256]; - snprintf(buf, 256, "Saved game in slot #%d ", slotNum); + Common::String buf = Common::String::format("Saved game in slot #%d ", slotNum); GUI::TimedMessageDialog dialog(buf, 1000); dialog.runModal(); } else { - char buf[256]; - snprintf(buf, 256, "Could not quick save into slot #%d", slotNum); - GUI::MessageDialog dialog2(buf, "OK", 0); - dialog2.runModal(); + Common::String buf = Common::String::format("Could not quick save into slot #%d", slotNum); + GUI::MessageDialog dialog(buf, "OK", 0); + dialog.runModal(); } } @@ -234,15 +233,13 @@ void ToonEngine::parseInput() { if (slotNum >= 0 && slotNum <= 9 && canLoadGameStateCurrently()) { if (loadGame(slotNum)) { // ok - char buf[256]; - snprintf(buf, 256, "Savegame #%d quick loaded", slotNum); + Common::String buf = Common::String::format("Savegame #%d quick loaded", slotNum); GUI::TimedMessageDialog dialog(buf, 1000); dialog.runModal(); } else { - char buf[256]; - snprintf(buf, 256, "Could not quick load the savegame #%d", slotNum); + Common::String buf = Common::String::format("Could not quick load the savegame #%d", slotNum); GUI::MessageDialog dialog(buf, "OK", 0); - warning("%s", buf); + warning("%s", buf.c_str()); dialog.runModal(); } } @@ -404,15 +401,15 @@ void ToonEngine::render() { //_drew->plotPath(*_mainSurface); // used to debug path finding #if 0 - char test[256]; if (_mouseX > 0 && _mouseX < 640 && _mouseY > 0 && _mouseY < 400) { - sprintf(test, "%d %d / mask %d layer %d z %d", _mouseX, _mouseY, getMask()->getData(_mouseX, _mouseY), getLayerAtPoint(_mouseX, _mouseY), getZAtPoint(_mouseX, _mouseY)); + Common::String test; + test = Common::String::format("%d %d / mask %d layer %d z %d", _mouseX, _mouseY, getMask()->getData(_mouseX, _mouseY), getLayerAtPoint(_mouseX, _mouseY), getZAtPoint(_mouseX, _mouseY)); int32 c = *(uint8 *)_mainSurface->getBasePtr(_mouseX, _mouseY); - sprintf(test, "%d %d / color id %d %d,%d,%d", _mouseX, _mouseY, c, _finalPalette[c * 3 + 0], _finalPalette[c * 3 + 1], _finalPalette[c * 3 + 2]); + test = Common::String::format("%d %d / color id %d %d,%d,%d", _mouseX, _mouseY, c, _finalPalette[c * 3 + 0], _finalPalette[c * 3 + 1], _finalPalette[c * 3 + 2]); _fontRenderer->setFont(_fontToon); - _fontRenderer->renderText(40, 150, Common::String(test), 0); + _fontRenderer->renderText(40, 150, test, 0); } #endif @@ -466,20 +463,24 @@ void ToonEngine::doMagnifierEffect() { byte tempBuffer[25 * 25]; for (int32 y = -12; y <= 12; y++) { + int32 cy = CLIP<int32>(posY + y, 0, TOON_BACKBUFFER_HEIGHT-1); for (int32 x = -12; x <= 12; x++) { + int32 cx = CLIP<int32>(posX + x, 0, TOON_BACKBUFFER_WIDTH-1); int32 destPitch = surface.pitch; - uint8 *curRow = (uint8 *)surface.pixels + (posY + y) * destPitch + (posX + x); + uint8 *curRow = (uint8 *)surface.pixels + cy * destPitch + cx; tempBuffer[(y + 12) * 25 + x + 12] = *curRow; } } for (int32 y = -12; y <= 12; y++) { + int32 cy = CLIP<int32>(posY + y, 0, TOON_BACKBUFFER_HEIGHT-1); for (int32 x = -12; x <= 12; x++) { int32 dist = y * y + x * x; if (dist > 144) continue; + int32 cx = CLIP<int32>(posX + x, 0, TOON_BACKBUFFER_WIDTH-1); int32 destPitch = surface.pitch; - uint8 *curRow = (uint8 *)surface.pixels + (posY + y) * destPitch + (posX + x); + uint8 *curRow = (uint8 *)surface.pixels + cy * destPitch + cx; int32 lerp = (512 + intSqrt[dist] * 256 / 12); *curRow = tempBuffer[(y * lerp / 1024 + 12) * 25 + x * lerp / 1024 + 12]; } @@ -4566,26 +4567,27 @@ void ToonEngine::createShadowLUT() { bool ToonEngine::loadToonDat() { Common::File in; - char buf[256]; + Common::String msg; int majVer, minVer; in.open("toon.dat"); if (!in.isOpen()) { - Common::String errorMessage = "You're missing the 'toon.dat' file. Get it from the ScummVM website"; - GUIErrorMessage(errorMessage); - warning("%s", errorMessage.c_str()); + msg = "You're missing the 'toon.dat' file. Get it from the ScummVM website"; + GUIErrorMessage(msg); + warning("%s", msg.c_str()); return false; } // Read header + char buf[4+1]; in.read(buf, 4); buf[4] = '\0'; if (strcmp(buf, "TOON")) { - Common::String errorMessage = "File 'toon.dat' is corrupt. Get it from the ScummVM website"; - GUIErrorMessage(errorMessage); - warning("%s", errorMessage.c_str()); + msg = "File 'toon.dat' is corrupt. Get it from the ScummVM website"; + GUIErrorMessage(msg); + warning("%s", msg.c_str()); return false; } @@ -4593,9 +4595,9 @@ bool ToonEngine::loadToonDat() { minVer = in.readByte(); if ((majVer != TOON_DAT_VER_MAJ) || (minVer != TOON_DAT_VER_MIN)) { - snprintf(buf, 256, "File 'toon.dat' is wrong version. Expected %d.%d but got %d.%d. Get it from the ScummVM website", TOON_DAT_VER_MAJ, TOON_DAT_VER_MIN, majVer, minVer); - GUIErrorMessage(buf); - warning("%s", buf); + msg = Common::String::format("File 'toon.dat' is wrong version. Expected %d.%d but got %d.%d. Get it from the ScummVM website", TOON_DAT_VER_MAJ, TOON_DAT_VER_MIN, majVer, minVer); + GUIErrorMessage(msg); + warning("%s", msg.c_str()); return false; } diff --git a/engines/toon/toon.h b/engines/toon/toon.h index 1eaa5022a9..65c6ba0234 100644 --- a/engines/toon/toon.h +++ b/engines/toon/toon.h @@ -23,7 +23,6 @@ #ifndef TOON_TOON_H #define TOON_TOON_H -#include "engines/advancedDetector.h" #include "engines/engine.h" #include "graphics/surface.h" #include "common/random.h" @@ -44,6 +43,8 @@ namespace Common { class MemoryWriteStreamDynamic; } +struct ADGameDescription; + #define TOON_DAT_VER_MAJ 0 // 1 byte #define TOON_DAT_VER_MIN 3 // 1 byte #define TOON_SAVEGAME_VERSION 4 @@ -318,7 +319,7 @@ public: return _shouldQuit; } - Common::Error saveGameState(int slot, const char *desc) { + Common::Error saveGameState(int slot, const Common::String &desc) { return (saveGame(slot, desc) ? Common::kWritingFailed : Common::kNoError); } diff --git a/engines/touche/detection.cpp b/engines/touche/detection.cpp index b7f9c092aa..0684144473 100644 --- a/engines/touche/detection.cpp +++ b/engines/touche/detection.cpp @@ -24,6 +24,7 @@ #include "engines/advancedDetector.h" #include "common/savefile.h" #include "common/system.h" +#include "common/translation.h" #include "base/plugins.h" @@ -126,34 +127,31 @@ static const char *directoryGlobs[] = { 0 }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)Touche::gameDescriptions, - // Size of that superset structure - sizeof(ADGameDescription), - // Number of bytes to compute MD5 sum for - 4096, - // List of all engine targets - toucheGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "touche", - // List of files for file-based fallback detection (optional) - Touche::fileBasedFallback, - // Flags - kADFlagPrintWarningOnFileBasedFallback, - // Additional GUI options (for every game} - Common::GUIO_NONE, - // Maximum directory depth - 2, - // List of directory globs - directoryGlobs -}; - class ToucheMetaEngine : public AdvancedMetaEngine { public: - ToucheMetaEngine() : AdvancedMetaEngine(detectionParams) {} + ToucheMetaEngine() : AdvancedMetaEngine(Touche::gameDescriptions, sizeof(ADGameDescription), toucheGames) { + _md5Bytes = 4096; + _singleid = "touche"; + _maxScanDepth = 2; + _directoryGlobs = directoryGlobs; + } + + virtual const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const { + const ADGameDescription *matchedDesc = detectGameFilebased(allFiles, Touche::fileBasedFallback); + + if (matchedDesc) { // We got a match + Common::String report = Common::String::format(_("Your game version has been detected using " + "filename matching as a variant of %s."), matchedDesc->gameid); + report += "\n"; + report += _("If this is an original and unmodified version, please report any"); + report += "\n"; + report += _("information previously printed by ScummVM to the team."); + report += "\n"; + g_system->logMessage(LogMessageType::kInfo, report.c_str()); + } + + return matchedDesc; + } virtual const char *getName() const { return "Touche"; diff --git a/engines/touche/saveload.cpp b/engines/touche/saveload.cpp index 82ed03ad45..7732c6deb9 100644 --- a/engines/touche/saveload.cpp +++ b/engines/touche/saveload.cpp @@ -319,7 +319,7 @@ void ToucheEngine::loadGameStateData(Common::ReadStream *stream) { debug(0, "Loaded state, current episode %d", _currentEpisodeNum); } -Common::Error ToucheEngine::saveGameState(int num, const char *description) { +Common::Error ToucheEngine::saveGameState(int num, const Common::String &description) { bool saveOk = false; Common::String gameStateFileName = generateGameStateFileName(_targetName.c_str(), num); Common::OutSaveFile *f = _saveFileMan->openForSaving(gameStateFileName); @@ -328,7 +328,7 @@ Common::Error ToucheEngine::saveGameState(int num, const char *description) { f->writeUint16LE(0); char headerDescription[kGameStateDescriptionLen]; memset(headerDescription, 0, kGameStateDescriptionLen); - strncpy(headerDescription, description, kGameStateDescriptionLen - 1); + strncpy(headerDescription, description.c_str(), kGameStateDescriptionLen - 1); f->write(headerDescription, kGameStateDescriptionLen); saveGameStateData(f); f->finalize(); @@ -380,9 +380,7 @@ Common::String generateGameStateFileName(const char *target, int slot, bool pref if (prefixOnly) { name += ".*"; } else { - char slotStr[16]; - snprintf(slotStr, sizeof(slotStr), ".%d", slot); - name += slotStr; + name += Common::String::format(".%d", slot); } return name; } diff --git a/engines/touche/touche.h b/engines/touche/touche.h index c8d7504754..cbb3fec7aa 100644 --- a/engines/touche/touche.h +++ b/engines/touche/touche.h @@ -385,8 +385,6 @@ public: protected: - bool detectGame(); - void restart(); void readConfigurationSettings(); void writeConfigurationSettings(); @@ -513,7 +511,7 @@ protected: void saveGameStateData(Common::WriteStream *stream); void loadGameStateData(Common::ReadStream *stream); - virtual Common::Error saveGameState(int num, const char *description); + virtual Common::Error saveGameState(int num, const Common::String &description); virtual Common::Error loadGameState(int num); virtual bool canLoadGameStateCurrently(); virtual bool canSaveGameStateCurrently(); diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index 41ee021432..4603379c78 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -21,6 +21,7 @@ */ #include "common/system.h" +#include "common/config-manager.h" #include "engines/engine.h" #include "graphics/palette.h" #include "tsage/tsage.h" @@ -521,24 +522,30 @@ void PlayerMover::pathfind(Common::Point *routeList, Common::Point srcPos, Commo break; } - int var6; - proc1(routeRegions, srcRegion, destRegion, var6); + bool tempVar; // This is used only as internal state for the function. + calculateRestOfRoute(routeRegions, srcRegion, destRegion, tempVar); + // Empty route? if (!routeRegions[0]) { regionIndexes.push_back(destRegion); continue; } - _globals->_walkRegions._field18[0]._pt1 = srcPos; - _globals->_walkRegions._field18[0]._pt2 = srcPos; - _globals->_walkRegions._field18[1]._pt1 = destPos; - _globals->_walkRegions._field18[1]._pt2 = destPos; + // field 0 holds the start, and field 1 holds the destination + WRField18 &currSrcField = _globals->_walkRegions._field18[0]; + WRField18 &currDestField = _globals->_walkRegions._field18[1]; + + currSrcField._pt1 = srcPos; + currSrcField._pt2 = srcPos; + currDestField._pt1 = destPos; + currDestField._pt2 = destPos; int tempList[REGION_LIST_SIZE]; tempList[0] = 0; int endIndex = 0; int idx = 1; + // Find the indexes for each entry in the found route. do { int breakEntry = routeRegions[idx]; int breakEntry2 = routeRegions[idx + 1]; @@ -556,49 +563,52 @@ void PlayerMover::pathfind(Common::Point *routeList, Common::Point srcPos, Commo tempList[idx] = 1; for (int listIndex = 1; listIndex <= endIndex; ++listIndex) { - int var10 = tempList[listIndex]; - int var12 = tempList[listIndex + 1]; + int thisIdx = tempList[listIndex]; + int nextIdx = tempList[listIndex + 1]; + + WRField18 &thisField = _globals->_walkRegions._field18[thisIdx]; + WRField18 &nextField = _globals->_walkRegions._field18[nextIdx]; - if (sub_F8E5(_globals->_walkRegions._field18[0]._pt1, _globals->_walkRegions._field18[var12]._pt1, - _globals->_walkRegions._field18[var10]._pt1, _globals->_walkRegions._field18[var10]._pt2) && - sub_F8E5(_globals->_walkRegions._field18[0]._pt1, _globals->_walkRegions._field18[var12]._pt2, - _globals->_walkRegions._field18[var10]._pt1, _globals->_walkRegions._field18[var10]._pt2)) + if (sub_F8E5_calculatePoint(currSrcField._pt1, nextField._pt1, + thisField._pt1, thisField._pt2) && + sub_F8E5_calculatePoint(currSrcField._pt1, nextField._pt2, + thisField._pt1, thisField._pt2)) continue; Common::Point tempPt; - if (sub_F8E5(_globals->_walkRegions._field18[0]._pt1, _globals->_walkRegions._field18[1]._pt1, - _globals->_walkRegions._field18[var10]._pt1, _globals->_walkRegions._field18[var10]._pt2, &tempPt)) { + if (sub_F8E5_calculatePoint(currSrcField._pt1, currDestField._pt1, + thisField._pt1, thisField._pt2, &tempPt)) { // Add point to the route list - _globals->_walkRegions._field18[0]._pt1 = tempPt; + currSrcField._pt1 = tempPt; *routeList++ = tempPt; } else { - int v16 = - (findDistance(_globals->_walkRegions._field18[0]._pt1, _globals->_walkRegions._field18[var10]._pt1) << 1) + - (findDistance(_globals->_walkRegions._field18[var10]._pt1, _globals->_walkRegions._field18[1]._pt1) << 1) + - findDistance(_globals->_walkRegions._field18[var10]._pt1, _globals->_walkRegions._field18[var12]._pt1) + - findDistance(_globals->_walkRegions._field18[var10]._pt1, _globals->_walkRegions._field18[var12]._pt2); - - int v1A = - (findDistance(_globals->_walkRegions._field18[0]._pt1, _globals->_walkRegions._field18[var10]._pt2) << 1) + - (findDistance(_globals->_walkRegions._field18[var10]._pt2, _globals->_walkRegions._field18[1]._pt2) << 1) + - findDistance(_globals->_walkRegions._field18[var10]._pt2, _globals->_walkRegions._field18[var12]._pt1) + - findDistance(_globals->_walkRegions._field18[var10]._pt2, _globals->_walkRegions._field18[var12]._pt2); - - if (v16 < v1A) { - checkMovement2(_globals->_walkRegions._field18[var10]._pt1, - _globals->_walkRegions._field18[var10]._pt2, 1, objPos); + int dist1 = + (findDistance(currSrcField._pt1, thisField._pt1) << 1) + + (findDistance(thisField._pt1, currDestField._pt1) << 1) + + findDistance(thisField._pt1, nextField._pt1) + + findDistance(thisField._pt1, nextField._pt2); + + int dist2 = + (findDistance(currSrcField._pt1, thisField._pt2) << 1) + + (findDistance(thisField._pt2, currDestField._pt2) << 1) + + findDistance(thisField._pt2, nextField._pt1) + + findDistance(thisField._pt2, nextField._pt2); + + // Do 1 step of movement, storing the new position in objPos. + if (dist1 < dist2) { + doStepsOfNpcMovement(thisField._pt1, thisField._pt2, 1, objPos); } else { - checkMovement2(_globals->_walkRegions._field18[var10]._pt2, - _globals->_walkRegions._field18[var10]._pt1, 1, objPos); + doStepsOfNpcMovement(thisField._pt2, thisField._pt1, 1, objPos); } - _globals->_walkRegions._field18[0]._pt1 = objPos; + // Update the current position. + currSrcField._pt1 = objPos; *routeList++ = objPos; } } // Add in the route entry - *routeList++ = _globals->_walkRegions._field18[1]._pt1; + *routeList++ = currDestField._pt1; } // Mark the end of the path @@ -746,7 +756,7 @@ int PlayerMover::checkMover(Common::Point &srcPos, const Common::Point &destPos) return regionIndex; } -void PlayerMover::checkMovement2(const Common::Point &srcPos, const Common::Point &destPos, int numSteps, Common::Point &ptOut) { +void PlayerMover::doStepsOfNpcMovement(const Common::Point &srcPos, const Common::Point &destPos, int numSteps, Common::Point &ptOut) { Common::Point objPos = _sceneObject->_position; _sceneObject->_position = srcPos; uint32 regionBitList = _sceneObject->_regionBitList; @@ -771,9 +781,10 @@ void PlayerMover::checkMovement2(const Common::Point &srcPos, const Common::Poin _sceneObject->_mover = this; } -int PlayerMover::proc1(int *routeList, int srcRegion, int destRegion, int &v) { +int PlayerMover::calculateRestOfRoute(int *routeList, int srcRegion, int destRegion, bool &foundRoute) { + // Make a copy of the provided route. The first entry is the size. int tempList[REGION_LIST_SIZE + 1]; - v = 0; + foundRoute = false; for (int idx = 0; idx <= *routeList; ++idx) tempList[idx] = routeList[idx]; @@ -791,24 +802,28 @@ int PlayerMover::proc1(int *routeList, int srcRegion, int destRegion, int &v) { WalkRegion &srcWalkRegion = _globals->_walkRegions[srcRegion]; int distance; if (!routeList[0]) { - // No route + // The route is empty (new route). distance = 0; } else { + // Find the distance from the last region in the route. WalkRegion ®ion = _globals->_walkRegions[routeList[*routeList]]; distance = findDistance(srcWalkRegion._pt, region._pt); } + // Add the srcRegion to the end of the route. tempList[++*tempList] = srcRegion; - int newIndex = *tempList; + int ourListSize = *tempList; if (srcRegion == destRegion) { - v = 1; - for (int idx = newIndex; idx <= *tempList; ++idx) { + // We made a route to the destination; copy that route and return. + foundRoute = true; + for (int idx = ourListSize; idx <= *tempList; ++idx) { routeList[idx] = tempList[idx]; ++*routeList; } return distance; } else { + // Find the first connected region leading to our destination. int foundIndex = 0; int idx = 0; int currDest; @@ -821,27 +836,32 @@ int PlayerMover::proc1(int *routeList, int srcRegion, int destRegion, int &v) { ++idx; } - int resultOffset = 31990; - while (((currDest = _globals->_walkRegions._idxList[srcWalkRegion._idxListIndex + foundIndex]) != 0) && (v == 0)) { - int newDistance = proc1(tempList, currDest, destRegion, v); + // Check every connected region until we find a route to the destination (or we have no more to check). + int bestDistance = 31990; + while (((currDest = _globals->_walkRegions._idxList[srcWalkRegion._idxListIndex + foundIndex]) != 0) && (!foundRoute)) { + int newDistance = calculateRestOfRoute(tempList, currDest, destRegion, foundRoute); - if ((newDistance <= resultOffset) || v) { - routeList[0] = newIndex - 1; + if ((newDistance <= bestDistance) || foundRoute) { + // We found a shorter possible route, or one leading to the destination. - for (int i = newIndex; i <= tempList[0]; ++i) { + // Overwrite the route with this new one. + routeList[0] = ourListSize - 1; + + for (int i = ourListSize; i <= tempList[0]; ++i) { routeList[i] = tempList[i]; ++routeList[0]; } - resultOffset = newDistance; + bestDistance = newDistance; } - tempList[0] = newIndex; + // Truncate our local list to the size it was before the call. + tempList[0] = ourListSize; ++foundIndex; } - v = 0; - return resultOffset + distance; + foundRoute = false; + return bestDistance + distance; } } @@ -855,71 +875,62 @@ int PlayerMover::findDistance(const Common::Point &pt1, const Common::Point &pt2 return (int)sqrt(xx + yy); } -bool PlayerMover::sub_F8E5(const Common::Point &pt1, const Common::Point &pt2, const Common::Point &pt3, +bool PlayerMover::sub_F8E5_calculatePoint(const Common::Point &pt1, const Common::Point &pt2, const Common::Point &pt3, const Common::Point &pt4, Common::Point *ptOut) { - double diff1 = pt2.x - pt1.x; - double diff2 = pt2.y - pt1.y; - double diff3 = pt4.x - pt3.x; - double diff4 = pt4.y - pt3.y; - double var10 = 0.0, var8 = 0.0; - double var18 = 0.0, var20 = 0.0; + double diffX1 = pt2.x - pt1.x; + double diffY1 = pt2.y - pt1.y; + double diffX2 = pt4.x - pt3.x; + double diffY2 = pt4.y - pt3.y; + double ratio1 = 0.0, ratio2 = 0.0; + double adjustedY1 = 0.0, adjustedY2 = 0.0; - if (diff1 != 0.0) { - var8 = diff2 / diff1; - var18 = pt1.y - (pt1.x * var8); + // Calculate the ratios between the X and Y points. + if (diffX1 != 0.0) { + ratio1 = diffY1 / diffX1; + adjustedY1 = pt1.y - (pt1.x * ratio1); } - if (diff3 != 0.0) { - var10 = diff4 / diff3; - var20 = pt3.y - (pt3.x * var10); + if (diffX2 != 0.0) { + ratio2 = diffY2 / diffX2; + adjustedY2 = pt3.y - (pt3.x * ratio2); } - if (var8 == var10) + if (ratio1 == ratio2) return false; - double var48, var50; - if (diff1 == 0) { - if (diff3 == 0) + double xPos, yPos; + if (diffX1 == 0) { + if (diffX2 == 0) return false; - var48 = pt1.x; - var50 = var10 * var48 + var20; + xPos = pt1.x; + yPos = ratio2 * xPos + adjustedY2; } else { - var48 = (diff3 == 0) ? pt3.x : (var20 - var18) / (var8 - var10); - var50 = var8 * var48 + var18; + xPos = (diffX2 == 0) ? pt3.x : (adjustedY2 - adjustedY1) / (ratio1 - ratio2); + yPos = ratio1 * xPos + adjustedY1; } - bool var52 = false, var56 = false, var54 = false, var58 = false; - Common::Point tempPt((int)(var48 + 0.5), (int)(var50 + 0.5)); + // This is our candidate point, which we must check for validity. + Common::Point tempPt((int)(xPos + 0.5), (int)(yPos + 0.5)); - if ((tempPt.x >= pt3.x) && (tempPt.x <= pt4.x)) - var56 = true; - else if ((tempPt.x >= pt4.x) && (tempPt.x <= pt3.x)) - var56 = true; - if (var56) { - if ((tempPt.y >= pt3.y) && (tempPt.y <= pt4.y)) - var58 = true; - else if ((tempPt.y >= pt4.y) && (tempPt.y <= pt3.y)) - var58 = true; - } - - if ((tempPt.x >= pt1.x) && (tempPt.x <= pt2.x)) - var52 = true; - else if ((tempPt.x >= pt2.x) && (tempPt.x <= pt1.x)) - var52 = true; - if (var52) { - if ((tempPt.y >= pt1.y) && (tempPt.y <= pt2.y)) - var54 = true; - else if ((tempPt.y >= pt2.y) && (tempPt.y <= pt1.y)) - var54 = true; - } + // Is tempPt inside the second bounds? + if (!((tempPt.x >= pt3.x) && (tempPt.x <= pt4.x))) + if (!((tempPt.x >= pt4.x) && (tempPt.x <= pt3.x))) + return false; + if (!((tempPt.y >= pt3.y) && (tempPt.y <= pt4.y))) + if (!((tempPt.y >= pt4.y) && (tempPt.y <= pt3.y))) + return false; - if (var52 && var54 && var56 && var58) { - if (ptOut) - *ptOut = tempPt; - return true; - } + // Is tempPt inside the first bounds? + if (!((tempPt.x >= pt1.x) && (tempPt.x <= pt2.x))) + if (!((tempPt.x >= pt2.x) && (tempPt.x <= pt1.x))) + return false; + if (!((tempPt.y >= pt1.y) && (tempPt.y <= pt2.y))) + if (!((tempPt.y >= pt2.y) && (tempPt.y <= pt1.y))) + return false; - return false; + if (ptOut) + *ptOut = tempPt; + return true; } /*--------------------------------------------------------------------------*/ @@ -1353,6 +1364,8 @@ void ScenePalette::changeBackground(const Rect &bounds, FadeMode fadeMode) { void ScenePalette::synchronize(Serializer &s) { if (s.getVersion() >= 2) SavedObject::synchronize(s); + if (s.getVersion() >= 5) + _listeners.synchronize(s); s.syncBytes(_palette, 256 * 3); s.syncAsSint32LE(_colors.foreground); @@ -1688,6 +1701,7 @@ SceneObject::SceneObject() : SceneHotspot() { _flags |= OBJFLAG_PANES; _frameChange = 0; + _visage = 0; } SceneObject::SceneObject(const SceneObject &so) : SceneHotspot() { @@ -2563,6 +2577,9 @@ void SceneText::synchronize(Serializer &s) { s.syncAsSint16LE(_color2); s.syncAsSint16LE(_color3); SYNC_ENUM(_textMode, TextAlign); + + if (s.getVersion() >= 5) + _textSurface.synchronize(s); } /*--------------------------------------------------------------------------*/ diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 6c30c4fe19..b86e2f63fe 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -228,12 +228,12 @@ protected: int regionIndexOf(int xp, int yp) { return regionIndexOf(Common::Point(xp, yp)); } int findClosestRegion(Common::Point &pt, const Common::List<int> &indexList); int checkMover(Common::Point &srcPos, const Common::Point &destPos); - void checkMovement2(const Common::Point &pt1, const Common::Point &pt2, int numSteps, Common::Point &ptOut); - int proc1(int *routeList, int srcRegion, int destRegion, int &v); + void doStepsOfNpcMovement(const Common::Point &pt1, const Common::Point &pt2, int numSteps, Common::Point &ptOut); + int calculateRestOfRoute(int *routeList, int srcRegion, int destRegion, bool &foundRoute); static Common::Point *findLinePoint(RouteEnds *routeEnds, Common::Point *objPos, int length, Common::Point *outPos); static int findDistance(const Common::Point &pt1, const Common::Point &pt2); - static bool sub_F8E5(const Common::Point &pt1, const Common::Point &pt2, const Common::Point &pt3, + static bool sub_F8E5_calculatePoint(const Common::Point &pt1, const Common::Point &pt2, const Common::Point &pt3, const Common::Point &pt4, Common::Point *ptOut = NULL); public: Common::Point _finalDest; diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp index 42ae366ced..5288c98b72 100644 --- a/engines/tsage/debugger.cpp +++ b/engines/tsage/debugger.cpp @@ -63,13 +63,13 @@ bool Debugger::Cmd_Scene(int argc, const char **argv) { if (argc < 2) { DebugPrintf("Usage: %s <scene number> [prior scene #]\n", argv[0]); return true; - } else { - if (argc == 3) - _globals->_sceneManager._sceneNumber = strToInt(argv[2]); + } - _globals->_sceneManager.changeScene(strToInt(argv[1])); - return false; - } + if (argc == 3) + _globals->_sceneManager._sceneNumber = strToInt(argv[2]); + + _globals->_sceneManager.changeScene(strToInt(argv[1])); + return false; } /** @@ -377,7 +377,8 @@ bool Debugger::Cmd_MoveObject(int argc, const char **argv) { RING_INVENTORY._jar._sceneNumber = sceneNum; break; default: - DebugPrintf("Invlid object Id %s\n", argv[1]); + DebugPrintf("Invalid object Id %s\n", argv[1]); + break; } return true; diff --git a/engines/tsage/detection.cpp b/engines/tsage/detection.cpp index 20c2002257..aaa9030a04 100644 --- a/engines/tsage/detection.cpp +++ b/engines/tsage/detection.cpp @@ -66,25 +66,16 @@ static const PlainGameDescriptor tSageGameTitles[] = { #include "engines/tsage/detection_tables.h" -static const ADParams detectionParams = { - (const byte *)tSage::gameDescriptions, - sizeof(tSage::tSageGameDescription), - 0, - tSageGameTitles, - 0, - "tsage", - NULL, - 0, - Common::GUIO_NONE, - 0, - NULL +enum { + MAX_SAVES = 100 }; -#define MAX_SAVES 100 - class TSageMetaEngine : public AdvancedMetaEngine { public: - TSageMetaEngine() : AdvancedMetaEngine(detectionParams) { + TSageMetaEngine() : AdvancedMetaEngine(tSage::gameDescriptions, sizeof(tSage::tSageGameDescription), tSageGameTitles) { + _md5Bytes = 5000; + _singleid = "tsage"; + _guioptions = Common::GUIO_NOSPEECH; } virtual const char *getName() const { diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h index dc55f2a66d..2b64222425 100644 --- a/engines/tsage/detection_tables.h +++ b/engines/tsage/detection_tables.h @@ -24,7 +24,7 @@ namespace tSage { static const tSageGameDescription gameDescriptions[] = { - // Ringworld English CD version + // Ringworld CD and First Wave versions { { "ring", @@ -32,21 +32,7 @@ static const tSageGameDescription gameDescriptions[] = { AD_ENTRY1s("ring.rlb", "466f0e6492d9d0f34d35c5cd088de90f", 37847618), Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, - Common::GUIO_NONE - }, - GType_Ringworld, - GF_CD | GF_ALT_REGIONS - }, - // Ringworld First Wave English CD version - { - { - "ring", - "CD", - AD_ENTRY1s("ring.rlb", "0a25b4ee58d44a54425c0b47e5096bbc", 37847618), - Common::EN_ANY, - Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_Ringworld, @@ -57,10 +43,10 @@ static const tSageGameDescription gameDescriptions[] = { { "ring", "Floppy", - AD_ENTRY1s("ring.rlb", "61f78f68a56832ae95fe06748c403234", 8438770), + AD_ENTRY1s("ring.rlb", "7b7f0c5b37b58fa5ec06ebb2ca0d0d9d", 8438770), Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_Ringworld, @@ -71,7 +57,7 @@ static const tSageGameDescription gameDescriptions[] = { { "ring", "Floppy Demo", - AD_ENTRY1s("tsage.rlb", "bf4e8525d0cab84b08b57126092eeacd", 833453), + AD_ENTRY1s("tsage.rlb", "3b3604a97c06c91f3735d3e9d341f63f", 833453), Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, @@ -80,12 +66,13 @@ static const tSageGameDescription gameDescriptions[] = { GType_Ringworld, GF_FLOPPY | GF_DEMO }, + // Ringworld English Floppy Demo #2 version { { "ring", "Floppy Demo", - AD_ENTRY1s("demoring.rlb", "9ecf48e088a0d475778fab480b3dbdd0", 832206), + AD_ENTRY1s("demoring.rlb", "64050e1806203b15bb03876140eb4f56", 832206), Common::EN_ANY, Common::kPlatformPC, ADGF_DEMO, @@ -94,27 +81,29 @@ static const tSageGameDescription gameDescriptions[] = { GType_Ringworld, GF_FLOPPY | GF_DEMO | GF_ALT_REGIONS }, - - // Blue Force +#if 0 + // FIXME: Compute new MD5s based on 5000 bytes instead of 0 (unlimited) + // Blue Force floppy { { "blueforce", - "", - AD_ENTRY1s("blue.rlb", "467da43c848cc0e800b547c59d84ccb1", 10032614), + "Floppy", + AD_ENTRY1s("blue.rlb", "17c3993415e8a2cf93040eef7e88ec93", 1156508), Common::EN_ANY, Common::kPlatformPC, - ADGF_NO_FLAGS, + ADGF_UNSTABLE, Common::GUIO_NONE }, GType_BlueForce, GF_FLOPPY }, - // Blue Force floppy +#endif + // Blue Force { { "blueforce", - "Floppy", - AD_ENTRY1s("blue.rlb", "17c3993415e8a2cf93040eef7e88ec93", 1156508), + "", + AD_ENTRY1s("blue.rlb", "17eabb456cb1546c66baf1aff387ba6a", 10032614), Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS, @@ -128,7 +117,7 @@ static const tSageGameDescription gameDescriptions[] = { { "blueforce", "CD", - AD_ENTRY1s("blue.rlb", "ac29f38184cb3b874ea18523059872ba", 63863322), + AD_ENTRY1s("blue.rlb", "99983f48cb218f1f3760cf2f9a7ef11d", 63863322), Common::EN_ANY, Common::kPlatformPC, ADGF_NO_FLAGS, diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp index 759deebbef..c1bd1d027f 100644 --- a/engines/tsage/dialogs.cpp +++ b/engines/tsage/dialogs.cpp @@ -43,21 +43,20 @@ MessageDialog::MessageDialog(const Common::String &message, const Common::String const Common::String &btn2Message) : GfxDialog() { // Set up the message addElements(&_msg, &_btn1, NULL); - + _msg.set(message, 200, ALIGN_LEFT); - _btn1._bounds.moveTo(_msg._bounds.left, _msg._bounds.bottom + 2); + _msg._bounds.moveTo(0, 0); _defaultButton = &_btn1; // Set up the first button _btn1.setText(btn1Message); - _btn1._bounds.moveTo(_msg._bounds.right - _btn1._bounds.width(), _msg._bounds.bottom); + _btn1._bounds.moveTo(_msg._bounds.right - _btn1._bounds.width(), _msg._bounds.bottom + 2); if (!btn2Message.empty()) { // Set up the second button - _defaultButton = &_btn2; add(&_btn2); _btn2.setText(btn2Message); - _btn2._bounds.moveTo(_msg._bounds.right - _btn2._bounds.width(), _msg._bounds.bottom); + _btn2._bounds.moveTo(_msg._bounds.right - _btn2._bounds.width(), _msg._bounds.bottom + 2); _btn1._bounds.translate(-(_btn2._bounds.width() + 4), 0); } @@ -82,8 +81,9 @@ int MessageDialog::show2(const Common::String &message, const Common::String &bt MessageDialog *dlg = new MessageDialog(message, btn1Message, btn2Message); dlg->draw(); - GfxButton *selectedButton = dlg->execute(); - int result = (selectedButton == &dlg->_btn1) ? 0 : 1; + GfxButton *defaultButton = !btn2Message.empty() ? &dlg->_btn2 : &dlg->_btn1; + GfxButton *selectedButton = dlg->execute(defaultButton); + int result = (selectedButton == defaultButton) ? 1 : 0; delete dlg; return result; @@ -473,7 +473,7 @@ void InventoryDialog::execute() { g_system->updateScreen(); } if (_vm->getEventManager()->shouldQuit()) - return; + break; hiliteObj = NULL; if ((event.eventType == EVENT_BUTTON_DOWN) && !_bounds.contains(event.mousePos)) diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp index 6149ce301d..50077fecaf 100644 --- a/engines/tsage/events.cpp +++ b/engines/tsage/events.cpp @@ -309,4 +309,14 @@ void EventsClass::delay(int numFrames) { _priorFrameTime = g_system->getMillis(); } +void EventsClass::listenerSynchronize(Serializer &s) { + s.syncAsUint32LE(_frameNumber); + s.syncAsUint32LE(_prevDelayFrame); + + if (s.getVersion() >= 5) { + s.syncAsSint16LE(_currentCursor); + s.syncAsSint16LE(_lastCursor); + } +} + } // end of namespace tSage diff --git a/engines/tsage/events.h b/engines/tsage/events.h index 9a7bdbe82c..a13455d378 100644 --- a/engines/tsage/events.h +++ b/engines/tsage/events.h @@ -98,11 +98,7 @@ public: uint32 getFrameNumber() const { return _frameNumber; } void delay(int numFrames); - virtual void listenerSynchronize(Serializer &s) { - s.syncAsUint32LE(_frameNumber); - s.syncAsUint32LE(_prevDelayFrame); - // TODO: Synchronize unknown stuff - } + virtual void listenerSynchronize(Serializer &s); }; } // End of namespace tSage diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index 39a974173b..b0f6db53c6 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -50,26 +50,42 @@ static SavedObject *classFactoryProc(const Common::String &className) { /*--------------------------------------------------------------------------*/ -Globals::Globals() : - _dialogCenter(160, 140), - _gfxManagerInstance(_screenSurface), - _randomSource("tsage") { +Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface), + _randomSource("tsage"), _unkColor1(0), _unkColor2(255), _unkColor3(255) { reset(); _stripNum = 0; + _gfxEdgeAdjust = 3; if (_vm->getFeatures() & GF_DEMO) { _gfxFontNumber = 0; _gfxColors.background = 6; _gfxColors.foreground = 0; - _fontColors.background = 0; - _fontColors.foreground = 0; + _fontColors.background = 255; + _fontColors.foreground = 6; _dialogCenter.y = 80; + // Workaround in order to use later version of the engine + _unkColor1 = _gfxColors.foreground; + _unkColor2 = _gfxColors.foreground; + _unkColor3 = _gfxColors.foreground; + } else if ((_vm->getGameID() == GType_Ringworld) && (_vm->getFeatures() & GF_CD)) { + _gfxFontNumber = 50; + _gfxColors.background = 53; + _gfxColors.foreground = 0; + _fontColors.background = 51; + _fontColors.foreground = 54; + _unkColor1 = 18; + _unkColor2 = 18; + _unkColor3 = 18; } else { _gfxFontNumber = 50; _gfxColors.background = 53; _gfxColors.foreground = 18; _fontColors.background = 51; _fontColors.foreground = 54; + // Workaround in order to use later version of the engine + _unkColor1 = _gfxColors.foreground; + _unkColor2 = _gfxColors.foreground; + _unkColor3 = _gfxColors.foreground; } _screenSurface.setScreenSurface(); _gfxManagers.push_back(&_gfxManagerInstance); @@ -124,6 +140,12 @@ void Globals::synchronize(Serializer &s) { s.syncAsSint32LE(_gfxColors.foreground); s.syncAsSint32LE(_fontColors.background); s.syncAsSint32LE(_fontColors.foreground); + + if (s.getVersion() >= 4) { + s.syncAsByte(_unkColor1); + s.syncAsByte(_unkColor2); + s.syncAsByte(_unkColor3); + } s.syncAsSint16LE(_dialogCenter.x); s.syncAsSint16LE(_dialogCenter.y); _sceneListeners.synchronize(s); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index fb1f3657b4..3635fcc3fa 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -52,6 +52,7 @@ public: int _gfxFontNumber; GfxColors _gfxColors; GfxColors _fontColors; + byte _unkColor1, _unkColor2, _unkColor3; SoundManager _soundManager; Common::Point _dialogCenter; WalkRegions _walkRegions; @@ -68,6 +69,7 @@ public: SequenceManager _sequenceManager; Common::RandomSource _randomSource; int _stripNum; + int _gfxEdgeAdjust; public: Globals(); ~Globals(); diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 29262447f2..25dc897ecd 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -207,7 +207,7 @@ void Rect::expandPanes() { } /** - * Serializes the given rect + * Serialises the given rect */ void Rect::synchronize(Serializer &s) { s.syncAsSint16LE(left); @@ -304,6 +304,43 @@ void GfxSurface::unlockSurface() { } } +void GfxSurface::synchronize(Serializer &s) { + assert(!_lockSurfaceCtr); + assert(!_screenSurface); + + s.syncAsByte(_disableUpdates); + _bounds.synchronize(s); + s.syncAsSint16LE(_centroid.x); + s.syncAsSint16LE(_centroid.y); + s.syncAsSint16LE(_transColor); + + if (s.isSaving()) { + // Save contents of the surface + if (_customSurface) { + s.syncAsSint16LE(_customSurface->w); + s.syncAsSint16LE(_customSurface->h); + s.syncBytes((byte *)_customSurface->pixels, _customSurface->w * _customSurface->h); + } else { + int zero = 0; + s.syncAsSint16LE(zero); + s.syncAsSint16LE(zero); + } + } else { + int w, h; + s.syncAsSint16LE(w); + s.syncAsSint16LE(h); + + if ((w == 0) || (h == 0)) { + if (_customSurface) + delete _customSurface; + _customSurface = NULL; + } else { + create(w, h); + s.syncBytes((byte *)_customSurface->pixels, w * h); + } + } +} + /** * Fills a specified rectangle on the surface with the specified color * @@ -589,6 +626,9 @@ void GfxElement::setDefaults() { _fontNumber = _globals->_gfxFontNumber; _colors = _globals->_gfxColors; _fontColors = _globals->_fontColors; + _unkColor1 = _globals->_unkColor1; + _unkColor2 = _globals->_unkColor2; + _unkColor3 = _globals->_unkColor3; } /** @@ -602,7 +642,7 @@ void GfxElement::highlight() { // Scan through the contents of the element, switching any occurances of the foreground // color with the background color and vice versa Rect tempRect(_bounds); - tempRect.collapse(2, 2); + tempRect.collapse(_globals->_gfxEdgeAdjust - 1, _globals->_gfxEdgeAdjust - 1); for (int yp = tempRect.top; yp < tempRect.bottom; ++yp) { byte *lineP = (byte *)surface.getBasePtr(tempRect.left, yp); @@ -634,7 +674,7 @@ void GfxElement::drawFrame() { } Rect tempRect = _bounds; - tempRect.collapse(3, 3); + tempRect.collapse(_globals->_gfxEdgeAdjust, _globals->_gfxEdgeAdjust); tempRect.collapse(-1, -1); gfxManager.fillRect(tempRect, _colors.background); @@ -783,7 +823,10 @@ void GfxMessage::draw() { // Set the font and color gfxManager.setFillFlag(false); gfxManager._font.setFontNumber(_fontNumber); - gfxManager._font._colors.foreground = this->_colors.foreground; + + gfxManager._font._colors.foreground = this->_unkColor1; + gfxManager._font._colors2.background = this->_unkColor2; + gfxManager._font._colors2.foreground = this->_unkColor3; // Display the text gfxManager._font.writeLines(_message.c_str(), _bounds, _textAlign); @@ -803,8 +846,10 @@ void GfxButton::setDefaults() { gfxManager._font.getStringBounds(_message.c_str(), tempRect, 240); tempRect.right = ((tempRect.right + 15) / 16) * 16; - // Set the button bounds to a reduced area - tempRect.collapse(-3, -3); + // Set the button bounds + tempRect.collapse(-_globals->_gfxEdgeAdjust, -_globals->_gfxEdgeAdjust); + if (_vm->getFeatures() & GF_CD) + --tempRect.top; tempRect.moveTo(_bounds.left, _bounds.top); _bounds = tempRect; } @@ -820,11 +865,17 @@ void GfxButton::draw() { // Set the font and color gfxManager._font.setFontNumber(_fontNumber); - gfxManager._font._colors.foreground = this->_colors.foreground; + + // + gfxManager._font._colors.foreground = this->_unkColor1; + gfxManager._font._colors2.background = this->_unkColor2; + gfxManager._font._colors2.foreground = this->_unkColor3; // Display the button's text Rect tempRect(_bounds); - tempRect.collapse(3, 3); + tempRect.collapse(_globals->_gfxEdgeAdjust, _globals->_gfxEdgeAdjust); + if (_vm->getFeatures() & GF_CD) + ++tempRect.top; gfxManager._font.writeLines(_message.c_str(), tempRect, ALIGN_CENTER); gfxManager.unlockSurface(); @@ -874,7 +925,7 @@ GfxDialog::~GfxDialog() { void GfxDialog::setDefaults() { GfxElement::setDefaults(); - // Initialise the embedded graphics manager + // Initialize the embedded graphics manager _gfxManager.setDefaults(); // Figure out a rect needed for all the added elements @@ -885,7 +936,7 @@ void GfxDialog::setDefaults() { // Set the dialog boundaries _gfxManager._bounds = tempRect; - tempRect.collapse(-6, -6); + tempRect.collapse(-_globals->_gfxEdgeAdjust * 2, -_globals->_gfxEdgeAdjust * 2); _bounds = tempRect; } @@ -915,7 +966,7 @@ void GfxDialog::draw() { drawFrame(); // Reset the dialog's graphics manager to only draw within the dialog boundaries - tempRect.translate(6, 6); + tempRect.translate(_globals->_gfxEdgeAdjust * 2, _globals->_gfxEdgeAdjust * 2); _gfxManager._bounds = tempRect; // Draw each element in the dialog in order @@ -952,7 +1003,7 @@ void GfxDialog::addElements(GfxElement *ge, ...) { } void GfxDialog::setTopLeft(int xp, int yp) { - _bounds.moveTo(xp - 6, yp - 6); + _bounds.moveTo(xp - _globals->_gfxEdgeAdjust * 2, yp - _globals->_gfxEdgeAdjust * 2); } void GfxDialog::setCenter(int xp, int yp) { @@ -1209,7 +1260,7 @@ int GfxFont::getStringWidth(const char *s) { /** * Returns the maximum number of characters for words that will fit into a given width * - * @s Message to be analysed + * @s Message to be analyzed * @maxWidth Maximum allowed width */ int GfxFont::getStringFit(const char *&s, int maxWidth) { @@ -1255,7 +1306,7 @@ int GfxFont::getStringFit(const char *&s, int maxWidth) { * Fills out the passed rect with the dimensions of a given string word-wrapped to a * maximum specified width * - * @s Message to be analysed + * @s Message to be analyzed * @bounds Rectangle to put output size into * @maxWidth Maximum allowed line width in pixels */ diff --git a/engines/tsage/graphics.h b/engines/tsage/graphics.h index b269520039..e09e1093a3 100644 --- a/engines/tsage/graphics.h +++ b/engines/tsage/graphics.h @@ -91,6 +91,7 @@ public: void setScreenSurface(); Graphics::Surface lockSurface(); void unlockSurface(); + void synchronize(Serializer &s); void create(int width, int height); void setBounds(const Rect &bounds) { _bounds = bounds; } const Rect &getBounds() const { return _bounds; } @@ -176,6 +177,7 @@ public: uint16 _fontNumber; GfxColors _colors; GfxColors _fontColors; + byte _unkColor1, _unkColor2, _unkColor3; uint16 _keycode; public: GfxElement(); diff --git a/engines/tsage/ringworld_demo.cpp b/engines/tsage/ringworld_demo.cpp index 4d3b527ac7..4f905d5bec 100644 --- a/engines/tsage/ringworld_demo.cpp +++ b/engines/tsage/ringworld_demo.cpp @@ -40,17 +40,7 @@ Scene *RingworldDemoGame::createScene(int sceneNumber) { } void RingworldDemoGame::quitGame() { - _globals->_events.setCursor(CURSOR_ARROW); - MessageDialog *dlg = new MessageDialog(DEMO_EXIT_MSG, EXIT_BTN_STRING, DEMO_BTN_STRING); - dlg->draw(); - - GfxButton *selectedButton = dlg->execute(&dlg->_btn2); - bool exitFlag = selectedButton != &dlg->_btn2; - - delete dlg; - _globals->_events.hideCursor(); - - if (exitFlag) + if (MessageDialog::show(DEMO_EXIT_MSG, EXIT_BTN_STRING, DEMO_BTN_STRING) == 0) _vm->quitGame(); } diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp index 022e706f36..4c60e5fea9 100644 --- a/engines/tsage/ringworld_logic.cpp +++ b/engines/tsage/ringworld_logic.cpp @@ -1334,8 +1334,12 @@ void RingworldGame::start() { RING_INVENTORY._scanner._sceneNumber = 1; RING_INVENTORY._ring._sceneNumber = 1; - // Switch to the title screen - _globals->_sceneManager.setNewScene(1000); + + if (ConfMan.hasKey("save_slot")) + _globals->_sceneHandler._loadGameSlot = ConfMan.getInt("save_slot"); + else + // Switch to the title screen + _globals->_sceneManager.setNewScene(1000); _globals->_events.showCursor(); } @@ -1409,7 +1413,10 @@ void RingworldGame::endGame(int resNum, int lineNum) { // Savegames exist, so prompt for Restore/Restart bool breakFlag; do { - if (MessageDialog::show(msg, RESTART_BTN_STRING, RESTORE_BTN_STRING) == 0 || _vm->shouldQuit()) { + if (_vm->shouldQuit()) { + breakFlag = true; + } else if (MessageDialog::show(msg, RESTART_BTN_STRING, RESTORE_BTN_STRING) == 0) { + restart(); breakFlag = true; } else { handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName); diff --git a/engines/tsage/ringworld_scenes1.cpp b/engines/tsage/ringworld_scenes1.cpp index 9d261ac074..9f8aedbfc1 100644 --- a/engines/tsage/ringworld_scenes1.cpp +++ b/engines/tsage/ringworld_scenes1.cpp @@ -2999,6 +2999,13 @@ void Scene6100::Action5::dispatch() { if ((idx != 3) && (scene->_fadePercent == 100) && (tempSet.sqrt(zeroSet) < 150.0)) { switch (scene->_hitCount++) { + case 0: + scene->_soundHandler.play(233); + scene->showMessage(NULL, 0, NULL); + + if (!_globals->getFlag(76)) + scene->_probe.setAction(&scene->_action1); + break; case 1: scene->_soundHandler.play(233); scene->showMessage(NULL, 0, NULL); @@ -3006,7 +3013,6 @@ void Scene6100::Action5::dispatch() { if (!_globals->getFlag(76)) scene->_probe.setAction(&scene->_action2); break; - case 2: scene->_soundHandler.play(234); scene->showMessage(NULL, 0, NULL); @@ -3015,14 +3021,6 @@ void Scene6100::Action5::dispatch() { scene->_probe.setAction(NULL); scene->setAction(&scene->_action3); break; - - default: - scene->_soundHandler.play(233); - scene->showMessage(NULL, 0, NULL); - - if (!_globals->getFlag(76)) - scene->_probe.setAction(&scene->_action1); - break; } _globals->_scenePalette.clearListeners(); @@ -3104,6 +3102,18 @@ void Scene6100::Action7::signal() { /*--------------------------------------------------------------------------*/ +void Scene6100::Object::synchronize(Serializer &s) { + SceneObject::synchronize(s); + + // Save the double fields of the FloatSet + s.syncBytes((byte *)&_floats._float1, sizeof(double)); + s.syncBytes((byte *)&_floats._float2, sizeof(double)); + s.syncBytes((byte *)&_floats._float3, sizeof(double)); + s.syncBytes((byte *)&_floats._float4, sizeof(double)); +} + +/*--------------------------------------------------------------------------*/ + void Scene6100::ProbeMover::dispatch() { Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene; @@ -3125,14 +3135,43 @@ void Scene6100::Item1::doAction(int action) { /*--------------------------------------------------------------------------*/ +Scene6100::Scene6100(): Scene() { + _objList[0] = &_sunflower1; + _objList[1] = &_sunflower2; + _objList[2] = &_sunflower3; + _objList[3] = &_rocks; + + _speed = 30; + _fadePercent = 100; + _rocksCheck = false; + _hitCount = 0; + _turnAmount = 0; + _angle = 0; + _msgActive = false; + + _globals->_sceneHandler._delayTicks = 8; + + _globals->_player.disableControl(); + _globals->_events.setCursor(CURSOR_WALK); +} + +void Scene6100::synchronize(Serializer &s) { + Scene::synchronize(s); + + s.syncAsSint16LE(_speed); + s.syncAsSint16LE(_fadePercent); + s.syncAsByte(_rocksCheck); + s.syncAsByte(_msgActive); + s.syncAsSint16LE(_hitCount); + s.syncAsSint16LE(_turnAmount); + s.syncAsSint16LE(_angle); +} + void Scene6100::postInit(SceneObjectList *OwnerList) { loadScene(6100); Scene::postInit(); setZoomPercents(62, 2, 200, 425); - _globals->_sceneHandler._delayTicks = 8; - _globals->_player.disableControl(); - _globals->_events.setCursor(CURSOR_WALK); _stripManager.addSpeaker(&_speakerQR); _stripManager.addSpeaker(&_speakerSL); @@ -3180,11 +3219,6 @@ void Scene6100::postInit(SceneObjectList *OwnerList) { _probe._floats._float3 = 0.0; _probe.hide(); - _objList[0] = &_sunflower1; - _objList[1] = &_sunflower2; - _objList[2] = &_sunflower3; - _objList[3] = &_rocks; - int baseVal = 2000; for (int idx = 0; idx < 3; ++idx) { _objList[idx]->_floats._float1 = _globals->_randomSource.getRandomNumber(999); @@ -3203,14 +3237,6 @@ void Scene6100::postInit(SceneObjectList *OwnerList) { _objList[idx]->changeZoom(-1); } - _speed = 30; - _fadePercent = 100; - _rocksCheck = false; - _hitCount = 0; - _turnAmount = 0; - _angle = 0; - _msgActive = false; - setAction(&_action5); _globals->_scenePalette.addRotation(96, 143, -1); diff --git a/engines/tsage/ringworld_scenes1.h b/engines/tsage/ringworld_scenes1.h index 07c89aff25..712a16c612 100644 --- a/engines/tsage/ringworld_scenes1.h +++ b/engines/tsage/ringworld_scenes1.h @@ -484,6 +484,8 @@ class Scene6100 : public Scene { class Object : public SceneObject { public: FloatSet _floats; + + virtual void synchronize(Serializer &s); }; class ProbeMover : public NpcMover { public: @@ -520,6 +522,8 @@ public: Object *_objList[4]; bool _msgActive; + Scene6100(); + virtual void synchronize(Serializer &s); virtual void postInit(SceneObjectList *OwnerList = NULL); virtual void remove(); virtual void process(Event &event); diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp index 368992628f..ba4060548e 100644 --- a/engines/tsage/ringworld_scenes10.cpp +++ b/engines/tsage/ringworld_scenes10.cpp @@ -49,7 +49,7 @@ void Object9350::draw() { } /*-------------------------------------------------------------------------- - * Scene 9100 + * Scene 9100 - Near beach: Slave washing clothes * *--------------------------------------------------------------------------*/ void Scene9100::SceneHotspot1::doAction(int action) { @@ -174,7 +174,7 @@ void Scene9100::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 9150 + * Scene 9150 - Castle: Outside the bulwarks * *--------------------------------------------------------------------------*/ void Scene9150::Object3::signal() { @@ -294,7 +294,7 @@ void Scene9150::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 9200 + * Scene 9200 - Castle: Near the fountain * *--------------------------------------------------------------------------*/ void Scene9200::SceneHotspot1::doAction(int action) { @@ -471,7 +471,7 @@ void Scene9200::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 9300 + * Scene 9300 - Castle: In front of a large guarded door * *--------------------------------------------------------------------------*/ void Scene9300::signal() { @@ -538,7 +538,7 @@ void Scene9300::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 9350 + * Scene 9350 - Castle: In a hallway * *--------------------------------------------------------------------------*/ @@ -624,7 +624,7 @@ void Scene9350::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 9360 + * Scene 9360 - Castle: In a hallway * *--------------------------------------------------------------------------*/ @@ -702,7 +702,7 @@ void Scene9360::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 9400 + * Scene 9400 - Castle: Black-Smith room * *--------------------------------------------------------------------------*/ Scene9400::Scene9400() { @@ -827,7 +827,7 @@ void Scene9400::synchronize(Serializer &s) { } /*-------------------------------------------------------------------------- - * Scene 9450 + * Scene 9450 - Castle: Dining room * *--------------------------------------------------------------------------*/ void Scene9450::Object2::signal() { @@ -1010,7 +1010,7 @@ void Scene9450::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 9500 + * Scene 9500 - Castle: Bedroom * *--------------------------------------------------------------------------*/ void Scene9500::Hotspot1::doAction(int action) { @@ -1231,7 +1231,7 @@ void Scene9500::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 9700 + * Scene 9700 - Castle: Balcony * *--------------------------------------------------------------------------*/ void Scene9700::signal() { @@ -1303,7 +1303,7 @@ void Scene9700::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 9750 + * Scene 9750 - Castle: In the garden * *--------------------------------------------------------------------------*/ void Scene9750::signal() { @@ -1339,7 +1339,7 @@ void Scene9750::postInit(SceneObjectList *OwnerList) { /*-------------------------------------------------------------------------- - * Scene 9850 + * Scene 9850 - Castle: Dressing room * *--------------------------------------------------------------------------*/ void Scene9850::Object6::doAction(int action) { @@ -1643,7 +1643,7 @@ void Scene9850::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 9900 + * Scene 9900 - Ending * *--------------------------------------------------------------------------*/ void Scene9900::strAction1::signal() { @@ -1998,7 +1998,7 @@ void Scene9900::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 9999 + * Scene 9999 - Space travel * *--------------------------------------------------------------------------*/ diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp index f1aedc84cf..5d2732d36c 100644 --- a/engines/tsage/ringworld_scenes3.cpp +++ b/engines/tsage/ringworld_scenes3.cpp @@ -488,11 +488,11 @@ void Scene2100::Action1::signal() { switch (_actionIndex++) { case 0: _globals->_player.disableControl(); - if (!scene->_field1800) + if (!scene->_sitFl) setDelay(1); else { setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); - scene->_field1800 = 0; + scene->_sitFl = 0; } break; case 1: { @@ -631,7 +631,7 @@ void Scene2100::Action4::signal() { switch (_actionIndex++) { case 0: _globals->_player.disableControl(); - if (!scene->_field1800) + if (!scene->_sitFl) setDelay(1); else setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL); @@ -655,6 +655,7 @@ void Scene2100::Action4::signal() { } void Scene2100::Action5::signal() { + // Quinn enters the cokpit after Seeker decided to enter the cave alone Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -1401,6 +1402,7 @@ void Scene2100::Hotspot8::doAction(int action) { } void Scene2100::Hotspot10::doAction(int action) { + // Quinn's Console Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; switch (action) { @@ -1408,13 +1410,15 @@ void Scene2100::Hotspot10::doAction(int action) { SceneItem::display2(2100, 13); break; case CURSOR_USE: - if (scene->_field1800) { + if (scene->_sitFl) { _globals->_player.disableControl(); scene->_sceneMode = 2102; scene->setAction(&scene->_sequenceManager, scene, 2102, &_globals->_player, NULL); } else if (_globals->getFlag(13)) { SceneItem::display2(2100, 28); } else { + _globals->_player.disableControl(); + scene->_sceneMode = 2101; scene->setAction(&scene->_sequenceManager, scene, 2101, &_globals->_player, NULL); } break; @@ -1471,24 +1475,23 @@ void Scene2100::Object2::doAction(int action) { case CURSOR_TALK: if (_globals->getFlag(72)) { _globals->_player.disableControl(); - if (!_globals->getFlag(52)) + if (!_globals->getFlag(52)) { + scene->_sceneMode = 2111; scene->setAction(&scene->_sequenceManager, scene, 2111, NULL); - else { + } else { scene->_sceneMode = _globals->getFlag(53) ? 2112 : 2110; scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, NULL); } - } else { - if (_globals->getFlag(14)) + } else if (_globals->getFlag(13)) { + SceneItem::display2(2100, 31); + } else if (_globals->getFlag(14)) { SceneItem::display2(2100, 32); - else { + } else { _globals->setFlag(14); _globals->_player.disableControl(); scene->_sceneMode = 2108; scene->setAction(&scene->_sequenceManager, scene, 2109, NULL); - } } - - scene->setAction(&scene->_action4); break; default: SceneHotspot::doAction(action); @@ -1497,18 +1500,19 @@ void Scene2100::Object2::doAction(int action) { } void Scene2100::Object3::doAction(int action) { + // Miranda Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene; switch (action) { case CURSOR_LOOK: - if (!_globals->getFlag(59)) + if (_globals->getFlag(59)) SceneItem::display2(2100, 34); else error("***I have no response."); break; case CURSOR_TALK: - if (!_globals->getFlag(59)) { + if (_globals->getFlag(59)) { _globals->_player.disableControl(); scene->_sceneMode = 2108; scene->setAction(&scene->_sequenceManager, scene, 2108, NULL); @@ -1534,6 +1538,14 @@ Scene2100::Scene2100() : _hotspot12(0, CURSOR_LOOK, 2100, 24, CURSOR_USE, 2100, 25, LIST_END), _hotspot13(0, CURSOR_LOOK, 2100, 17, LIST_END), _hotspot15(0, CURSOR_LOOK, 2100, 22, CURSOR_USE, 2100, 23, LIST_END) { + _area1.setup(2153, 2, 1, 2100); + _area1._pt = Common::Point(200, 31); + _area2.setup(2153, 3, 1, 2150); + _area2._pt = Common::Point(200, 50); + _area3.setup(2153, 4, 1, 2320); + _area3._pt = Common::Point(200, 75); + _area4.setup(2153, 1, 1, OBJECT_TRANSLATOR); + _area4._pt = Common::Point(237, 77); } void Scene2100::postInit(SceneObjectList *OwnerList) { @@ -1660,15 +1672,6 @@ void Scene2100::postInit(SceneObjectList *OwnerList) { &_hotspot13, &_hotspot12, &_hotspot8, &_object1, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, &_hotspot6, &_hotspot7, &_hotspot1, NULL); - _area1.setup(2153, 2, 1, 2100); - _area1._pt = Common::Point(200, 31); - _area2.setup(2153, 3, 1, 2150); - _area2._pt = Common::Point(200, 50); - _area3.setup(2153, 4, 1, 2320); - _area3._pt = Common::Point(200, 75); - _area4.setup(2153, 1, 1, OBJECT_TRANSLATOR); - _area4._pt = Common::Point(237, 77); - _globals->_player.postInit(); if (_globals->getFlag(13)) { _globals->_player.setVisage(2170); @@ -1683,7 +1686,7 @@ void Scene2100::postInit(SceneObjectList *OwnerList) { _globals->_player._moveDiff.x = 4; _globals->_player.changeZoom(-1); _globals->_player.disableControl(); - _field1800 = 0; + _sitFl = 0; switch (_globals->_sceneManager._previousScene) { case 2120: @@ -1748,6 +1751,7 @@ void Scene2100::postInit(SceneObjectList *OwnerList) { setAction(&_action14); } else { _globals->_player.disableControl(); + _globals->_player.fixPriority(1); _globals->_player.setPosition(Common::Point(157, 56)); _sceneMode = 2104; @@ -1818,7 +1822,7 @@ void Scene2100::postInit(SceneObjectList *OwnerList) { _globals->_player.fixPriority(152); _globals->_player.setStrip(2); - _field1800 = 1; + _sitFl = 1; _object4.postInit(); _object4.setVisage(2102); @@ -1852,7 +1856,7 @@ void Scene2100::postInit(SceneObjectList *OwnerList) { _globals->_player.fixPriority(152); _globals->_player.setStrip(2); - _field1800 = 1; + _sitFl = 1; setAction(&_action16); } break; @@ -1926,12 +1930,12 @@ void Scene2100::stripCallback(int v) { void Scene2100::signal() { switch (_sceneMode) { case 2101: - _field1800 = 1; + _sitFl = 1; _globals->_player._uiEnabled = true; _globals->_events.setCursor(CURSOR_USE); break; case 2102: - _field1800 = 0; + _sitFl = 0; _globals->_player.enableControl(); break; case 2103: @@ -1958,7 +1962,7 @@ void Scene2100::signal() { void Scene2100::synchronize(Serializer &s) { Scene::synchronize(s); if (s.getVersion() >= 3) - s.syncAsSint16LE(_field1800); + s.syncAsSint16LE(_sitFl); } /*-------------------------------------------------------------------------- @@ -2479,6 +2483,15 @@ Scene2150::Scene2150() : _hotspot11(0, CURSOR_LOOK, 2150, 12, LIST_END) { _rect1 = Rect(260, 70, 270, 77); _rect2 = Rect(222, 142, 252, 150); + _area1.setup(2153, 2, 1, 2100); + _area1._pt = Common::Point(200, 31); + _area2.setup(2153, 3, 1, 2150); + _area2._pt = Common::Point(200, 50); + _area3.setup(2153, 4, 1, 2320); + _area3._pt = Common::Point(200, 75); + _area4.setup(2153, 1, 1, 10); + _area4._pt = Common::Point(237, 77); + } void Scene2150::postInit(SceneObjectList *OwnerList) { @@ -2492,7 +2505,7 @@ void Scene2150::postInit(SceneObjectList *OwnerList) { _hotspot7.setVisage(2152); _hotspot7._frame = 1; _hotspot7._strip = 2; - _hotspot7.animate(ANIM_MODE_8, NULL); + _hotspot7.animate(ANIM_MODE_8, 0, NULL); _hotspot7.setPosition(Common::Point(122, 62)); _hotspot7.changeZoom(100); _hotspot7.fixPriority(76); @@ -2544,15 +2557,6 @@ void Scene2150::postInit(SceneObjectList *OwnerList) { _globals->_sceneItems.addItems(&_hotspot1, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, &_hotspot6, &_hotspot7, &_hotspot10, &_hotspot9, &_hotspot11, &_hotspot8, NULL); - _area1.setup(2153, 2, 1, 2100); - _area1._pt = Common::Point(200, 31); - _area2.setup(2153, 3, 1, 2150); - _area2._pt = Common::Point(200, 50); - _area3.setup(2153, 4, 1, 2320); - _area3._pt = Common::Point(200, 75); - _area4.setup(2153, 1, 1, 10); - _area4._pt = Common::Point(237, 77); - switch (_globals->_sceneManager._previousScene) { case 2120: _globals->_soundHandler.play(160); @@ -4371,6 +4375,7 @@ void Scene2280::synchronize(Serializer &s) { *--------------------------------------------------------------------------*/ void Scene2300::Action1::signal() { + // Quinn and Seeker Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -4441,6 +4446,7 @@ void Scene2300::Action1::signal() { break; case 8: _globals->_game->endGame(2300, 0); + remove(); break; case 9: if (scene->_hotspot5._mover) @@ -4513,6 +4519,7 @@ void Scene2300::Action1::signal() { } void Scene2300::Action2::signal() { + // Miranda tearing cables Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -4579,6 +4586,7 @@ void Scene2300::Action2::signal() { } void Scene2300::Action3::signal() { + // Stunned Miranda Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -4631,6 +4639,7 @@ void Scene2300::Action3::signal() { } void Scene2300::Action4::signal() { + // Ennemies coming Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -4669,6 +4678,7 @@ void Scene2300::Action4::signal() { /*--------------------------------------------------------------------------*/ void Scene2300::Hotspot5::doAction(int action) { + // Ennemies Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; switch (action) { @@ -4691,6 +4701,7 @@ void Scene2300::Hotspot5::doAction(int action) { } void Scene2300::Hotspot7::doAction(int action) { + // Miranda Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene; switch (action) { @@ -5162,6 +5173,7 @@ void Scene2320::Action3::signal() { } void Scene2320::Action4::signal() { + // Fly Cycle actions Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -5228,11 +5240,13 @@ void Scene2320::Action4::signal() { setDelay(13); break; case 9: - if (!_globals->getFlag(109)) { - SceneItem::display2(2320, 19); - } else { - _globals->_sceneManager.changeScene(7600); - } + // Quinn sits in the flycycle + scene->_hotspot16.hide(); + _globals->_player.setVisage(2323); + _globals->_player.setPosition(Common::Point(303, 176)); + _globals->_player.setStrip(2); + _globals->_player.setFrame(1); + _globals->_player.animate(ANIM_MODE_5, this); break; case 10: if (_globals->getFlag(109)) { @@ -5289,6 +5303,7 @@ void Scene2320::Action4::signal() { break; } case 18: { + scene->_hotspot16.fixPriority(149); Common::Point pt(320, 202); PlayerMover *mover = new PlayerMover(); scene->_hotspot16.addMover(mover, &pt, this); @@ -5588,6 +5603,7 @@ void Scene2320::Hotspot8::doAction(int action) { } void Scene2320::Hotspot10::doAction(int action) { + // Seeker Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; switch (action) { @@ -5681,6 +5697,7 @@ void Scene2320::Hotspot12::doAction(int action) { } void Scene2320::Hotspot14::doAction(int action) { + // Right Console Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; switch (action) { @@ -5733,6 +5750,7 @@ void Scene2320::Hotspot14::doAction(int action) { } void Scene2320::Hotspot15::doAction(int action) { + // Left console (Flycycle console) Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene; switch (action) { @@ -5761,6 +5779,14 @@ Scene2320::Scene2320() : _hotspot4(0, CURSOR_LOOK, 2320, 14, LIST_END), _hotspot13(0, CURSOR_LOOK, 2320, 12, LIST_END) { + _area1.setup(2153, 2, 1, 2100); + _area1._pt = Common::Point(200, 31); + _area2.setup(2153, 3, 1, 2150); + _area2._pt = Common::Point(200, 50); + _area3.setup(2153, 4, 1, 2320); + _area3._pt = Common::Point(200, 75); + _area4.setup(2153, 1, 1, 10); + _area4._pt = Common::Point(237, 77); } void Scene2320::postInit(SceneObjectList *OwnerList) { @@ -5813,15 +5839,6 @@ void Scene2320::postInit(SceneObjectList *OwnerList) { _globals->_sceneItems.push_back(&_hotspot8); } - _area1.setup(2153, 2, 1, 2100); - _area1._pt = Common::Point(200, 31); - _area2.setup(2153, 3, 1, 2150); - _area2._pt = Common::Point(200, 50); - _area3.setup(2153, 4, 1, 2320); - _area3._pt = Common::Point(200, 75); - _area4.setup(2153, 1, 1, 10); - _area4._pt = Common::Point(237, 77); - if (_globals->getFlag(43)) { _hotspot11.postInit(); _hotspot11.setVisage(2705); @@ -5897,7 +5914,7 @@ void Scene2320::postInit(SceneObjectList *OwnerList) { _globals->_player.disableControl(); _globals->_player.animate(ANIM_MODE_NONE, NULL); - _globals->_player.setObjectWrapper(new SceneObjectWrapper()); + _globals->_player.setObjectWrapper(NULL); _globals->_player.setVisage(2347); _globals->_player.setStrip(2); _globals->_player.setFrame(5); diff --git a/engines/tsage/ringworld_scenes3.h b/engines/tsage/ringworld_scenes3.h index 6699ec5d1e..711360c190 100644 --- a/engines/tsage/ringworld_scenes3.h +++ b/engines/tsage/ringworld_scenes3.h @@ -278,7 +278,7 @@ public: Action15 _action15; Action16 _action16; Action17 _action17; - int _field1800; + int _sitFl; SceneArea _area1, _area2, _area3, _area4; Scene2100(); diff --git a/engines/tsage/ringworld_scenes5.cpp b/engines/tsage/ringworld_scenes5.cpp index cdd0236cf8..c884f9f6e4 100644 --- a/engines/tsage/ringworld_scenes5.cpp +++ b/engines/tsage/ringworld_scenes5.cpp @@ -34,6 +34,7 @@ namespace tSage { *--------------------------------------------------------------------------*/ void Scene4000::Action1::signal() { + // Quinn has the peg. Everybody enter the screen. Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -124,6 +125,8 @@ void Scene4000::Action1::signal() { } void Scene4000::Action2::signal() { + // Quinn, Seeker and Miranda walks down to the village + // Then, they talk to Rock, and enter the priest hut Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -179,6 +182,7 @@ void Scene4000::Action2::signal() { } void Scene4000::Action3::signal() { + // The guard walks to the left and exits the screen Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -197,6 +201,7 @@ void Scene4000::Action3::signal() { } void Scene4000::Action4::signal() { + // Quinn ties the rope to the rock Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -235,6 +240,7 @@ void Scene4000::Action4::signal() { } void Scene4000::Action5::signal() { + // Chat with Miranda Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -261,6 +267,8 @@ void Scene4000::Action5::signal() { } void Scene4000::Action6::signal() { + // Quinn and Miranda enter the screen and walk to the village. + // Rock comes and notices the alcohol. They all enter his hut. Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -322,6 +330,7 @@ void Scene4000::Action7::signal() { } void Scene4000::Action8::signal() { + // Climb down right Chimney using a rope Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -335,7 +344,7 @@ void Scene4000::Action8::signal() { case 1: _globals->_player.setVisage(4008); _globals->_player.setStrip(5); - _globals->_player.setPriority(16); + _globals->_player.fixPriority(16); _globals->_player.setFrame(1); _globals->_player.setPosition(Common::Point(283, 52)); _globals->_player.animate(ANIM_MODE_5, this); @@ -362,6 +371,7 @@ void Scene4000::Action8::signal() { } void Scene4000::Action9::signal() { + // Villager animations switch (_actionIndex++) { case 0: setDelay(_globals->_randomSource.getRandomNumber(119) + 240); @@ -374,6 +384,7 @@ void Scene4000::Action9::signal() { } void Scene4000::Action10::signal() { + // Villager animations switch (_actionIndex++) { case 0: setDelay(_globals->_randomSource.getRandomNumber(119) + 240); @@ -432,6 +443,7 @@ void Scene4000::Action11::signal() { } void Scene4000::Action12::signal() { + // Quinn enter Rock's hut Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -473,6 +485,7 @@ void Scene4000::Action12::signal() { } void Scene4000::Action13::signal() { + // Lander is landing Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -538,6 +551,7 @@ void Scene4000::Miranda::doAction(int action) { } void Scene4000::Hotspot8::doAction(int action) { + // Guard Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (action) { @@ -652,7 +666,7 @@ void Scene4000::TheTech::doAction(int action) { } void Scene4000::Hotspot13::doAction(int action) { - // Rock + // Rock between the two chimneys Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (action) { @@ -672,6 +686,7 @@ void Scene4000::Hotspot13::doAction(int action) { } void Scene4000::Hotspot::doAction(int action) { + // Wall between the two doors Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene; switch (action) { @@ -752,6 +767,7 @@ void Scene4000::Hotspot18::doAction(int action) { } void Scene4000::Hotspot23::doAction(int action) { + // Door of the temple switch (action) { case CURSOR_LOOK: SceneItem::display2(4000, _globals->getFlag(31) ? 10 : 9); @@ -996,6 +1012,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { _miranda.setPosition(Common::Point(246, 146)); if (_globals->getFlag(39)) { + // Ollo follows Quinn and gives explanations on the Tech. _globals->clearFlag(39); _olo.postInit(); @@ -1006,6 +1023,8 @@ void Scene4000::postInit(SceneObjectList *OwnerList) { _sceneMode = 4010; _globals->_player.disableControl(); + // This is the buggy animation where Miranda comments the Tech even + // if she's not in the room but in the lander. setAction(&_sequenceManager1, this, 4010, &_globals->_player, &_olo, NULL); } @@ -1458,7 +1477,7 @@ void Scene4025::Hole::doAction(int action) { void Scene4025::Peg::synchronize(Serializer &s) { SceneObject::synchronize(s); s.syncAsSint16LE(_field88); - SYNC_POINTER(_armStrip); + s.syncAsSint16LE(_armStrip); } void Scene4025::Peg::doAction(int action) { @@ -2712,6 +2731,10 @@ void Scene4100::postInit(SceneObjectList *OwnerList) { setAction(&_action4); _globals->clearFlag(43); + } else { + // Workaround: In the original, the mouse is hidden when Quinn + // goes back to scene 4150 then to scene 4100. This enables everything. + _globals->_player.enableControl(); } _globals->_player.setPosition(Common::Point(252, 139)); @@ -3088,6 +3111,7 @@ void Scene4150::dispatch() { if (!_action && (_globals->_player._position.x >= 316)) { _globals->_soundHandler.fadeOut(NULL); + _soundHandler.fadeOut(NULL); _globals->_player.disableControl(); _sceneMode = 4152; setAction(&_sequenceManager, this, 4152, &_globals->_player, NULL); diff --git a/engines/tsage/ringworld_scenes6.cpp b/engines/tsage/ringworld_scenes6.cpp index edcd638dd7..68c184196c 100644 --- a/engines/tsage/ringworld_scenes6.cpp +++ b/engines/tsage/ringworld_scenes6.cpp @@ -614,6 +614,7 @@ void Scene5000::dispatch() { *--------------------------------------------------------------------------*/ void Scene5100::Action1::signal() { + // Quinn enters the cave for the first time Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -663,6 +664,7 @@ void Scene5100::Action1::signal() { } void Scene5100::Action2::signal() { + // Quinn and Seeker exit the cave Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -712,6 +714,7 @@ void Scene5100::Action2::signal() { } void Scene5100::Action3::signal() { + // Quinns shots flesheater Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -746,7 +749,7 @@ void Scene5100::Action3::signal() { scene->_hotspot2.setAction(NULL); scene->_hotspot3.setStrip2(1); - ADD_PLAYER_MOVER_THIS(scene->_hotspot3, 1200, 100); + ADD_PLAYER_MOVER_NULL(scene->_hotspot3, 1200, 100); } else { scene->_hotspot3.setVisage(5130); scene->_hotspot3._strip = 1; @@ -807,6 +810,7 @@ void Scene5100::Action4::signal() { } void Scene5100::Action5::signal() { + // Quinns forgot the statis box in the throne room, and goes back Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -822,7 +826,7 @@ void Scene5100::Action5::signal() { break; case 3: scene->_sceneMode = 5106; - scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, NULL); + scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, &scene->_hotspot14, NULL); break; } } @@ -943,6 +947,7 @@ void Scene5100::Hotspot9::doAction(int action) { } void Scene5100::Hotspot17::doAction(int action) { + // Rock blocking pit entrance Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene; switch (action) { @@ -1083,7 +1088,7 @@ void Scene5100::postInit(SceneObjectList *OwnerList) { _globals->_player.animate(ANIM_MODE_1, NULL); _globals->_player.disableControl(); - if (!_globals->getFlag(66)) { + if ((!_globals->getFlag(66)) || (RING_INVENTORY._stasisBox._sceneNumber != 1)) { _hotspot14.postInit(); _hotspot14.setVisage(5101); _hotspot14.setPosition(Common::Point(498, 147)); @@ -1744,6 +1749,7 @@ void Scene5200::dispatch() { *--------------------------------------------------------------------------*/ void Scene5300::Action1::signal() { + // Seeker waking up Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -1777,7 +1783,8 @@ void Scene5300::Action1::signal() { _globals->_player.enableControl(); remove(); } else { - _globals->getFlag(60); + _globals->setFlag(60); + scene->_hotspot2._numFrames = 10; if (_globals->getFlag(67)) { scene->_sceneMode = 5310; @@ -1855,8 +1862,8 @@ void Scene5300::Hotspot1::doAction(int action) { break; } } - void Scene5300::Hotspot2::doAction(int action) { + // Seeker Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; switch (action) { @@ -1883,11 +1890,17 @@ void Scene5300::Hotspot2::doAction(int action) { _globals->_player.disableControl(); if (RING_INVENTORY._stasisBox._sceneNumber != 1) { + scene->_sceneMode = 5316; scene->setAction(&scene->_sequenceManager, scene, 5316, NULL); } else { _globals->setFlag(60); - scene->_sceneMode = _globals->getFlag(67) ? 5315 : 5347; - scene->setAction(&scene->_sequenceManager, scene, 5315, this); + if (_globals->getFlag(67)) { + scene->_sceneMode = 5315; + scene->setAction(&scene->_sequenceManager, scene, 5315, this, NULL); + } else { + scene->_sceneMode = 5347; + scene->setAction(&scene->_sequenceManager, scene, 5347, NULL); + } } } break; @@ -1924,6 +1937,7 @@ void Scene5300::Hotspot2::doAction(int action) { } void Scene5300::Hotspot5::doAction(int action) { + // Sharp bone Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene; switch (action) { @@ -2068,6 +2082,7 @@ void Scene5300::postInit(SceneObjectList *OwnerList) { _globals->_player.disableControl(); if (_globals->getFlag(107) && _globals->getFlag(106)) { + _hotspot2.setVisage(2806); _hotspot2.postInit(); _hotspot2.setObjectWrapper(new SceneObjectWrapper()); _hotspot2.animate(ANIM_MODE_1, NULL); @@ -2175,7 +2190,7 @@ void Scene5300::signal() { setAction(&_sequenceManager, this, 5315, &_hotspot2, NULL); break; case 5315: - _globals->_stripNum = 5315; + _globals->_stripNum = 5302; _globals->_sceneManager.changeScene(5100); break; } diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld_scenes8.cpp index 6d8b57778f..2b329b958a 100644 --- a/engines/tsage/ringworld_scenes8.cpp +++ b/engines/tsage/ringworld_scenes8.cpp @@ -43,11 +43,12 @@ void SceneObject7700::synchronize(Serializer &s) { } /*-------------------------------------------------------------------------- - * Scene 7000 + * Scene 7000 - Landing near beach * *--------------------------------------------------------------------------*/ void Scene7000::Action1::signal() { + // Quinn walks from the lander to the seaside (action6) then discuss with Skeenar Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -125,6 +126,7 @@ void Scene7000::Action3::dispatch() { /*--------------------------------------------------------------------------*/ void Scene7000::Action3::signal() { + // Lander is landing Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; switch (_actionIndex++) { @@ -260,6 +262,7 @@ void Scene7000::Action5::signal() { /*--------------------------------------------------------------------------*/ void Scene7000::Action6::signal() { + // Quinn walks from the lander to the seaside switch (_actionIndex++) { case 0: _globals->_player.disableControl(); @@ -361,6 +364,7 @@ void Scene7000::Hotspot1::doAction(int action) { /*--------------------------------------------------------------------------*/ void Scene7000::Object1::doAction(int action) { + // Skeenar Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene; switch (action) { @@ -439,10 +443,10 @@ void Scene7000::Object1::doAction(int action) { scene->_sceneMode = 7005; scene->setAction(&scene->_sequenceManager, scene, 7013, NULL); } else if (_globals->getFlag(13)) { - _globals->_sceneManager._sceneNumber = 7002; + scene->_sceneMode = 7002; scene->setAction(&scene->_sequenceManager, scene, 7014, NULL); } else { - _globals->_sceneManager._sceneNumber = 7002; + scene->_sceneMode = 7002; scene->setAction(&scene->_sequenceManager, scene, 7002, NULL); } break; @@ -652,7 +656,7 @@ void Scene7000::signal() { /*-------------------------------------------------------------------------- - * Scene 7100 + * Scene 7100 - Underwater: swimming * *--------------------------------------------------------------------------*/ @@ -1136,7 +1140,7 @@ void Scene7100::postInit(SceneObjectList *OwnerList) { _globals->_soundHandler.play(270); } /*-------------------------------------------------------------------------- - * Scene 7200 + * Scene 7200 - Underwater: Entering the cave * *--------------------------------------------------------------------------*/ @@ -1302,7 +1306,7 @@ void Scene7200::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 7300 + * Scene 7300 - Underwater: Lord Poria * *--------------------------------------------------------------------------*/ @@ -1497,7 +1501,7 @@ void Scene7300::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 7600 + * Scene 7600 - Floating Buildings: Outside * *--------------------------------------------------------------------------*/ @@ -1602,7 +1606,7 @@ void Scene7600::postInit(SceneObjectList *OwnerList) { } /*-------------------------------------------------------------------------- - * Scene 7700 + * Scene 7700 - Floating Buildings: In the lab * *--------------------------------------------------------------------------*/ diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp index 6ae62568a3..522e40c236 100644 --- a/engines/tsage/saveload.cpp +++ b/engines/tsage/saveload.cpp @@ -64,14 +64,12 @@ Saver::~Saver() { void Serializer::syncPointer(SavedObject **ptr, Common::Serializer::Version minVersion, Common::Serializer::Version maxVersion) { - int idx; + int idx = 0; assert(ptr); if (isSaving()) { // Get the object index for the given pointer and write it out - if (!*ptr) { - idx = 0; - } else { + if (*ptr) { idx = _saver->blockIndexOf(*ptr); assert(idx > 0); } @@ -208,7 +206,6 @@ Common::Error Saver::restore(int slot) { // Final post-restore notifications _macroRestoreFlag = false; _loadNotifiers.notify(false); - _globals->_events.setCursor(_globals->_player._uiEnabled ? CURSOR_WALK : CURSOR_NONE); return Common::kNoError; } diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h index 51b7696590..c1c2851f28 100644 --- a/engines/tsage/saveload.h +++ b/engines/tsage/saveload.h @@ -33,7 +33,7 @@ namespace tSage { typedef void (*SaveNotifierFn)(bool postFlag); -#define TSAGE_SAVEGAME_VERSION 3 +#define TSAGE_SAVEGAME_VERSION 5 class SavedObject; diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp index 3741bdafd7..4625661b62 100644 --- a/engines/tsage/scenes.cpp +++ b/engines/tsage/scenes.cpp @@ -227,6 +227,11 @@ void SceneManager::setBgOffset(const Common::Point &pt, int loadCount) { void SceneManager::listenerSynchronize(Serializer &s) { s.validate("SceneManager"); + if (s.isLoading() && !_globals->_sceneManager._scene) + // Loading a savegame straight from the launcher, so instantiate a blank placeholder scene + // in order for the savegame loading to work correctly + _globals->_sceneManager._scene = new Scene(); + _altSceneObjects.synchronize(s); s.syncAsSint32LE(_sceneNumber); s.syncAsUint16LE(_globals->_sceneManager._scene->_activeScreenNumber); @@ -319,7 +324,7 @@ void Scene::loadSceneData(int sceneNum) { // Load the priority regions _priorities.load(sceneNum); - // Initialise the section enabled list + // Initialize the section enabled list Common::set_to(&_enabledSections[0], &_enabledSections[16 * 16], 0xffff); _globals->_sceneOffset.x = (_sceneBounds.left / 160) * 160; @@ -458,32 +463,32 @@ void Scene::drawAltObjects() { } void Scene::setZoomPercents(int yStart, int minPercent, int yEnd, int maxPercent) { - int var_6 = 0; + int currDiff = 0; int v = 0; while (v < yStart) _zoomPercents[v++] = minPercent; int diff1 = ABS(maxPercent - minPercent); int diff2 = ABS(yEnd - yStart); - int var_8 = MAX(diff1, diff2); - - while (var_8-- != 0) { - _zoomPercents[v] = minPercent; - if (diff2 <= diff1) { - ++minPercent; - var_6 += diff2; - if (var_6 >= diff1) { - var_6 -= diff1; - ++v; - } - } else { - ++v; - var_6 += diff1; - if (var_6 >= diff2) { - var_6 -= diff2; - ++minPercent; - } - } + int remainingDiff = MAX(diff1, diff2); + + while (remainingDiff-- != 0) { + _zoomPercents[v] = minPercent; + if (diff2 <= diff1) { + ++minPercent; + currDiff += diff2; + if (currDiff >= diff1) { + currDiff -= diff1; + ++v; + } + } else { + ++v; + currDiff += diff1; + if (currDiff >= diff2) { + currDiff -= diff2; + ++minPercent; + } + } } while (yEnd < 256) diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp index cb39f66618..41f3d58897 100644 --- a/engines/tsage/tsage.cpp +++ b/engines/tsage/tsage.cpp @@ -60,7 +60,7 @@ bool TSageEngine::hasFeature(EngineFeature f) const { (f == kSupportsSavingDuringRuntime); } -void TSageEngine::initialise() { +void TSageEngine::initialize() { _saver = new Saver(); // Set up the resource manager @@ -86,7 +86,7 @@ void TSageEngine::initialise() { syncSoundSettings(); } -void TSageEngine::deinitialise() { +void TSageEngine::deinitialize() { delete _globals; delete _resourceManager; delete _saver; @@ -96,12 +96,12 @@ void TSageEngine::deinitialise() { Common::Error TSageEngine::run() { // Basic initialisation - initialise(); + initialize(); _globals->_sceneHandler.registerHandler(); _globals->_game->execute(); - deinitialise(); + deinitialize(); return Common::kNoError; } @@ -129,7 +129,7 @@ Common::Error TSageEngine::loadGameState(int slot) { /** * Save the game to the given slot index, and with the given name */ -Common::Error TSageEngine::saveGameState(int slot, const char *desc) { +Common::Error TSageEngine::saveGameState(int slot, const Common::String &desc) { return _saver->save(slot, desc); } diff --git a/engines/tsage/tsage.h b/engines/tsage/tsage.h index 3138179442..f004c7f625 100644 --- a/engines/tsage/tsage.h +++ b/engines/tsage/tsage.h @@ -23,7 +23,6 @@ #ifndef TSAGE_H #define TSAGE_H -#include "engines/advancedDetector.h" #include "engines/engine.h" #include "common/rect.h" #include "audio/mixer.h" @@ -85,12 +84,12 @@ public: virtual bool canLoadGameStateCurrently(); virtual bool canSaveGameStateCurrently(); virtual Common::Error loadGameState(int slot); - virtual Common::Error saveGameState(int slot, const char *desc); + virtual Common::Error saveGameState(int slot, const Common::String &desc); virtual void syncSoundSettings(); Common::String generateSaveName(int slot); - void initialise(); - void deinitialise(); + void initialize(); + void deinitialize(); }; extern TSageEngine *_vm; diff --git a/engines/tucker/detection.cpp b/engines/tucker/detection.cpp index 9b466d682d..4a3313e3f7 100644 --- a/engines/tucker/detection.cpp +++ b/engines/tucker/detection.cpp @@ -102,31 +102,6 @@ static const ADGameDescription tuckerGameDescriptions[] = { AD_TABLE_END_MARKER }; -static const ADParams detectionParams = { - // Pointer to ADGameDescription or its superset structure - (const byte *)tuckerGameDescriptions, - // Size of that superset structure - sizeof(ADGameDescription), - // Number of bytes to compute MD5 sum for - 512, - // List of all engine targets - tuckerGames, - // Structure for autoupgrading obsolete targets - 0, - // Name of single gameid (optional) - "tucker", - // List of files for file-based fallback detection (optional) - 0, - // Flags - 0, - // Additional GUI options (for every game) - Common::GUIO_NONE, - // Maximum directory depth - 1, - // List of directory globs - 0 -}; - static const ADGameDescription tuckerDemoGameDescription = { "tucker", "Non-Interactive Demo", @@ -139,7 +114,9 @@ static const ADGameDescription tuckerDemoGameDescription = { class TuckerMetaEngine : public AdvancedMetaEngine { public: - TuckerMetaEngine() : AdvancedMetaEngine(detectionParams) { + TuckerMetaEngine() : AdvancedMetaEngine(tuckerGameDescriptions, sizeof(ADGameDescription), tuckerGames) { + _md5Bytes = 512; + _singleid = "tucker"; } virtual const char *getName() const { @@ -168,7 +145,7 @@ public: return desc != 0; } - virtual const ADGameDescription *fallbackDetect(const Common::FSList &fslist) const { + virtual const ADGameDescription *fallbackDetect(const FileMap &allFiles, const Common::FSList &fslist) const { for (Common::FSList::const_iterator d = fslist.begin(); d != fslist.end(); ++d) { Common::FSList audiofslist; if (d->isDirectory() && d->getName().equalsIgnoreCase("audio") && d->getChildren(audiofslist, Common::FSNode::kListFilesOnly)) { @@ -201,8 +178,7 @@ public: } for (int slot = 0; slot <= Tucker::kLastSaveSlot; ++slot) { if (slotsTable[slot]) { - char description[64]; - snprintf(description, sizeof(description), "savegm.%02d", slot); + Common::String description = Common::String::format("savegm.%02d", slot); saveList.push_back(SaveStateDescriptor(slot, description)); } } diff --git a/engines/tucker/resource.cpp b/engines/tucker/resource.cpp index 467500b121..bee09f7391 100644 --- a/engines/tucker/resource.cpp +++ b/engines/tucker/resource.cpp @@ -160,39 +160,37 @@ public: }; uint8 *TuckerEngine::loadFile(const char *fname, uint8 *p) { - char filename[80]; - strcpy(filename, fname); + Common::String filename; + filename = fname; if (_gameLang == Common::DE_DEU) { - if (strcmp(filename, "bgtext.c") == 0) { - strcpy(filename, "bgtextgr.c"); - } else if (strcmp(filename, "charname.c") == 0) { - strcpy(filename, "charnmgr.c"); - } else if (strcmp(filename, "data5.c") == 0) { - strcpy(filename, "data5gr.c"); - } else if (strcmp(filename, "infobar.txt") == 0) { - strcpy(filename, "infobrgr.txt"); - } else if (strcmp(filename, "charsize.dta") == 0) { - strcpy(filename, "charszgr.dta"); - } else if (strncmp(filename, "objtxt", 6) == 0) { - const char num = filename[6]; - snprintf(filename, sizeof(filename), "objtx%cgr.c", num); - } else if (strncmp(filename, "pt", 2) == 0) { - const char num = filename[2]; - snprintf(filename, sizeof(filename), "pt%ctxtgr.c", num); + if (filename == "bgtext.c") { + filename = "bgtextgr.c"; + } else if (filename == "charname.c") { + filename = "charnmgr.c"; + } else if (filename == "data5.c") { + filename = "data5gr.c"; + } else if (filename == "infobar.txt") { + filename = "infobrgr.txt"; + } else if (filename == "charsize.dta") { + filename = "charszgr.dta"; + } else if (filename.hasPrefix("objtxt")) { + filename = Common::String::format("objtx%cgr.c", filename[6]); + } else if (filename.hasPrefix("pt")) { + filename = Common::String::format("pt%ctxtgr.c", filename[2]); } } _fileLoadSize = 0; bool decode = false; if (_gameFlags & kGameFlagEncodedData) { - char *ext = strrchr(filename, '.'); - if (ext && strcmp(ext + 1, "c") == 0) { - strcpy(ext + 1, "enc"); + if (filename.hasSuffix(".c")) { + filename.deleteLastChar(); + filename += "enc"; decode = true; } } Common::File f; if (!f.open(filename)) { - warning("Unable to open '%s'", filename); + warning("Unable to open '%s'", filename.c_str()); return 0; } const int sz = f.size(); @@ -389,23 +387,23 @@ void TuckerEngine::loadBudSpr(int startOffset) { int spriteOffset = 0; for (int i = startOffset; i < endOffset; ++i) { if (framesCount[frame] == i) { - char filename[40]; + Common::String filename; switch (_flagsTable[137]) { case 0: if ((_gameFlags & kGameFlagDemo) != 0) { - snprintf(filename, sizeof(filename), "budl00_%d.pcx", frame + 1); + filename = Common::String::format("budl00_%d.pcx", frame + 1); } else { - snprintf(filename, sizeof(filename), "bud_%d.pcx", frame + 1); + filename = Common::String::format("bud_%d.pcx", frame + 1); } break; case 1: - snprintf(filename, sizeof(filename), "peg_%d.pcx", frame + 1); + filename = Common::String::format("peg_%d.pcx", frame + 1); break; default: - snprintf(filename, sizeof(filename), "mac_%d.pcx", frame + 1); + filename = Common::String::format("mac_%d.pcx", frame + 1); break; } - loadImage(filename, _loadTempBuf, 0); + loadImage(filename.c_str(), _loadTempBuf, 0); ++frame; } int sz = Graphics::encodeRLE(_loadTempBuf + _spriteFramesTable[i].sourceOffset, _spritesGfxBuf + spriteOffset, _spriteFramesTable[i].xSize, _spriteFramesTable[i].ySize); @@ -479,30 +477,30 @@ void TuckerEngine::loadCTable02(int fl) { } void TuckerEngine::loadLoc() { - char filename[40]; + Common::String filename; int i = _locationWidthTable[_locationNum]; _locationHeight = (_locationNum < 73) ? 140 : 200; - snprintf(filename, sizeof(filename), (i == 1) ? "loc%02d.pcx" : "loc%02da.pcx", _locationNum); - copyLocBitmap(filename, 0, false); + filename = Common::String::format((i == 1) ? "loc%02d.pcx" : "loc%02da.pcx", _locationNum); + copyLocBitmap(filename.c_str(), 0, false); Graphics::copyRect(_quadBackgroundGfxBuf, 320, _locationBackgroundGfxBuf, 640, 320, _locationHeight); if (_locationHeight == 200) { return; } - snprintf(filename, sizeof(filename), (i != 2) ? "path%02d.pcx" : "path%02da.pcx", _locationNum); - copyLocBitmap(filename, 0, true); + filename = Common::String::format((i != 2) ? "path%02d.pcx" : "path%02da.pcx", _locationNum); + copyLocBitmap(filename.c_str(), 0, true); if (i > 1) { - snprintf(filename, sizeof(filename), "loc%02db.pcx", _locationNum); - copyLocBitmap(filename, 320, false); + filename = Common::String::format("loc%02db.pcx", _locationNum); + copyLocBitmap(filename.c_str(), 320, false); Graphics::copyRect(_quadBackgroundGfxBuf + 44800, 320, _locationBackgroundGfxBuf + 320, 640, 320, _locationHeight); if (i == 2) { - snprintf(filename, sizeof(filename), "path%02db.pcx", _locationNum); - copyLocBitmap(filename, 320, true); + filename = Common::String::format("path%02db.pcx", _locationNum); + copyLocBitmap(filename.c_str(), 320, true); } } if (i > 2) { - snprintf(filename, sizeof(filename), "loc%02dc.pcx", _locationNum); - copyLocBitmap(filename, 0, false); + filename = Common::String::format("loc%02dc.pcx", _locationNum); + copyLocBitmap(filename.c_str(), 0, false); Graphics::copyRect(_quadBackgroundGfxBuf + 89600, 320, _locationBackgroundGfxBuf, 640, 320, 140); } if (_locationNum == 1) { @@ -510,8 +508,8 @@ void TuckerEngine::loadLoc() { loadImage("rochpath.pcx", _loadLocBufPtr, 0); } if (i > 3) { - snprintf(filename, sizeof(filename), "loc%02dd.pcx", _locationNum); - copyLocBitmap(filename, 0, false); + filename = Common::String::format("loc%02dd.pcx", _locationNum); + copyLocBitmap(filename.c_str(), 0, false); Graphics::copyRect(_quadBackgroundGfxBuf + 134400, 320, _locationBackgroundGfxBuf + 320, 640, 320, 140); } _fullRedraw = true; @@ -540,13 +538,13 @@ void TuckerEngine::loadObj() { } _currentPartNum = _partNum; - char filename[40]; - snprintf(filename, sizeof(filename), "objtxt%d.c", _partNum); + Common::String filename; + filename = Common::String::format("objtxt%d.c", _partNum); free(_objTxtBuf); - _objTxtBuf = loadFile(filename, 0); - snprintf(filename, sizeof(filename), "pt%dtext.c", _partNum); + _objTxtBuf = loadFile(filename.c_str(), 0); + filename = Common::String::format("pt%dtext.c", _partNum); free(_ptTextBuf); - _ptTextBuf = loadFile(filename, 0); + _ptTextBuf = loadFile(filename.c_str(), 0); _characterSpeechDataPtr = _ptTextBuf; loadData(); loadPanObj(); @@ -584,9 +582,8 @@ void TuckerEngine::loadData() { _dataCount = maxCount; int offset = 0; for (int i = 0; i < count; ++i) { - char filename[40]; - snprintf(filename, sizeof(filename), "scrobj%d%d.pcx", _partNum, i); - loadImage(filename, _loadTempBuf, 0); + Common::String filename = Common::String::format("scrobj%d%d.pcx", _partNum, i); + loadImage(filename.c_str(), _loadTempBuf, 0); offset = loadDataHelper(offset, i); } } @@ -603,9 +600,8 @@ int TuckerEngine::loadDataHelper(int offset, int index) { } void TuckerEngine::loadPanObj() { - char filename[40]; - snprintf(filename, sizeof(filename), "panobjs%d.pcx", _partNum); - loadImage(filename, _loadTempBuf, 0); + Common::String filename = Common::String::format("panobjs%d.pcx", _partNum); + loadImage(filename.c_str(), _loadTempBuf, 0); int offset = 0; for (int y = 0; y < 5; ++y) { for (int x = 0; x < 10; ++x) { @@ -812,9 +808,8 @@ void TuckerEngine::loadSprA02_01() { unloadSprA02_01(); const int count = _sprA02LookupTable[_locationNum]; for (int i = 1; i < count + 1; ++i) { - char filename[40]; - snprintf(filename, sizeof(filename), "sprites/a%02d_%02d.spr", _locationNum, i); - _sprA02Table[i] = loadFile(filename, 0); + Common::String filename = Common::String::format("sprites/a%02d_%02d.spr", _locationNum, i); + _sprA02Table[i] = loadFile(filename.c_str(), 0); } _sprA02Table[0] = _sprA02Table[1]; } @@ -831,9 +826,8 @@ void TuckerEngine::loadSprC02_01() { unloadSprC02_01(); const int count = _sprC02LookupTable[_locationNum]; for (int i = 1; i < count + 1; ++i) { - char filename[40]; - snprintf(filename, sizeof(filename), "sprites/c%02d_%02d.spr", _locationNum, i); - _sprC02Table[i] = loadFile(filename, 0); + Common::String filename = Common::String::format("sprites/c%02d_%02d.spr", _locationNum, i); + _sprC02Table[i] = loadFile(filename.c_str(), 0); } _sprC02Table[0] = _sprC02Table[1]; _spritesCount = _sprC02LookupTable2[_locationNum]; @@ -942,8 +936,7 @@ void TuckerEngine::loadSound(Audio::Mixer::SoundType type, int num, int volume, default: return; } - char fileName[64]; - snprintf(fileName, sizeof(fileName), fmt, num); + Common::String fileName = Common::String::format(fmt, num); Common::File *f = new Common::File; if (f->open(fileName)) { stream = Audio::makeWAVStream(f, DisposeAfterUse::YES); diff --git a/engines/tucker/saveload.cpp b/engines/tucker/saveload.cpp index 754e8deae9..5bc51acf84 100644 --- a/engines/tucker/saveload.cpp +++ b/engines/tucker/saveload.cpp @@ -36,9 +36,7 @@ Common::String generateGameStateFileName(const char *target, int slot, bool pref if (prefixOnly) { name += ".*"; } else { - char slotStr[16]; - snprintf(slotStr, sizeof(slotStr), ".%d", slot); - name += slotStr; + name += Common::String::format(".%d", slot); } return name; } @@ -101,7 +99,7 @@ Common::Error TuckerEngine::loadGameState(int num) { return ret; } -Common::Error TuckerEngine::saveGameState(int num, const char *description) { +Common::Error TuckerEngine::saveGameState(int num, const Common::String &description) { Common::Error ret = Common::kNoError; Common::String gameStateFileName = generateGameStateFileName(_targetName.c_str(), num); Common::OutSaveFile *f = _saveFileMan->openForSaving(gameStateFileName); diff --git a/engines/tucker/sequences.cpp b/engines/tucker/sequences.cpp index 23ae3380cd..775fd6f1a0 100644 --- a/engines/tucker/sequences.cpp +++ b/engines/tucker/sequences.cpp @@ -115,31 +115,31 @@ void TuckerEngine::handleCreditsSequence() { _fadePaletteCounter = 0; clearSprites(); ++num; - char filename[40]; + Common::String filename; if (num == 6) { for (int i = 0; i < 16; ++i) { - snprintf(filename, sizeof(filename), "cogs%04d.pcx", i + 1); - loadImage(filename, imgBuf + i * 64000, 2); + filename = Common::String::format("cogs%04d.pcx", i + 1); + loadImage(filename.c_str(), imgBuf + i * 64000, 2); } } else { switch (num) { case 1: - strcpy(filename, "loc75.pcx"); + filename = "loc75.pcx"; break; case 2: - strcpy(filename, "loc76.pcx"); + filename = "loc76.pcx"; break; case 3: - strcpy(filename, "paper-3.pcx"); + filename = "paper-3.pcx"; break; case 4: - strcpy(filename, "loc77.pcx"); + filename = "loc77.pcx"; break; case 5: - strcpy(filename, "loc78.pcx"); + filename = "loc78.pcx"; break; } - loadImage(filename, _quadBackgroundGfxBuf, 2); + loadImage(filename.c_str(), _quadBackgroundGfxBuf, 2); } _spritesCount = _creditsSequenceSpriteCounts[num]; ++_flagsTable[236]; @@ -584,8 +584,7 @@ Audio::RewindableAudioStream *AnimationSequencePlayer::loadSound(int index, Anim if (stream) return stream; - char fileName[64]; - snprintf(fileName, sizeof(fileName), "audio/%s", _audioFileNamesTable[index]); + Common::String fileName = Common::String::format("audio/%s", _audioFileNamesTable[index]); Common::File f; if (f.open(fileName)) { int size = 0, rate = 0; diff --git a/engines/tucker/tucker.h b/engines/tucker/tucker.h index b011d65cbb..e676369427 100644 --- a/engines/tucker/tucker.h +++ b/engines/tucker/tucker.h @@ -565,7 +565,7 @@ protected: template <class S> void saveOrLoadGameStateData(S &s); virtual Common::Error loadGameState(int num); - virtual Common::Error saveGameState(int num, const char *description); + virtual Common::Error saveGameState(int num, const Common::String &description); virtual bool canLoadGameStateCurrently(); virtual bool canSaveGameStateCurrently(); diff --git a/graphics/cursorman.cpp b/graphics/cursorman.cpp index 297b583d54..a5498903e2 100644 --- a/graphics/cursorman.cpp +++ b/graphics/cursorman.cpp @@ -86,7 +86,7 @@ void CursorManager::popAllCursors() { delete cur; } - if (g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) { + if (g_system->hasFeature(OSystem::kFeatureCursorPalette)) { while (!_cursorPaletteStack.empty()) { Palette *pal = _cursorPaletteStack.pop(); delete pal; @@ -141,11 +141,11 @@ void CursorManager::replaceCursor(const byte *buf, uint w, uint h, int hotspotX, } bool CursorManager::supportsCursorPalettes() { - return g_system->hasFeature(OSystem::kFeatureCursorHasPalette); + return g_system->hasFeature(OSystem::kFeatureCursorPalette); } void CursorManager::disableCursorPalette(bool disable) { - if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) + if (!g_system->hasFeature(OSystem::kFeatureCursorPalette)) return; if (_cursorPaletteStack.empty()) @@ -154,11 +154,11 @@ void CursorManager::disableCursorPalette(bool disable) { Palette *pal = _cursorPaletteStack.top(); pal->_disabled = disable; - g_system->disableCursorPalette(disable); + g_system->setFeatureState(OSystem::kFeatureCursorPalette, !disable); } void CursorManager::pushCursorPalette(const byte *colors, uint start, uint num) { - if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) + if (!g_system->hasFeature(OSystem::kFeatureCursorPalette)) return; Palette *pal = new Palette(colors, start, num); @@ -167,11 +167,11 @@ void CursorManager::pushCursorPalette(const byte *colors, uint start, uint num) if (num) g_system->setCursorPalette(colors, start, num); else - g_system->disableCursorPalette(true); + g_system->setFeatureState(OSystem::kFeatureCursorPalette, false); } void CursorManager::popCursorPalette() { - if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) + if (!g_system->hasFeature(OSystem::kFeatureCursorPalette)) return; if (_cursorPaletteStack.empty()) @@ -181,7 +181,7 @@ void CursorManager::popCursorPalette() { delete pal; if (_cursorPaletteStack.empty()) { - g_system->disableCursorPalette(true); + g_system->setFeatureState(OSystem::kFeatureCursorPalette, false); return; } @@ -190,11 +190,11 @@ void CursorManager::popCursorPalette() { if (pal->_num && !pal->_disabled) g_system->setCursorPalette(pal->_data, pal->_start, pal->_num); else - g_system->disableCursorPalette(true); + g_system->setFeatureState(OSystem::kFeatureCursorPalette, false); } void CursorManager::replaceCursorPalette(const byte *colors, uint start, uint num) { - if (!g_system->hasFeature(OSystem::kFeatureCursorHasPalette)) + if (!g_system->hasFeature(OSystem::kFeatureCursorPalette)) return; if (_cursorPaletteStack.empty()) { @@ -219,7 +219,7 @@ void CursorManager::replaceCursorPalette(const byte *colors, uint start, uint nu memcpy(pal->_data, colors, size); g_system->setCursorPalette(pal->_data, pal->_start, pal->_num); } else { - g_system->disableCursorPalette(true); + g_system->setFeatureState(OSystem::kFeatureCursorPalette, false); } } diff --git a/graphics/cursorman.h b/graphics/cursorman.h index 1e7ce83611..543a5d0a5c 100644 --- a/graphics/cursorman.h +++ b/graphics/cursorman.h @@ -108,9 +108,9 @@ public: * Test whether cursor palettes are supported. * * This is just an convenience wrapper for checking for - * OSystem::kFeatureCursorHasPalette to be supported by OSystem. + * OSystem::kFeatureCursorPalette to be supported by OSystem. * - * @see OSystem::kFeatureCursorHasPalette + * @see OSystem::kFeatureCursorPalette * @see OSystem::hasFeature */ bool supportsCursorPalettes(); diff --git a/graphics/font.h b/graphics/font.h index 7a992674d2..dc75f86e1f 100644 --- a/graphics/font.h +++ b/graphics/font.h @@ -114,18 +114,6 @@ public: int wordWrapText(const Common::String &str, int maxWidth, Common::Array<Common::String> &lines) const; }; -/** - * A SCUMM style font. - */ -class ScummFont : public Font { -public: - virtual int getFontHeight() const { return 8; } - virtual int getMaxCharWidth() const { return 8; } - - virtual int getCharWidth(byte chr) const; - virtual void drawChar(Surface *dst, byte chr, int x, int y, uint32 color) const; -}; - typedef uint16 bitmap_t; /* bitmap image unit size*/ struct BBX { diff --git a/graphics/fontman.cpp b/graphics/fontman.cpp index f937e55b69..f40cf97602 100644 --- a/graphics/fontman.cpp +++ b/graphics/fontman.cpp @@ -21,12 +21,12 @@ #include "graphics/font.h" #include "graphics/fontman.h" +#include "common/translation.h" DECLARE_SINGLETON(Graphics::FontManager); namespace Graphics { -const ScummFont *g_scummfont = 0; FORWARD_DECLARE_FONT(g_sysfont); FORWARD_DECLARE_FONT(g_sysfont_big); FORWARD_DECLARE_FONT(g_consolefont); @@ -34,18 +34,15 @@ FORWARD_DECLARE_FONT(g_consolefont); FontManager::FontManager() { // This assert should *never* trigger, because // FontManager is a singleton, thus there is only - // one instance of it per time. (g_scummfont gets + // one instance of it per time. (g_sysfont gets // reset to 0 in the desctructor of this class). - assert(g_scummfont == 0); - g_scummfont = new ScummFont; + assert(g_sysfont == 0); INIT_FONT(g_sysfont); INIT_FONT(g_sysfont_big); INIT_FONT(g_consolefont); } FontManager::~FontManager() { - delete g_scummfont; - g_scummfont = 0; delete g_sysfont; g_sysfont = 0; delete g_sysfont_big; @@ -58,7 +55,6 @@ const struct { const char *name; FontManager::FontUsage id; } builtinFontNames[] = { - { "builtinOSD", FontManager::kOSDFont }, { "builtinConsole", FontManager::kConsoleFont }, { "fixed5x8.bdf", FontManager::kConsoleFont }, { "fixed5x8-iso-8859-1.bdf", FontManager::kConsoleFont }, @@ -69,32 +65,112 @@ const struct { { "helvB12.bdf", FontManager::kBigGUIFont }, { "helvB12-iso-8859-1.bdf", FontManager::kBigGUIFont }, { "helvB12-ascii.bdf", FontManager::kBigGUIFont }, - { 0, FontManager::kOSDFont } + { 0, FontManager::kConsoleFont } }; +bool FontManager::assignFontToName(const Common::String &name, const Font *font) { + Common::String lowercaseName = name; + lowercaseName.toLowercase(); + _fontMap[lowercaseName] = font; + return true; +} + +void FontManager::removeFontName(const Common::String &name) { + Common::String lowercaseName = name; + lowercaseName.toLowercase(); + _fontMap.erase(lowercaseName); +} + const Font *FontManager::getFontByName(const Common::String &name) const { for (int i = 0; builtinFontNames[i].name; i++) if (!scumm_stricmp(name.c_str(), builtinFontNames[i].name)) return getFontByUsage(builtinFontNames[i].id); - if (!_fontMap.contains(name)) + Common::String lowercaseName = name; + lowercaseName.toLowercase(); + if (!_fontMap.contains(lowercaseName)) return 0; - return _fontMap[name]; + return _fontMap[lowercaseName]; } const Font *FontManager::getFontByUsage(FontUsage usage) const { switch (usage) { - case kOSDFont: - return g_scummfont; case kConsoleFont: return g_consolefont; case kGUIFont: return g_sysfont; case kBigGUIFont: return g_sysfont_big; + case kLocalizedFont: + { + // First try to find a kBigGUIFont + Common::String fontName = getLocalizedFontNameByUsage(kBigGUIFont); + if (!fontName.empty()) { + const Font *font = getFontByName(fontName); + if (font) + return font; + } + // Try kGUIFont + fontName = getLocalizedFontNameByUsage(kGUIFont); + if (!fontName.empty()) { + const Font *font = getFontByName(fontName); + if (font) + return font; + } +#ifdef USE_TRANSLATION + // Accept any other font that has the charset in its name + for (Common::HashMap<Common::String, const Font *>::const_iterator it = _fontMap.begin() ; it != _fontMap.end() ; ++it) { + if (it->_key.contains(TransMan.getCurrentCharset())) + return it->_value; + } +#endif + // Fallback: return a non localized kGUIFont. + // Maybe we should return a null pointer instead? + return g_sysfont; + } } return 0; } +Common::String FontManager::getLocalizedFontNameByUsage(FontUsage usage) const { + // We look for a name that matches the usage and that ends in .bdf. + // It should also not contain "-ascii" or "-iso-" in its name. + // We take the first name that matches. + for (int i = 0; builtinFontNames[i].name; i++) { + if (builtinFontNames[i].id == usage) { + Common::String fontName(builtinFontNames[i].name); + if (!fontName.contains("-ascii") && !fontName.contains("-iso-") && fontName.contains(".bdf")) + return genLocalizedFontFilename(fontName); + } + } + return Common::String(); +} + +Common::String FontManager::genLocalizedFontFilename(const Common::String &filename) const { +#ifndef USE_TRANSLATION + return filename; +#else + // We will transform the font filename in the following way: + // name.bdf + // will become: + // name-charset.bdf + // Note that name should not contain any dot here! + + // In the first step we look for the dot. In case there is none we will + // return the normal filename. + Common::String::const_iterator dot = Common::find(filename.begin(), filename.end(), '.'); + if (dot == filename.end()) + return filename; + + // Put the translated font filename string back together. + Common::String result(filename.begin(), dot); + result += '-'; + result += TransMan.getCurrentCharset(); + result += dot; + + return result; +#endif +} + } // End of namespace Graphics diff --git a/graphics/fontman.h b/graphics/fontman.h index d3b84ffa7c..858a733d45 100644 --- a/graphics/fontman.h +++ b/graphics/fontman.h @@ -36,7 +36,7 @@ class Font; class FontManager : public Common::Singleton<FontManager> { public: enum FontUsage { - kOSDFont = 0, + kLocalizedFont = 0, kConsoleFont = 1, kGUIFont = 2, kBigGUIFont = 3 @@ -57,14 +57,14 @@ public: * @param font the font object * @return true on success, false on failure */ - bool assignFontToName(const Common::String &name, const Font *font) { _fontMap[name] = font; return true; } + bool assignFontToName(const Common::String &name, const Font *font); /** * Removes binding from name to font * * @param name name which should be removed */ - void removeFontName(const Common::String &name) { _fontMap.erase(name); } + void removeFontName(const Common::String &name); /** * Retrieve a font object based on what it is supposed @@ -75,8 +75,26 @@ public: */ const Font *getFontByUsage(FontUsage usage) const; + /** + * Get the localized font for the current TranslationManager charset from the + * non localized font name + * + * @param filename the non-localized font file name. + * @return The localized font file name. + */ + Common::String genLocalizedFontFilename(const Common::String &filename) const; + //const Font *getFontBySize(int size???) const; +protected: + /** + * Get the name of the localized font for the given usage. There is no garanty that + * the font exists. If the usage is kLocalizedFont it returns an empty string. + * + * @param usage a FontUsage enum value indicating what the font will be used for. + * @return the name of a localized font or an empty string if no suitable font was found. + */ + Common::String getLocalizedFontNameByUsage(FontUsage usage) const; private: friend class Common::Singleton<SingletonBaseType>; diff --git a/graphics/fonts/scummfont.cpp b/graphics/fonts/scummfont.cpp deleted file mode 100644 index 1ff1e51fdc..0000000000 --- a/graphics/fonts/scummfont.cpp +++ /dev/null @@ -1,313 +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 "graphics/font.h" -#include "graphics/surface.h" - -namespace Graphics { - -// Built-in font -static const byte guifont[] = { - // Header - 0, 0, 99, 1, 226, 8, - // Character width table - 4, 8, 6, 8, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 2, 1, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 3, 7, 8, 7, 7, 8, 4, 5, 5, 8, 7, 4, 7, 3, 8, - 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 3, 4, 7, 5, 7, 7, - 8, 7, 7, 7, 7, 7, 7, 7, 7, 5, 7, 7, 7, 8, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 5, 8, 5, 8, 8, - 7, 7, 7, 6, 7, 7, 7, 7, 7, 5, 6, 7, 5, 8, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 5, 3, 5, 7, 8, - 7, 7, 7, 7, 7, 7, 0, 6, 7, 7, 7, 5, 5, 5, 7, 0, - 6, 8, 8, 7, 7, 7, 7, 7, 0, 7, 7, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, - // Character table - 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 1, 3, 6, 12, 24, 62, 3, 0, // 1 - 128, 192, 96, 48, 24, 124, 192, 0, // 2 - 0, 3, 62, 24, 12, 6, 3, 1, // 3 - 0, 192, 124, 24, 48, 96, 192, 128, // 4 - 0, 0, 0, 0, 0, 0, 0, 0, // 5 - 0, 0, 0, 0, 0, 0, 0, 0, // 6 - 0, 0, 0, 0, 0, 0, 0, 0, // 7 - 0, 0, 0, 0, 0, 0, 0, 0, // 8 - 0, 0, 0, 0, 0, 0, 0, 0, // 9 - 0, 0, 0, 0, 0, 0, 0, 0, // 10 - 0, 0, 0, 0, 0, 0, 0, 0, // 11 - 0, 0, 0, 0, 0, 0, 0, 0, // 12 - 0, 0, 0, 0, 0, 0, 0, 0, // 13 - 0, 0, 0, 0, 0, 0, 0, 0, // 14 - 0, 0, 0, 0, 0, 0, 0, 0, // 15 - 237, 74, 72, 0, 0, 0, 0, 0, // 16 - 128, 128, 128, 0, 0, 0, 0, 0, // 17 - 0, 0, 0, 0, 0, 0, 0, 0, // 18 - 60, 66, 153, 161, 161, 153, 66, 60, // 19 - 0, 0, 0, 0, 0, 0, 0, 0, // 20 - 0, 0, 0, 0, 0, 0, 0, 0, // 21 - 0, 0, 0, 0, 0, 0, 0, 0, // 22 - 0, 0, 0, 0, 0, 0, 0, 0, // 23 - 0, 0, 0, 0, 0, 0, 0, 0, // 24 - 0, 0, 0, 0, 0, 0, 0, 0, // 25 - 0, 0, 0, 0, 0, 0, 0, 0, // 26 - 0, 0, 0, 0, 0, 0, 0, 0, // 27 - 0, 0, 0, 0, 0, 0, 0, 0, // 28 - 0, 0, 0, 0, 0, 0, 0, 0, // 29 - 0, 0, 0, 0, 0, 0, 0, 0, // 30 - 0, 0, 0, 0, 0, 0, 0, 0, // 31 - 0, 0, 0, 0, 0, 0, 0, 0, // 32 - 96, 96, 96, 96, 0, 0, 96, 0, // 33 - 102, 102, 102, 0, 0, 0, 0, 0, // 34 - 102, 102, 255, 102, 255, 102, 102, 0, // 35 - 24, 62, 96, 60, 6, 124, 24, 0, // 36 - 98, 102, 12, 24, 48, 102, 70, 0, // 37 - 60, 102, 60, 56, 103, 102, 63, 0, // 38 - 96, 48, 16, 0, 0, 0, 0, 0, // 39 - 24, 48, 96, 96, 96, 48, 24, 0, // 40 - 96, 48, 24, 24, 24, 48, 96, 0, // 41 - 0, 102, 60, 255, 60, 102, 0, 0, // 42 - 0, 24, 24, 126, 24, 24, 0, 0, // 43 - 0, 0, 0, 0, 0, 48, 48, 96, // 44 - 0, 0, 0, 126, 0, 0, 0, 0, // 45 - 0, 0, 0, 0, 0, 96, 96, 0, // 46 - 0, 3, 6, 12, 24, 48, 96, 0, // 47 - 60, 102, 102, 102, 102, 102, 60, 0, // 48 - 24, 24, 56, 24, 24, 24, 126, 0, // 49 - 60, 102, 6, 12, 48, 96, 126, 0, // 50 - 60, 102, 6, 28, 6, 102, 60, 0, // 51 - 6, 14, 30, 102, 127, 6, 6, 0, // 52 - 126, 96, 124, 6, 6, 102, 60, 0, // 53 - 60, 102, 96, 124, 102, 102, 60, 0, // 54 - 126, 102, 12, 24, 24, 24, 24, 0, // 55 - 60, 102, 102, 60, 102, 102, 60, 0, // 56 - 60, 102, 102, 62, 6, 102, 60, 0, // 57 - 0, 0, 96, 0, 0, 96, 0, 0, // 58 - 0, 0, 48, 0, 0, 48, 48, 96, // 59 - 14, 24, 48, 96, 48, 24, 14, 0, // 60 - 0, 0, 120, 0, 120, 0, 0, 0, // 61 - 112, 24, 12, 6, 12, 24, 112, 0, // 62 - 60, 102, 6, 12, 24, 0, 24, 0, // 63 - 0, 0, 0, 255, 255, 0, 0, 0, // 64 - 24, 60, 102, 126, 102, 102, 102, 0, // 65 - 124, 102, 102, 124, 102, 102, 124, 0, // 66 - 60, 102, 96, 96, 96, 102, 60, 0, // 67 - 120, 108, 102, 102, 102, 108, 120, 0, // 68 - 126, 96, 96, 120, 96, 96, 126, 0, // 69 - 126, 96, 96, 120, 96, 96, 96, 0, // 70 - 60, 102, 96, 110, 102, 102, 60, 0, // 71 - 102, 102, 102, 126, 102, 102, 102, 0, // 72 - 120, 48, 48, 48, 48, 48, 120, 0, // 73 - 30, 12, 12, 12, 12, 108, 56, 0, // 74 - 102, 108, 120, 112, 120, 108, 102, 0, // 75 - 96, 96, 96, 96, 96, 96, 126, 0, // 76 - 99, 119, 127, 107, 99, 99, 99, 0, // 77 - 102, 118, 126, 126, 110, 102, 102, 0, // 78 - 60, 102, 102, 102, 102, 102, 60, 0, // 79 - 124, 102, 102, 124, 96, 96, 96, 0, // 80 - 60, 102, 102, 102, 102, 60, 14, 0, // 81 - 124, 102, 102, 124, 120, 108, 102, 0, // 82 - 60, 102, 96, 60, 6, 102, 60, 0, // 83 - 126, 24, 24, 24, 24, 24, 24, 0, // 84 - 102, 102, 102, 102, 102, 102, 60, 0, // 85 - 102, 102, 102, 102, 102, 60, 24, 0, // 86 - 99, 99, 99, 107, 127, 119, 99, 0, // 87 - 102, 102, 60, 24, 60, 102, 102, 0, // 88 - 102, 102, 102, 60, 24, 24, 24, 0, // 89 - 126, 6, 12, 24, 48, 96, 126, 0, // 90 - 120, 96, 96, 96, 96, 96, 120, 0, // 91 - 3, 6, 12, 24, 48, 96, 192, 0, // 92 - 120, 24, 24, 24, 24, 24, 120, 0, // 93 - 0, 0, 0, 0, 0, 219, 219, 0, // 94 - 0, 0, 0, 0, 0, 0, 0, 255, // 95 - 102, 102, 102, 0, 0, 0, 0, 0, // 96 - 0, 0, 60, 6, 62, 102, 62, 0, // 97 - 0, 96, 96, 124, 102, 102, 124, 0, // 98 - 0, 0, 60, 96, 96, 96, 60, 0, // 99 - 0, 6, 6, 62, 102, 102, 62, 0, // 100 - 0, 0, 60, 102, 126, 96, 60, 0, // 101 - 0, 14, 24, 62, 24, 24, 24, 0, // 102 - 0, 0, 62, 102, 102, 62, 6, 124, // 103 - 0, 96, 96, 124, 102, 102, 102, 0, // 104 - 0, 48, 0, 112, 48, 48, 120, 0, // 105 - 0, 12, 0, 12, 12, 12, 12, 120, // 106 - 0, 96, 96, 108, 120, 108, 102, 0, // 107 - 0, 112, 48, 48, 48, 48, 120, 0, // 108 - 0, 0, 102, 127, 127, 107, 99, 0, // 109 - 0, 0, 124, 102, 102, 102, 102, 0, // 110 - 0, 0, 60, 102, 102, 102, 60, 0, // 111 - 0, 0, 124, 102, 102, 124, 96, 96, // 112 - 0, 0, 62, 102, 102, 62, 6, 6, // 113 - 0, 0, 124, 102, 96, 96, 96, 0, // 114 - 0, 0, 62, 96, 60, 6, 124, 0, // 115 - 0, 24, 126, 24, 24, 24, 14, 0, // 116 - 0, 0, 102, 102, 102, 102, 62, 0, // 117 - 0, 0, 102, 102, 102, 60, 24, 0, // 118 - 0, 0, 99, 107, 127, 62, 54, 0, // 119 - 0, 0, 102, 60, 24, 60, 102, 0, // 120 - 0, 0, 102, 102, 102, 62, 12, 120, // 121 - 0, 0, 126, 12, 24, 48, 126, 0, // 122 - 24, 48, 48, 96, 48, 48, 24, 0, // 123 - 96, 96, 96, 0, 96, 96, 96, 0, // 124 - 96, 48, 48, 24, 48, 48, 96, 0, // 125 - 0, 0, 97, 153, 134, 0, 0, 0, // 126 - 8, 12, 14, 255, 255, 14, 12, 8, // 127 - 60, 102, 96, 96, 102, 60, 24, 56, // 128 - 102, 0, 102, 102, 102, 102, 62, 0, // 129 - 12, 24, 60, 102, 126, 96, 60, 0, // 130 - 24, 36, 60, 6, 62, 102, 62, 0, // 131 - 102, 0, 60, 6, 62, 102, 62, 0, // 132 - 48, 24, 60, 6, 62, 102, 62, 0, // 133 - 0, 0, 0, 0, 0, 0, 0, 0, // 134 - 0, 60, 96, 96, 96, 60, 24, 56, // 135 - 24, 36, 60, 102, 126, 96, 60, 0, // 136 - 102, 0, 60, 102, 126, 96, 60, 0, // 137 - 48, 24, 60, 102, 126, 96, 60, 0, // 138 - 0, 216, 0, 112, 48, 48, 120, 0, // 139 - 48, 72, 0, 112, 48, 48, 120, 0, // 140 - 96, 48, 0, 112, 48, 48, 120, 0, // 141 - 102, 24, 60, 102, 126, 102, 102, 0, // 142 - 0, 0, 0, 0, 0, 0, 0, 0, // 143 - 24, 48, 124, 96, 120, 96, 124, 0, // 144 - 0, 0, 108, 26, 126, 216, 110, 0, // 145 - 30, 40, 40, 126, 72, 136, 142, 0, // 146 - 24, 36, 60, 102, 102, 102, 60, 0, // 147 - 102, 0, 60, 102, 102, 102, 60, 0, // 148 - 48, 24, 60, 102, 102, 102, 60, 0, // 149 - 24, 36, 0, 102, 102, 102, 62, 0, // 150 - 48, 24, 102, 102, 102, 102, 62, 0, // 151 - 0, 0, 0, 0, 0, 0, 0, 0, // 152 - 102, 60, 102, 102, 102, 102, 60, 0, // 153 - 102, 0, 102, 102, 102, 102, 60, 0, // 154 - 0, 0, 0, 0, 0, 0, 0, 0, // 155 - 0, 0, 0, 0, 0, 0, 0, 0, // 156 - 0, 0, 0, 0, 0, 0, 0, 0, // 157 - 0, 0, 0, 0, 0, 0, 0, 0, // 158 - 0, 0, 0, 0, 0, 0, 0, 0, // 159 - 12, 24, 60, 6, 62, 102, 62, 0, // 160 - 0, 0, 0, 0, 0, 0, 0, 0, // 161 - 0, 0, 0, 0, 0, 0, 0, 0, // 162 - 0, 0, 0, 0, 0, 0, 0, 0, // 163 - 0, 0, 0, 0, 0, 0, 0, 0, // 164 - 0, 0, 0, 0, 0, 0, 0, 0, // 165 - 0, 0, 0, 0, 0, 0, 0, 0, // 166 - 0, 0, 0, 0, 0, 0, 0, 0, // 167 - 0, 0, 0, 0, 0, 0, 0, 0, // 168 - 0, 0, 0, 0, 0, 0, 0, 0, // 169 - 0, 0, 0, 0, 0, 0, 0, 0, // 170 - 0, 0, 0, 0, 0, 0, 0, 0, // 171 - 0, 0, 0, 0, 0, 0, 0, 0, // 172 - 0, 0, 0, 0, 0, 0, 0, 0, // 173 - 0, 0, 0, 0, 0, 0, 0, 0, // 174 - 0, 0, 0, 0, 0, 0, 0, 0, // 175 - 0, 0, 0, 0, 0, 0, 0, 0, // 176 - 0, 0, 0, 0, 0, 0, 0, 0, // 177 - 0, 0, 0, 0, 0, 0, 0, 0, // 178 - 0, 0, 0, 0, 0, 0, 0, 0, // 179 - 0, 0, 0, 0, 0, 0, 0, 0, // 180 - 0, 0, 0, 0, 0, 0, 0, 0, // 181 - 0, 0, 0, 0, 0, 0, 0, 0, // 182 - 0, 0, 0, 0, 0, 0, 0, 0, // 183 - 0, 0, 0, 0, 0, 0, 0, 0, // 184 - 0, 0, 0, 0, 0, 0, 0, 0, // 185 - 0, 0, 0, 0, 0, 0, 0, 0, // 186 - 0, 0, 0, 0, 0, 0, 0, 0, // 187 - 0, 0, 0, 0, 0, 0, 0, 0, // 188 - 0, 0, 0, 0, 0, 0, 0, 0, // 189 - 0, 0, 0, 0, 0, 0, 0, 0, // 190 - 0, 0, 0, 0, 0, 0, 0, 0, // 191 - 0, 0, 0, 0, 0, 0, 0, 0, // 192 - 0, 0, 0, 0, 0, 0, 0, 0, // 193 - 0, 0, 0, 0, 0, 0, 0, 0, // 194 - 0, 0, 0, 0, 0, 0, 0, 0, // 195 - 0, 0, 0, 0, 0, 0, 0, 0, // 196 - 0, 0, 0, 0, 0, 0, 0, 0, // 197 - 0, 0, 0, 0, 0, 0, 0, 0, // 198 - 0, 0, 0, 0, 0, 0, 0, 0, // 199 - 0, 0, 0, 0, 0, 0, 0, 0, // 200 - 0, 0, 0, 0, 0, 0, 0, 0, // 201 - 0, 0, 0, 0, 0, 0, 0, 0, // 202 - 0, 0, 0, 0, 0, 0, 0, 0, // 203 - 0, 0, 0, 0, 0, 0, 0, 0, // 204 - 0, 0, 0, 0, 0, 0, 0, 0, // 205 - 0, 0, 0, 0, 0, 0, 0, 0, // 206 - 0, 0, 0, 0, 0, 0, 0, 0, // 207 - 0, 0, 0, 0, 0, 0, 0, 0, // 208 - 0, 0, 0, 0, 0, 0, 0, 0, // 209 - 0, 0, 0, 0, 0, 0, 0, 0, // 210 - 0, 0, 0, 0, 0, 0, 0, 0, // 211 - 0, 0, 0, 0, 0, 0, 0, 0, // 212 - 0, 0, 0, 0, 0, 0, 0, 0, // 213 - 0, 0, 0, 0, 0, 0, 0, 0, // 214 - 0, 0, 0, 0, 0, 0, 0, 0, // 215 - 0, 0, 0, 0, 0, 0, 0, 0, // 216 - 0, 0, 0, 0, 0, 0, 0, 0, // 217 - 0, 0, 0, 0, 0, 0, 0, 0, // 218 - 0, 0, 0, 0, 0, 0, 0, 0, // 219 - 0, 0, 0, 0, 0, 0, 0, 0, // 220 - 0, 0, 0, 0, 0, 0, 0, 0, // 221 - 0, 0, 0, 0, 0, 0, 0, 0, // 222 - 0, 0, 0, 0, 0, 0, 0, 0, // 223 - 0, 0, 0, 0, 0, 0, 0, 0, // 224 - 28, 54, 54, 124, 102, 102, 124, 64, // 225 - 0, 0, 0 // ??? -}; - -int ScummFont::getCharWidth(byte chr) const { - return guifont[chr+6]; -} - -void ScummFont::drawChar(Surface *dst, byte chr, int tx, int ty, uint32 color) const { - assert(dst != 0); - byte *ptr = (byte *)dst->getBasePtr(tx, ty); - - const byte *tmp = guifont + 6 + guifont[4] + chr * 8; - uint buffer = 0; - uint mask = 0; - - for (int y = 0; y < 8; y++) { - if (ty + y < 0 || ty + y >= dst->h) - continue; - for (int x = 0; x < 8; x++) { - if (tx + x < 0 || tx + x >= dst->w) - continue; - unsigned char c; - mask >>= 1; - if (mask == 0) { - buffer = *tmp++; - mask = 0x80; - } - c = ((buffer & mask) != 0); - if (c) { - if (dst->format.bytesPerPixel == 1) - ptr[x] = color; - else if (dst->format.bytesPerPixel == 2) - ((uint16 *)ptr)[x] = color; - } - } - ptr += dst->pitch; - } -} - -} // End of namespace Graphics diff --git a/graphics/iff.h b/graphics/iff.h index 761c57c932..4d88148372 100644 --- a/graphics/iff.h +++ b/graphics/iff.h @@ -111,7 +111,7 @@ void decodePBM(Common::ReadStream &input, Surface &surface, byte *colors); * Decode a given PackBits encoded stream. * * PackBits is an RLE compression algorithm introduced by Apple. It is also - * used to encode ILBM and PBM subtypes of IFF files, and some flavours of + * used to encode ILBM and PBM subtypes of IFF files, and some flavors of * TIFF. * * As there is no compression across row boundaries in the above formats, diff --git a/graphics/module.mk b/graphics/module.mk index a9051c868a..32658c96bd 100644 --- a/graphics/module.mk +++ b/graphics/module.mk @@ -9,7 +9,6 @@ MODULE_OBJS := \ fonts/consolefont.o \ fonts/newfont_big.o \ fonts/newfont.o \ - fonts/scummfont.o \ fonts/winfont.o \ iff.o \ imagedec.o \ diff --git a/graphics/palette.h b/graphics/palette.h index 7eedb0f78d..77891c3fdc 100644 --- a/graphics/palette.h +++ b/graphics/palette.h @@ -55,7 +55,7 @@ public: * @param start the first palette entry to be updated * @param num the number of palette entries to be updated * - * @note It is an error if start+num exceeds 256, behaviour is undefined + * @note It is an error if start+num exceeds 256, behavior is undefined * in that case (the backend may ignore it silently or assert). * @note It is an error if this function gets called when the pixel format * in use (the return value of getScreenFormat) has more than one diff --git a/graphics/png.cpp b/graphics/png.cpp index e6dceab3fa..a1cf266227 100644 --- a/graphics/png.cpp +++ b/graphics/png.cpp @@ -202,7 +202,7 @@ Graphics::Surface *PNG::getSurface(const PixelFormat &format) { } // The surface is a whole scanline wide, skip the rest of it. if (_header.bitDepth == 4) - src += output->w / 2; + src += output->w / 2 + output->w % 2; } } @@ -236,7 +236,7 @@ bool PNG::read(Common::SeekableReadStream *str) { case kChunkIDAT: if (_compressedBufferSize == 0) { _compressedBufferSize += chunkLength; - _compressedBuffer = new byte[_compressedBufferSize]; + _compressedBuffer = (byte *)malloc(_compressedBufferSize); _stream->read(_compressedBuffer, chunkLength); } else { // Expand the buffer @@ -244,8 +244,8 @@ bool PNG::read(Common::SeekableReadStream *str) { _compressedBufferSize += chunkLength; byte *tmp = new byte[prevSize]; memcpy(tmp, _compressedBuffer, prevSize); - delete[] _compressedBuffer; - _compressedBuffer = new byte[_compressedBufferSize]; + free(_compressedBuffer); + _compressedBuffer = (byte *)malloc(_compressedBufferSize); memcpy(_compressedBuffer, tmp, prevSize); delete[] tmp; _stream->read(_compressedBuffer + prevSize, chunkLength); diff --git a/graphics/scaler.cpp b/graphics/scaler.cpp index 8038e2089e..a35fb9046e 100644 --- a/graphics/scaler.cpp +++ b/graphics/scaler.cpp @@ -196,7 +196,7 @@ void Normal2x(const uint8 *srcPtr, #else /** - * Trivial nearest-neighbour 2x scaler. + * Trivial nearest-neighbor 2x scaler. */ void Normal2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { @@ -221,7 +221,7 @@ void Normal2x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPit #endif /** - * Trivial nearest-neighbour 3x scaler. + * Trivial nearest-neighbor 3x scaler. */ void Normal3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { @@ -254,7 +254,7 @@ void Normal3x(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPit #define interpolate_1_1_1_1 interpolate16_1_1_1_1<ColorMask> /** - * Trivial nearest-neighbour 1.5x scaler. + * Trivial nearest-neighbor 1.5x scaler. */ template<typename ColorMask> void Normal1o5xTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, diff --git a/graphics/scaler/Normal2xARM.s b/graphics/scaler/Normal2xARM.s index 9afe3f34f0..e3592295e0 100644 --- a/graphics/scaler/Normal2xARM.s +++ b/graphics/scaler/Normal2xARM.s @@ -44,6 +44,7 @@ Normal2xARM: ADD r3, r3, r6 yloop: SUBS r14,r4, #4 + ADDLT r14,r14, #4 BLT thin xloop: LDRH r6, [r0], #2 diff --git a/graphics/scaler/aspect.cpp b/graphics/scaler/aspect.cpp index 64a1cd1534..b12fac418b 100644 --- a/graphics/scaler/aspect.cpp +++ b/graphics/scaler/aspect.cpp @@ -57,19 +57,6 @@ static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint1 template<typename ColorMask, int scale> static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint16 *srcB, int width) { - // For efficiency reasons we blit two pixels at a time, so it is important - // that makeRectStretchable() guarantees that the width is even and that - // the rect starts on a well-aligned address. (Even where unaligned memory - // access is allowed there may be a speed penalty for it.) - - // These asserts are disabled for maximal speed; but I leave them in here - // in case other people want to test if the memory alignment (to an - // address divisible by 4) is really working properly. - //assert(((int)dst & 3) == 0); - //assert(((int)srcA & 3) == 0); - //assert(((int)srcB & 3) == 0); - //assert((width & 1) == 0); - if (scale == 1) { while (width--) { *dst++ = interpolate16_7_1<ColorMask>(*srcB++, *srcA++); @@ -86,6 +73,18 @@ static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint1 template<typename ColorMask, int scale> static inline void interpolate5Line(uint16 *dst, const uint16 *srcA, const uint16 *srcB, int width) { + // For efficiency reasons we blit two pixels at a time, so it is important + // that makeRectStretchable() guarantees that the width is even and that + // the rect starts on a well-aligned address. (Even where unaligned memory + // access is allowed there may be a speed penalty for it.) + + // These asserts are disabled for maximal speed; but I leave them in here + // in case other people want to test if the memory alignment (to an + // address divisible by 4) is really working properly. + //assert(((int)dst & 3) == 0); + //assert(((int)srcA & 3) == 0); + //assert(((int)srcB & 3) == 0); + //assert((width & 1) == 0); width /= 2; const uint32 *sA = (const uint32 *)srcA; @@ -202,7 +201,7 @@ int stretch200To240(uint8 *buf, uint32 pitch, int width, int height, int srcX, i template<typename ColorMask> void Normal1xAspectTemplate(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height) { - for (int y = 0; y < height; ++y) { + for (int y = 0; y < (height * 6 / 5); ++y) { #if ASPECT_MODE == kSuperFastAndUglyAspectMode if ((y % 6) == 5) diff --git a/graphics/scaler/downscaler.cpp b/graphics/scaler/downscaler.cpp index fa17490475..65400ccd46 100644 --- a/graphics/scaler/downscaler.cpp +++ b/graphics/scaler/downscaler.cpp @@ -22,7 +22,7 @@ #include "graphics/scaler/downscaler.h" #include "graphics/scaler/intern.h" -#ifdef ARM +#ifdef USE_ARM_SCALER_ASM extern "C" { void DownscaleAllByHalfARM(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr, uint32 dstPitch, int width, int height, int mask, int round); } diff --git a/graphics/yuv_to_rgb.cpp b/graphics/yuv_to_rgb.cpp index 831736cd75..037ea9a007 100644 --- a/graphics/yuv_to_rgb.cpp +++ b/graphics/yuv_to_rgb.cpp @@ -196,52 +196,63 @@ DECLARE_SINGLETON(Graphics::YUVToRGBManager); namespace Graphics { #define PUT_PIXEL(s, d) \ - L = &lookup->_rgbToPix[(s)]; \ - if (dst->format.bytesPerPixel == 2) \ - *((uint16 *)(d)) = (L[cr_r] | L[crb_g] | L[cb_b]); \ - else \ - *((uint32 *)(d)) = (L[cr_r] | L[crb_g] | L[cb_b]) - -void convertYUV420ToRGB(Graphics::Surface *dst, const byte *ySrc, const byte *uSrc, const byte *vSrc, int yWidth, int yHeight, int yPitch, int uvPitch) { - // Sanity checks - assert(dst && dst->pixels); - assert(dst->format.bytesPerPixel == 2 || dst->format.bytesPerPixel == 4); - assert(ySrc && uSrc && vSrc); - assert((yWidth & 1) == 0); - assert((yHeight & 1) == 0); - - const YUVToRGBLookup *lookup = YUVToRGBMan.getLookup(dst->format); - - byte *dstPtr = (byte *)dst->pixels; + L = &rgbToPix[(s)]; \ + *((PixelInt *)(d)) = (L[cr_r] | L[crb_g] | L[cb_b]) +template<typename PixelInt> +void convertYUV420ToRGB(byte *dstPtr, int dstPitch, const YUVToRGBLookup *lookup, const byte *ySrc, const byte *uSrc, const byte *vSrc, int yWidth, int yHeight, int yPitch, int uvPitch) { int halfHeight = yHeight >> 1; int halfWidth = yWidth >> 1; + // Keep the tables in pointers here to avoid a dereference on each pixel + const int16 *Cr_r_tab = lookup->_colorTab; + const int16 *Cr_g_tab = Cr_r_tab + 256; + const int16 *Cb_g_tab = Cr_g_tab + 256; + const int16 *Cb_b_tab = Cb_g_tab + 256; + const uint32 *rgbToPix = lookup->_rgbToPix; + for (int h = 0; h < halfHeight; h++) { for (int w = 0; w < halfWidth; w++) { - register uint32 *L; + register const uint32 *L; - int16 cr_r = lookup->_colorTab[*vSrc + 0 * 256]; - int16 crb_g = lookup->_colorTab[*vSrc + 1 * 256] + lookup->_colorTab[*uSrc + 2 * 256]; - int16 cb_b = lookup->_colorTab[*uSrc + 3 * 256]; + int16 cr_r = Cr_r_tab[*vSrc]; + int16 crb_g = Cr_g_tab[*vSrc] + Cb_g_tab[*uSrc]; + int16 cb_b = Cb_b_tab[*uSrc]; ++uSrc; ++vSrc; PUT_PIXEL(*ySrc, dstPtr); - PUT_PIXEL(*(ySrc + yPitch), dstPtr + dst->pitch); + PUT_PIXEL(*(ySrc + yPitch), dstPtr + dstPitch); ySrc++; - dstPtr += dst->format.bytesPerPixel; + dstPtr += sizeof(PixelInt); PUT_PIXEL(*ySrc, dstPtr); - PUT_PIXEL(*(ySrc + yPitch), dstPtr + dst->pitch); + PUT_PIXEL(*(ySrc + yPitch), dstPtr + dstPitch); ySrc++; - dstPtr += dst->format.bytesPerPixel; + dstPtr += sizeof(PixelInt); } - dstPtr += dst->pitch; + dstPtr += dstPitch; ySrc += (yPitch << 1) - yWidth; uSrc += uvPitch - halfWidth; vSrc += uvPitch - halfWidth; } } +void convertYUV420ToRGB(Graphics::Surface *dst, const byte *ySrc, const byte *uSrc, const byte *vSrc, int yWidth, int yHeight, int yPitch, int uvPitch) { + // Sanity checks + assert(dst && dst->pixels); + assert(dst->format.bytesPerPixel == 2 || dst->format.bytesPerPixel == 4); + assert(ySrc && uSrc && vSrc); + assert((yWidth & 1) == 0); + assert((yHeight & 1) == 0); + + const YUVToRGBLookup *lookup = YUVToRGBMan.getLookup(dst->format); + + // Use a templated function to avoid an if check on every pixel + if (dst->format.bytesPerPixel == 2) + convertYUV420ToRGB<uint16>((byte *)dst->pixels, dst->pitch, lookup, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch); + else + convertYUV420ToRGB<uint32>((byte *)dst->pixels, dst->pitch, lookup, ySrc, uSrc, vSrc, yWidth, yHeight, yPitch, uvPitch); +} + } // End of namespace Graphics diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp index 678b5f0ea4..73c1835c9e 100644 --- a/gui/ThemeEngine.cpp +++ b/gui/ThemeEngine.cpp @@ -561,7 +561,7 @@ bool ThemeEngine::addFont(TextData textId, const Common::String &file) { if (file == "default") { _texts[textId]->_fontPtr = _font; } else { - Common::String localized = genLocalizedFontFilename(file); + Common::String localized = FontMan.genLocalizedFontFilename(file); // Try built-in fonts _texts[textId]->_fontPtr = FontMan.getFontByName(localized); @@ -1271,7 +1271,7 @@ void ThemeEngine::openDialog(bool doBuffer, ShadingStyle style) { } bool ThemeEngine::createCursor(const Common::String &filename, int hotspotX, int hotspotY, int scale) { - if (!_system->hasFeature(OSystem::kFeatureCursorHasPalette)) + if (!_system->hasFeature(OSystem::kFeatureCursorPalette)) return true; // Try to locate the specified file among all loaded bitmaps @@ -1468,32 +1468,6 @@ Common::String ThemeEngine::genCacheFilename(const Common::String &filename) con return Common::String(); } -Common::String ThemeEngine::genLocalizedFontFilename(const Common::String &filename) const { -#ifndef USE_TRANSLATION - return filename; -#else - // We will transform the font filename in the following way: - // name.bdf - // will become: - // name-charset.bdf - // Note that name should not contain any dot here! - - // In the first step we look for the dot. In case there is none we will - // return the normal filename. - Common::String::const_iterator dot = Common::find(filename.begin(), filename.end(), '.'); - if (dot == filename.end()) - return filename; - - // Put the translated font filename string back together. - Common::String result(filename.begin(), dot); - result += '-'; - result += TransMan.getCurrentCharset(); - result += dot; - - return result; -#endif -} - /********************************************************** * Static Theme XML functions diff --git a/gui/ThemeEngine.h b/gui/ThemeEngine.h index cc446ac6b0..5fbea7e301 100644 --- a/gui/ThemeEngine.h +++ b/gui/ThemeEngine.h @@ -539,7 +539,6 @@ protected: const Graphics::Font *loadFontFromArchive(const Common::String &filename); const Graphics::Font *loadCachedFontFromArchive(const Common::String &filename); Common::String genCacheFilename(const Common::String &filename) const; - Common::String genLocalizedFontFilename(const Common::String &filename) const; /** * Actual Dirty Screen handling function. diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp index 56ee6df5cc..db45b5a995 100644 --- a/gui/ThemeParser.cpp +++ b/gui/ThemeParser.cpp @@ -232,7 +232,7 @@ bool ThemeParser::parserCallback_bitmap(ParserNode *node) { } if (!_theme->addBitmap(node->values["filename"])) - return parserError("Error loading Bitmap file '%s'", node->values["filename"].c_str()); + return parserError("Error loading Bitmap file '" + node->values["filename"] + "'"); return true; } @@ -252,7 +252,7 @@ bool ThemeParser::parserCallback_text(ParserNode *node) { TextColor textColorId = parseTextColorId(node->values["text_color"]); if (!_theme->addTextData(id, textDataId, textColorId, alignH, alignV)) - return parserError("Error adding Text Data for '%s'.", id.c_str()); + return parserError("Error adding Text Data for '" + id + "'."); return true; } @@ -279,13 +279,13 @@ bool ThemeParser::parserCallback_color(ParserNode *node) { Common::String name = node->values["name"]; if (_palette.contains(name)) - return parserError("Color '%s' has already been defined.", name.c_str()); + return parserError("Color '" + name + "' has already been defined."); int red, green, blue; if (parseIntegerKey(node->values["rgb"], 3, &red, &green, &blue) == false || red < 0 || red > 255 || green < 0 || green > 255 || blue < 0 || blue > 255) - return parserError("Error parsing RGB values for palette color '%s'", name.c_str());\ + return parserError("Error parsing RGB values for palette color '" + name + "'"); _palette[name].r = red; _palette[name].g = green; @@ -332,7 +332,7 @@ bool ThemeParser::parserCallback_drawstep(ParserNode *node) { drawstep->drawingCall = getDrawingFunctionCallback(functionName); if (drawstep->drawingCall == 0) - return parserError("%s is not a valid drawing function name", functionName.c_str()); + return parserError(functionName + " is not a valid drawing function name"); if (!parseDrawStep(node, drawstep, true)) return false; @@ -352,11 +352,8 @@ bool ThemeParser::parserCallback_drawdata(ParserNode *node) { } if (node->values.contains("cache")) { - if (node->values["cache"] == "true") - cached = true; - else if (node->values["cache"] == "false") - cached = false; - else return parserError("'Parsed' value must be either true or false."); + if (!Common::parseBool(node->values["cache"], cached)) + return parserError("'Parsed' value must be either true or false."); } if (_theme->addDrawData(node->values["id"], cached) == false) @@ -385,11 +382,11 @@ bool ThemeParser::parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawst #define __PARSER_ASSIGN_INT(struct_name, key_name, force) \ if (stepNode->values.contains(key_name)) { \ if (!parseIntegerKey(stepNode->values[key_name], 1, &x)) \ - return parserError("Error parsing key value for '%s'.", key_name); \ + return parserError("Error parsing key value for '" + Common::String(key_name) + "'."); \ \ drawstep->struct_name = x; \ } else if (force) { \ - return parserError("Missing necessary key '%s'.", key_name); \ + return parserError("Missing necessary key '" + Common::String(key_name) + "'."); \ } /** @@ -410,7 +407,7 @@ bool ThemeParser::parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawst blue = _palette[val].b; \ } else if (parseIntegerKey(val, 3, &red, &green, &blue) == false || \ red < 0 || red > 255 || green < 0 || green > 255 || blue < 0 || blue > 255) \ - return parserError("Error parsing color struct '%s'", val.c_str());\ + return parserError("Error parsing color struct '" + val + "'");\ \ drawstep->struct_name.r = red; \ drawstep->struct_name.g = green; \ @@ -466,7 +463,7 @@ bool ThemeParser::parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawst else if (val == "right") drawstep->extraData = Graphics::VectorRenderer::kTriangleRight; else - return parserError("'%s' is not a valid value for triangle orientation.", val.c_str()); + return parserError("'" + val + "' is not a valid value for triangle orientation."); } } @@ -545,7 +542,7 @@ bool ThemeParser::parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawst else if (val == "gradient") drawstep->fillMode = Graphics::VectorRenderer::kFillGradient; else - return parserError("'%s' is not a valid fill mode for a shape.", stepNode->values["fill"].c_str()); + return parserError("'" + stepNode->values["fill"] + "' is not a valid fill mode for a shape."); } #undef __PARSER_ASSIGN_INT @@ -567,7 +564,7 @@ bool ThemeParser::parserCallback_def(ParserNode *node) { value = _theme->getEvaluator()->getVar(node->values["value"]); else if (!parseIntegerKey(node->values["value"], 1, &value)) - return parserError("Invalid definition for '%s'.", var.c_str()); + return parserError("Invalid definition for '" + var + "'."); _theme->getEvaluator()->setVar(var, value); return true; @@ -585,7 +582,7 @@ bool ThemeParser::parserCallback_widget(ParserNode *node) { var = "Globals." + node->values["name"] + "."; if (!parseCommonLayoutProps(node, var)) - return parserError("Error parsing Layout properties of '%s'.", var.c_str()); + return parserError("Error parsing Layout properties of '" + var + "'."); } else { // FIXME: Shouldn't we distinguish the name/id and the label of a widget? @@ -595,9 +592,7 @@ bool ThemeParser::parserCallback_widget(ParserNode *node) { bool enabled = true; if (node->values.contains("enabled")) { - if (node->values["enabled"] == "false") - enabled = false; - else if (node->values["enabled"] != "true") + if (!Common::parseBool(node->values["enabled"], enabled)) return parserError("Invalid value for Widget enabling (expecting true/false)"); } @@ -606,7 +601,7 @@ bool ThemeParser::parserCallback_widget(ParserNode *node) { width = _theme->getEvaluator()->getVar(node->values["width"]); else if (!parseIntegerKey(node->values["width"], 1, &width)) - return parserError("Corrupted width value in key for %s", var.c_str()); + return parserError("Corrupted width value in key for " + var); } if (node->values.contains("height")) { @@ -614,7 +609,7 @@ bool ThemeParser::parserCallback_widget(ParserNode *node) { height = _theme->getEvaluator()->getVar(node->values["height"]); else if (!parseIntegerKey(node->values["height"], 1, &height)) - return parserError("Corrupted height value in key for %s", var.c_str()); + return parserError("Corrupted height value in key for " + var); } Graphics::TextAlign alignH = Graphics::kTextAlignLeft; @@ -641,9 +636,7 @@ bool ThemeParser::parserCallback_dialog(ParserNode *node) { } if (node->values.contains("enabled")) { - if (node->values["enabled"] == "false") - enabled = false; - else if (node->values["enabled"] != "true") + if (!Common::parseBool(node->values["enabled"], enabled)) return parserError("Invalid value for Dialog enabling (expecting true/false)"); } @@ -677,16 +670,19 @@ bool ThemeParser::parserCallback_import(ParserNode *node) { bool ThemeParser::parserCallback_layout(ParserNode *node) { int spacing = -1; + bool center = false; if (node->values.contains("spacing")) { if (!parseIntegerKey(node->values["spacing"], 1, &spacing)) return false; } + Common::parseBool(node->values["center"], center); + if (node->values["type"] == "vertical") - _theme->getEvaluator()->addLayout(GUI::ThemeLayout::kLayoutVertical, spacing, node->values["center"] == "true"); + _theme->getEvaluator()->addLayout(GUI::ThemeLayout::kLayoutVertical, spacing, center); else if (node->values["type"] == "horizontal") - _theme->getEvaluator()->addLayout(GUI::ThemeLayout::kLayoutHorizontal, spacing, node->values["center"] == "true"); + _theme->getEvaluator()->addLayout(GUI::ThemeLayout::kLayoutHorizontal, spacing, center); else return parserError("Invalid layout type. Only 'horizontal' and 'vertical' layouts allowed."); diff --git a/gui/console.h b/gui/console.h index 442047ef78..50a00a1ad1 100644 --- a/gui/console.h +++ b/gui/console.h @@ -31,7 +31,7 @@ class ScrollBarWidget; /* FIXME #1: The console dialog code has some fundamental problems. First of, note the conflict between the (constant) value kCharsPerLine, and the - (variable) value _pageWidth. Look a bit at the code get familiar with them, + (variable) value _pageWidth. Look a bit at the code to get familiar with them, then return... Now, why don't we just drop kCharsPerLine? Because of the problem of resizing! When the user changes the scaler, the console will get resized. If the dialog @@ -47,7 +47,7 @@ class ScrollBarWidget; of making things like scrolling, drawing etc. more complicated. Either way, the current situation is bad, and we should resolve it one way - or the other (and if you can think of a thirds, feel free to suggest it). + or the other (and if you can think of a third, feel free to suggest it). diff --git a/gui/credits.h b/gui/credits.h index a98fddd339..ba679c433c 100644 --- a/gui/credits.h +++ b/gui/credits.h @@ -83,6 +83,10 @@ static const char *credits[] = { "C0""Filippos Karapetis", "C0""Pawel Kolodziejski", "", +"C1""DreamWeb", +"C0""Vladimir Menshakov", +"C0""Torbj\366rn Andersson", +"", "C1""Gob", "C0""Torbj\366rn Andersson", "C0""Arnaud Boutonn\351", @@ -249,7 +253,9 @@ static const char *credits[] = { "C1""PocketPC / WinCE", "C0""Nicolas Bacca", "C2""(retired)", +"C0""Ismail Khatib", "C0""Kostas Nakos", +"C2""(retired)", "", "C1""PlayStation 2", "C0""Robert G\366ffringmann", diff --git a/gui/debugger.cpp b/gui/debugger.cpp index ab3fcef6b2..3973583d38 100644 --- a/gui/debugger.cpp +++ b/gui/debugger.cpp @@ -29,7 +29,7 @@ #include "engines/engine.h" #include "gui/debugger.h" -#ifndef USE_TEXT_CONSOLE +#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER #include "gui/console.h" #elif defined(USE_READLINE) #include <readline/readline.h> @@ -44,7 +44,7 @@ Debugger::Debugger() { _isActive = false; _errStr = NULL; _firstTime = true; -#ifndef USE_TEXT_CONSOLE +#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER _debuggerDialog = new GUI::ConsoleDialog(1.0f, 0.67f); _debuggerDialog->setInputCallback(debuggerInputCallback, this); _debuggerDialog->setCompletionCallback(debuggerCompletionCallback, this); @@ -59,6 +59,7 @@ Debugger::Debugger() { DCmd_Register("quit", WRAP_METHOD(Debugger, Cmd_Exit)); DCmd_Register("help", WRAP_METHOD(Debugger, Cmd_Help)); + DCmd_Register("openlog", WRAP_METHOD(Debugger, Cmd_OpenLog)); DCmd_Register("debugflag_list", WRAP_METHOD(Debugger, Cmd_DebugFlagsList)); DCmd_Register("debugflag_enable", WRAP_METHOD(Debugger, Cmd_DebugFlagEnable)); @@ -66,7 +67,7 @@ Debugger::Debugger() { } Debugger::~Debugger() { -#ifndef USE_TEXT_CONSOLE +#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER delete _debuggerDialog; #endif } @@ -78,7 +79,7 @@ int Debugger::DebugPrintf(const char *format, ...) { va_start(argptr, format); int count; -#ifndef USE_TEXT_CONSOLE +#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER count = _debuggerDialog->vprintFormat(1, format, argptr); #else count = ::vprintf(format, argptr); @@ -125,7 +126,7 @@ void Debugger::onFrame() { } } -#if defined(USE_TEXT_CONSOLE) && defined(USE_READLINE) +#if defined(USE_TEXT_CONSOLE_FOR_DEBUGGER) && defined(USE_READLINE) namespace { Debugger *g_readline_debugger; @@ -140,7 +141,7 @@ void Debugger::enter() { // TODO: Having three I/O methods #ifdef-ed in this file is not the // cleanest approach to this... -#ifndef USE_TEXT_CONSOLE +#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER if (_firstTime) { DebugPrintf("Debugger started, type 'exit' to return to the game.\n"); DebugPrintf("Type 'help' to see a little list of commands and variables.\n"); @@ -363,7 +364,7 @@ bool Debugger::tabComplete(const char *input, Common::String &completion) const return true; } -#if defined(USE_TEXT_CONSOLE) && defined(USE_READLINE) +#if defined(USE_TEXT_CONSOLE_FOR_DEBUGGER) && defined(USE_READLINE) char *Debugger::readlineComplete(const char *input, int state) { static CommandsMap::const_iterator iter; @@ -417,7 +418,7 @@ bool Debugger::Cmd_Exit(int argc, const char **argv) { // Print a list of all registered commands (and variables, if any), // nicely word-wrapped. bool Debugger::Cmd_Help(int argc, const char **argv) { -#ifndef USE_TEXT_CONSOLE +#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER const int charsPerLine = _debuggerDialog->getCharsPerLine(); #elif defined(USE_READLINE) int charsPerLine, rows; @@ -475,6 +476,15 @@ bool Debugger::Cmd_Help(int argc, const char **argv) { return true; } +bool Debugger::Cmd_OpenLog(int argc, const char **argv) { + if (g_system->hasFeature(OSystem::kFeatureDisplayLogFile)) + g_system->displayLogFile(); + else + DebugPrintf("Opening the log file not supported on this system\n"); + return true; +} + + bool Debugger::Cmd_DebugFlagsList(int argc, const char **argv) { const Common::DebugManager::DebugChannelList &debugLevels = DebugMan.listDebugChannels(); @@ -520,7 +530,7 @@ bool Debugger::Cmd_DebugFlagDisable(int argc, const char **argv) { } // Console handler -#ifndef USE_TEXT_CONSOLE +#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER bool Debugger::debuggerInputCallback(GUI::ConsoleDialog *console, const char *input, void *refCon) { Debugger *debugger = (Debugger *)refCon; diff --git a/gui/debugger.h b/gui/debugger.h index c6fce87107..b74b0d6f0f 100644 --- a/gui/debugger.h +++ b/gui/debugger.h @@ -29,7 +29,7 @@ namespace GUI { -#ifndef USE_TEXT_CONSOLE +#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER class ConsoleDialog; #endif @@ -69,7 +69,7 @@ protected: typedef Common::Functor2<int, const char **, bool> Debuglet; /** - * Convenience macro that makes it either to register a method + * Convenience macro that makes it easier to register a method * of a debugger subclass as a command. * Usage example: * DCmd_Register("COMMAND", WRAP_METHOD(MyDebugger, MyCmd)); @@ -144,7 +144,7 @@ private: */ bool _firstTime; -#ifndef USE_TEXT_CONSOLE +#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER GUI::ConsoleDialog *_debuggerDialog; #endif @@ -190,11 +190,12 @@ private: protected: bool Cmd_Exit(int argc, const char **argv); bool Cmd_Help(int argc, const char **argv); + bool Cmd_OpenLog(int argc, const char **argv); bool Cmd_DebugFlagsList(int argc, const char **argv); bool Cmd_DebugFlagEnable(int argc, const char **argv); bool Cmd_DebugFlagDisable(int argc, const char **argv); -#ifndef USE_TEXT_CONSOLE +#ifndef USE_TEXT_CONSOLE_FOR_DEBUGGER private: static bool debuggerInputCallback(GUI::ConsoleDialog *console, const char *input, void *refCon); static bool debuggerCompletionCallback(GUI::ConsoleDialog *console, const char *input, Common::String &completion, void *refCon); diff --git a/gui/gui-manager.cpp b/gui/gui-manager.cpp index ef2f89df9c..af1852d56d 100644 --- a/gui/gui-manager.cpp +++ b/gui/gui-manager.cpp @@ -74,6 +74,14 @@ GuiManager::GuiManager() : _redrawStatus(kRedrawDisabled), _stateIsSaved(false), ConfMan.registerDefault("gui_renderer", ThemeEngine::findModeConfigName(ThemeEngine::_defaultRendererMode)); ThemeEngine::GraphicsMode gfxMode = (ThemeEngine::GraphicsMode)ThemeEngine::findMode(ConfMan.get("gui_renderer")); +#ifdef __DS__ + // Searching for the theme file takes ~10 seconds on the DS. + // Disable this search here because external themes are not supported. + if (!loadNewTheme("builtin", gfxMode)) { + // Loading the built-in theme failed as well. Bail out + error("Failed to load any GUI theme, aborting"); + } +#else // Try to load the theme if (!loadNewTheme(themefile, gfxMode)) { // Loading the theme failed, try to load the built-in theme @@ -82,6 +90,7 @@ GuiManager::GuiManager() : _redrawStatus(kRedrawDisabled), _stateIsSaved(false), error("Failed to load any GUI theme, aborting"); } } +#endif } GuiManager::~GuiManager() { @@ -297,7 +306,7 @@ void GuiManager::runLoop() { // dialog-related events since they were probably generated while the old dialog // was still visible, and therefore not intended for the new one. // - // This hopefully fixes strange behaviour/crashes with pop-up widgets. (Most easily + // This hopefully fixes strange behavior/crashes with pop-up widgets. (Most easily // triggered in 3x mode or when running ScummVM under Valgrind.) if (activeDialog != getTopDialog() && event.type != Common::EVENT_SCREEN_CHANGED) continue; diff --git a/gui/launcher.cpp b/gui/launcher.cpp index 792b5bbfbe..6920e0ccd2 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -685,10 +685,7 @@ void LauncherDialog::updateListing() { } if (description.empty()) { - char tmp[200]; - - snprintf(tmp, 200, "Unknown (target %s, gameid %s)", iter->_key.c_str(), gameid.c_str()); - description = tmp; + description = Common::String::format("Unknown (target %s, gameid %s)", iter->_key.c_str(), gameid.c_str()); } if (!gameid.empty() && !description.empty()) { @@ -718,6 +715,8 @@ void LauncherDialog::updateListing() { void LauncherDialog::addGame() { int modifiers = g_system->getEventManager()->getModifierState(); + +#ifndef DISABLE_MASS_ADD const bool massAdd = (modifiers & Common::KBD_SHIFT) != 0; if (massAdd) { @@ -746,6 +745,7 @@ void LauncherDialog::addGame() { updateButtons(); return; } +#endif // Allow user to add a new game to the list. // 1) show a dir selection dialog which lets the user pick the directory @@ -838,12 +838,10 @@ Common::String addGameToConf(const GameDescriptor &result) { assert(!domain.empty()); if (ConfMan.hasGameDomain(domain)) { int suffixN = 1; - char suffix[16]; Common::String gameid(domain); while (ConfMan.hasGameDomain(domain)) { - snprintf(suffix, 16, "-%d", suffixN); - domain = gameid + suffix; + domain = gameid + Common::String::format("-%d", suffixN); suffixN++; } } @@ -918,7 +916,7 @@ void LauncherDialog::loadGame(int item) { gameId = _domains[item]; const EnginePlugin *plugin = 0; - + EngineMan.findGame(gameId, &plugin); String target = _domains[item]; diff --git a/gui/massadd.cpp b/gui/massadd.cpp index 7b641d71e5..b0adce3f47 100644 --- a/gui/massadd.cpp +++ b/gui/massadd.cpp @@ -31,7 +31,7 @@ #include "gui/widget.h" #include "gui/widgets/list.h" - +#ifndef DISABLE_MASS_ADD namespace GUI { /* @@ -234,23 +234,23 @@ void MassAddDialog::handleTickle() { // Update the dialog - char buf[256]; + Common::String buf; if (_scanStack.empty()) { // Enable the OK button _okButton->setEnabled(true); - snprintf(buf, sizeof(buf), "%s", _("Scan complete!")); + buf = _("Scan complete!"); _dirProgressText->setLabel(buf); - snprintf(buf, sizeof(buf), _("Discovered %d new games, ignored %d previously added games."), _games.size(), _oldGamesCount); + buf = Common::String::format(_("Discovered %d new games, ignored %d previously added games."), _games.size(), _oldGamesCount); _gameProgressText->setLabel(buf); } else { - snprintf(buf, sizeof(buf), _("Scanned %d directories ..."), _dirsScanned); + buf = Common::String::format(_("Scanned %d directories ..."), _dirsScanned); _dirProgressText->setLabel(buf); - snprintf(buf, sizeof(buf), _("Discovered %d new games, ignored %d previously added games ..."), _games.size(), _oldGamesCount); + buf = Common::String::format(_("Discovered %d new games, ignored %d previously added games ..."), _games.size(), _oldGamesCount); _gameProgressText->setLabel(buf); } @@ -264,3 +264,4 @@ void MassAddDialog::handleTickle() { } // End of namespace GUI +#endif // DISABLE_MASS_ADD diff --git a/gui/options.cpp b/gui/options.cpp index 5cb70bc5e4..b0b9fe6c90 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -138,7 +138,7 @@ void OptionsDialog::init() { _subSpeedDesc = 0; _subSpeedSlider = 0; _subSpeedLabel = 0; - _oldTheme = ConfMan.get("gui_theme"); + _oldTheme = g_gui.theme()->getThemeId(); // Retrieve game GUI options _guioptions = 0; @@ -241,11 +241,8 @@ void OptionsDialog::open() { } // MIDI gain setting - char buf[10]; - _midiGainSlider->setValue(ConfMan.getInt("midi_gain", _domain)); - sprintf(buf, "%.2f", (double)_midiGainSlider->getValue() / 100.0); - _midiGainLabel->setLabel(buf); + _midiGainLabel->setLabel(Common::String::format("%.2f", (double)_midiGainSlider->getValue() / 100.0)); } // MT-32 options @@ -372,7 +369,7 @@ void OptionsDialog::close() { if (gfxError != OSystem::kTransactionSuccess) { // Revert ConfMan to what OSystem is using. - Common::String message = "Failed to apply some of the graphic options changes:"; + Common::String message = _("Failed to apply some of the graphic options changes:"); if (gfxError & OSystem::kTransactionModeSwitchFailed) { const OSystem::GraphicsMode *gm = g_system->getSupportedGraphicsModes(); @@ -383,17 +380,20 @@ void OptionsDialog::close() { } gm++; } - message += "\nthe video mode could not be changed."; + message += "\n"; + message += _("the video mode could not be changed."); } if (gfxError & OSystem::kTransactionAspectRatioFailed) { ConfMan.setBool("aspect_ratio", g_system->getFeatureState(OSystem::kFeatureAspectRatioCorrection), _domain); - message += "\nthe fullscreen setting could not be changed"; + message += "\n"; + message += _("the fullscreen setting could not be changed"); } if (gfxError & OSystem::kTransactionFullscreenFailed) { ConfMan.setBool("fullscreen", g_system->getFeatureState(OSystem::kFeatureFullscreenMode), _domain); - message += "\nthe aspect ratio setting could not be changed"; + message += "\n"; + message += _("the aspect ratio setting could not be changed"); } // And display the error @@ -530,12 +530,9 @@ void OptionsDialog::close() { } void OptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint32 data) { - char buf[10]; - switch (cmd) { case kMidiGainChanged: - sprintf(buf, "%.2f", (double)_midiGainSlider->getValue() / 100.0); - _midiGainLabel->setLabel(buf); + _midiGainLabel->setLabel(Common::String::format("%.2f", (double)_midiGainSlider->getValue() / 100.0)); _midiGainLabel->draw(); break; case kMusicVolumeChanged: @@ -1295,7 +1292,7 @@ void GlobalOptionsDialog::close() { // only become active *after* the options dialog has closed. g_gui.loadNewTheme(g_gui.theme()->getThemeId(), ThemeEngine::kGfxDisabled, true); #else - MessageDialog error(_("You have to restart ScummVM to take the effect.")); + MessageDialog error(_("You have to restart ScummVM before your changes will take effect.")); error.runModal(); #endif } diff --git a/gui/saveload.cpp b/gui/saveload.cpp index 7c7394a71d..460246e5fc 100644 --- a/gui/saveload.cpp +++ b/gui/saveload.cpp @@ -359,8 +359,19 @@ void SaveLoadChooser::updateSaveList() { } // Fill the rest of the save slots with empty saves + + int maximumSaveSlots = (*_plugin)->getMaximumSaveSlot(); + +#ifdef __DS__ + // Low memory on the DS means too many save slots are impractical, so limit + // the maximum here. + if (maximumSaveSlots > 99) { + maximumSaveSlots = 99; + } +#endif + Common::String emptyDesc; - for (int i = curSlot; i <= (*_plugin)->getMaximumSaveSlot(); i++) { + for (int i = curSlot; i <= maximumSaveSlots; i++) { saveNames.push_back(emptyDesc); SaveStateDescriptor dummySave(i, ""); _saveList.push_back(dummySave); diff --git a/gui/themes/translations.dat b/gui/themes/translations.dat Binary files differindex f025a05337..9e5c0465d9 100644 --- a/gui/themes/translations.dat +++ b/gui/themes/translations.dat diff --git a/gui/widget.cpp b/gui/widget.cpp index 29838961df..8420391a3f 100644 --- a/gui/widget.cpp +++ b/gui/widget.cpp @@ -240,9 +240,7 @@ StaticTextWidget::StaticTextWidget(GuiObject *boss, const Common::String &name, } void StaticTextWidget::setValue(int value) { - char buf[256]; - sprintf(buf, "%d", value); - _label = buf; + _label = Common::String::format("%d", value); } void StaticTextWidget::setLabel(const Common::String &label) { diff --git a/gui/widgets/list.cpp b/gui/widgets/list.cpp index 065b240471..2a0d4afff0 100644 --- a/gui/widgets/list.cpp +++ b/gui/widgets/list.cpp @@ -38,7 +38,7 @@ ListWidget::ListWidget(Dialog *boss, const String &name, const char *tooltip, ui _scrollBar = NULL; _textWidth = NULL; - // This ensures that _entriesPerPage is properly initialised. + // This ensures that _entriesPerPage is properly initialized. reflowLayout(); _scrollBar = new ScrollBarWidget(this, _w - _scrollBarWidth + 1, 0, _scrollBarWidth, _h); @@ -70,7 +70,7 @@ ListWidget::ListWidget(Dialog *boss, int x, int y, int w, int h, const char *too _scrollBar = NULL; _textWidth = NULL; - // This ensures that _entriesPerPage is properly initialised. + // This ensures that _entriesPerPage is properly initialized. reflowLayout(); _scrollBar = new ScrollBarWidget(this, _w - _scrollBarWidth + 1, 0, _scrollBarWidth, _h); @@ -499,9 +499,7 @@ void ListWidget::drawWidget() { // If in numbering mode, we first print a number prefix if (_numberingMode != kListNumberingOff) { - char temp[10]; - sprintf(temp, "%2d. ", (pos + _numberingMode)); - buffer = temp; + buffer = Common::String::format("%2d. ", (pos + _numberingMode)); g_gui.theme()->drawText(Common::Rect(_x, y, _x + r.left + _leftPadding, y + fontHeight - 2), buffer, _state, Graphics::kTextAlignLeft, inverted, _leftPadding, true); pad = 0; @@ -543,9 +541,8 @@ Common::Rect ListWidget::getEditRect() const { r.bottom += offset; if (_numberingMode != kListNumberingOff) { - char temp[10]; // FIXME: Assumes that all digits have the same width. - sprintf(temp, "%2d. ", (_list.size() - 1 + _numberingMode)); + Common::String temp = Common::String::format("%2d. ", (_list.size() - 1 + _numberingMode)); r.left += g_gui.getStringWidth(temp) + _leftPadding; } diff --git a/po/POTFILES b/po/POTFILES index e96f15fb1b..323e50e8e4 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -19,7 +19,9 @@ base/main.cpp common/error.cpp common/util.cpp +engines/advancedDetector.cpp engines/dialogs.cpp +engines/engine.cpp engines/scumm/dialogs.cpp engines/scumm/help.cpp engines/scumm/scumm.cpp @@ -29,8 +31,24 @@ engines/mohawk/riven.cpp engines/cruise/menu.cpp engines/sci/engine/kfile.cpp engines/agos/saveload.cpp +engines/agos/animation.cpp +engines/gob/inter_playtoons.cpp +engines/gob/inter_v2.cpp +engines/gob/inter_v5.cpp +engines/groovie/script.cpp +engines/kyra/sound_midi.cpp +engines/m4/m4_menus.cpp +engines/sky/compact.cpp +engines/sword1/animation.cpp +engines/sword1/control.cpp +engines/sword1/logic.cpp +engines/sword1/sword1.cpp +engines/sword2/animation.cpp +engines/tinsel/saveload.cpp +engines/parallaction/saveload.cpp audio/fmopl.cpp +audio/mididrv.cpp audio/musicplugin.cpp audio/null.h audio/null.cpp @@ -40,7 +58,6 @@ audio/softsynth/appleiigs.cpp audio/softsynth/sid.cpp audio/softsynth/mt32.cpp audio/softsynth/pcspk.cpp -audio/softsynth/ym2612.cpp backends/keymapper/remap-dialog.cpp backends/midi/windows.cpp @@ -48,6 +65,7 @@ backends/platform/ds/arm9/source/dsoptions.cpp backends/platform/iphone/osys_events.cpp backends/graphics/sdl/sdl-graphics.cpp backends/graphics/opengl/opengl-graphics.cpp +backends/graphics/openglsdl/openglsdl-graphics.cpp backends/platform/symbian/src/SymbianActions.cpp backends/platform/symbian/src/SymbianOS.cpp backends/events/symbiansdl/symbiansdl-events.cpp @@ -56,3 +74,6 @@ backends/platform/wince/CEActionsPocket.cpp backends/platform/wince/CEActionsSmartphone.cpp backends/platform/wince/CELauncherDialog.cpp backends/platform/wince/wince-sdl.cpp +backends/events/default/default-events.cpp +backends/events/gph/gph-events.cpp +backends/events/openpandora/op-events.cpp diff --git a/po/ca_ES.po b/po/ca_ES.po index e625b9bcc4..ce4c1db140 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.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: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2010-09-21 23:12+0100\n" "Last-Translator: Jordi Vilalta Prat <jvprat@jvprat.com>\n" "Language-Team: Catalan <scummvm-devel@lists.sf.net>\n" @@ -16,108 +16,118 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Language: Catalan\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(compilat el %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "Característiques compilades:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Motors disponibles:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "Amunt" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Torna al nivell de directoris anterior" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "Amunt" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Cancel·la" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Escull" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Tanca" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Clic del ratolí" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Mostra el teclat" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Remapeja les tecles" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Sel·leccioneu una acció a mapejar" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Mapeja" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "D'acord" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Seleccioneu una acció i cliqueu 'Mapeja'" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Tecla associada : %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Tecla associada : cap" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Seleccioneu una acció" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Premeu la tecla a associar" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Joc" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "Identificador:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -125,29 +135,29 @@ msgstr "" "Identificador de joc curt utilitzat per referir-se a les partides i per " "executar el joc des de la línia de comandes" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Nom:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "Títol complet del joc" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Nom:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Idioma:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" @@ -155,285 +165,285 @@ msgstr "" "Idioma del joc. Això no convertirà la vostra versió Espanyola del joc a " "Anglès" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<per defecte>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Plataforma:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "Plataforma per la que el joc es va dissenyar originalment" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Platafor.:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Gràfics" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "GFX" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "Fer canvis sobre les opcions globals de gràfics" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "Canviar les opcions de gràfics" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "Àudio" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "Fer canvis sobre les opcions globals d'àudio" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "Canviar les opcions d'àudio" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "Volum" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "Volum" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "Fer canvis sobre les opcions globals de volum" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "Canviar les opcions de volum" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "Fer canvis sobre les opcions globals de MIDI" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Canviar les opcions de MIDI" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "Fer canvis sobre les opcions globals de MT-32" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Canviar les opcions de MT-32" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "Camins" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "Camins" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "Camí del joc:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "Camí joc:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "Camí extra:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "Especifica el camí de dades addicionals utilitzades pel joc" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "Camí extra:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "Camí de partides:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "Especifica on es desaran les partides" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "Partides:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "Cap" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Per defecte" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "Seleccioneu el fitxer SoundFont" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Seleccioneu el directori amb les dades del joc" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "Seleccioneu el directori addicional del joc" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Seleccioneu el directori de les partides desades" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "" "Aquest identificador de joc ja està en ús. Si us plau, trieu-ne un altre." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~T~anca" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "Surt de ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "~Q~uant a..." -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "Quant a ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~O~pcions..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Canvia les opcions globals de ScummVM" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "~I~nicia" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "Iniciant el joc seleccionat" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~C~arrega..." -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Carrega una partida pel joc seleccionat" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "~A~fegeix Joc..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "Mantingueu premut Shift per a l'Addició Massiva" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "~E~dita Joc..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Canvia les opcions del joc" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "~S~uprimeix Joc" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "" "Elimina un joc de la llista. Els fitxers de dades del joc es mantenen " "intactes" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~A~fegeix Joc..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~dita Joc..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~S~uprimeix" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "Cerca a la llista de jocs" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Cerca:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Neteja el valor" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Carrega partida:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Carrega" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -441,205 +451,222 @@ msgstr "" "Esteu segur que voleu executar el detector massiu de jocs? Això pot afegir " "una gran quantitat de jocs." -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Sí" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "No" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM no ha pogut obrir el directori especificat!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM no ha pogut trobar cap joc al directori especificat!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Seleccioneu el joc:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "Realment voleu suprimir la configuració d'aquest joc?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "Aquest joc no suporta la càrrega de partides des del llançador." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM no ha pogut trobar cap motor capaç d'executar el joc seleccionat!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Afegeix Jocs" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Addició Massiva..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Afegeix Joc..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Afegeix Joc..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... progrés ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "S'ha acabat la cerca!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "S'han trobat %d jocs nous." +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "S'han cercat %d directoris ..." -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "S'han trobat %d jocs nous ..." -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Mai" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "cada 5 minuts" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "cada 10 minuts" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "cada 15 minuts" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "cada 30 minuts" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "Cap" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "Mode gràfic:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Mode de pintat:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "Modes de dispersió especials suportats per alguns jocs" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Mode pantalla completa" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Correcció de la relació d'aspecte" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Corregeix la relació d'aspecte per jocs de 320x200" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Disp. preferit:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "Disp. de música:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 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:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 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:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Disp. preferit:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "Disp. de música:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "Emulador AdLib:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib s'utilitza per la música de molts jocs" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "Freq. sortida:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -647,63 +674,63 @@ 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:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "Dispositiu GM:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 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:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "Fitxer SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "Algunes targes de so, Fluidsynth i Timidity suporten SoundFont" -#: gui/options.cpp:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "Mode combinat AdLib/MIDI" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "Utilitza MIDI i la generació de so AdLib alhora" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "Guany MIDI:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "Disposit. MT-32:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 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:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Roland MT-32 real (desactiva l'emulació GM)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -711,197 +738,198 @@ msgstr "" "Marqueu si voleu utilitzar el vostre dispositiu hardware real de so " "compatible amb Roland connectat al vostre ordinador" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Roland MT-32 real (sense emulació GM)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "Activa el Mode Roland GS" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" "Desactiva la conversió General MIDI pels jocs que tenen banda sonora per a " "Roland MT-32" -#: gui/options.cpp:807 +#: gui/options.cpp:861 #, fuzzy msgid "Don't use Roland MT-32 music" msgstr "Roland MT-32 real (sense emulació GM)" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Text i Veus:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Veus" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Subtítols" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Ambdós" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Velocitat de subt.:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Text i Veus:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Veus" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "Subt" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "Ambdós" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Mostra els subtítols i reprodueix la veu" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Veloc. de subt.:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "Volum de música:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "Volum de música:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Silenciar tot" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "Volum d'efectes:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "Volum dels sons d'efectes especials" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "Volum d'efectes:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "Volum de veus:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "Volum de veus:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "Camí dels temes:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "Camí temes:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 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:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "Camí dels connectors:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "Camí de connectors:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Misc" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Misc" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "Pintat GUI:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Desat automàtic:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Auto-desat:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Tecles" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "Idioma GUI:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Idioma de la interfície d'usuari de ScummVM" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +msgid "You have to restart ScummVM before your changes will take effect." msgstr "Heu de reiniciar ScummVM perquè tots els canvis tingui efecte." -#: gui/options.cpp:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Seleccioneu el directori de les partides desades" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 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:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "Seleccioneu el directori dels temes" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Seleccioneu el directori dels fitxers extra" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "Seleccioneu el directori dels connectors" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -909,806 +937,881 @@ msgstr "" "El tema que heu seleccionat no suporta l'idioma actual. Si voleu utilitzar " "aquest tema primer haureu de canviar a un altre idioma." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "No hi ha data desada" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "No hi ha hora desada" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "No hi ha temps de joc desat" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Suprimeix" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "Realment voleu suprimir aquesta partida?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Data: " -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Hora: " -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Temps de joc: " -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Partida sense títol" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Seleccioneu un Tema" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "GFX desactivats" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX desactivats" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Pintat estàndard (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Estàndard (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Pintat amb antialias (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "Amb antialias (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "El motor no suporta el nivell de depuració '%s'" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Menú" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Salta" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pausa" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Salta la línia" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "Error al executar el joc:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "No s'ha pogut trobar cap motor capaç d'executar el joc seleccionat" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "" -#: common/error.cpp:44 +#: common/error.cpp:40 #, fuzzy msgid "Game data not found" msgstr "No s'han trobat les dades del joc" -#: common/error.cpp:46 +#: common/error.cpp:42 #, fuzzy msgid "Game id not supported" msgstr "Identificador de joc no suportat" -#: common/error.cpp:48 +#: common/error.cpp:44 #, fuzzy msgid "Unsupported color mode" msgstr "Mode de color no suportat" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "S'ha denegat el permís de lectura" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "S'ha denegat el permís d'escriptura" -#: common/error.cpp:56 +#: common/error.cpp:52 #, fuzzy msgid "Path does not exist" msgstr "El camí no existeix" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "El camí no és un directori" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "El camí no és un fitxer" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "No s'ha pogut crear el fitxer" -#: common/error.cpp:65 +#: common/error.cpp:61 #, fuzzy msgid "Reading data failed" msgstr "Ha fallat la lectura" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Ha fallat l'escriptura de dades" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "" -#: common/error.cpp:72 +#: common/error.cpp:68 #, fuzzy msgid "Engine plugin does not support save states" msgstr "El motor no suporta el nivell de depuració '%s'" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "" - -#: common/error.cpp:79 +#: common/error.cpp:72 #, fuzzy msgid "Unknown error" msgstr "Error desconegut" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules Verd" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules Àmbar" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules Verd" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules Àmbar" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "~C~ontinua" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "C~a~rrega" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~D~esa" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~O~pcions" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~A~juda" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "~Q~uant a" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "~R~etorna al Llançador" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~R~etorna al Llançador" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Desa la partida:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Desa" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~D~'acord" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "~C~ancel·la" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~T~ecles" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "Mode de vídeo actual:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "Correcció de la relació d'aspecte" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~A~nterior" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~S~egüent" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~T~anca" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 #, fuzzy msgid "Skip line of text" msgstr "Salta la línia" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 #, fuzzy msgid "Skip cutscene" msgstr "Salta la línia" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 #, fuzzy msgid "Space" msgstr "Veus" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 #, fuzzy msgid "Pause game" msgstr "Desa la partida:" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 #, fuzzy msgid "Load game state 1-10" msgstr "Carrega partida:" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 #, fuzzy msgid "Save game state 1-10" msgstr "Desa la partida:" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Surt" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 #, fuzzy msgid "Music volume up / down" msgstr "Volum de música:" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 #, fuzzy msgid "Show / Hide console" msgstr "Mostra/Oculta el cursor" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 #, fuzzy msgid "Toggle aspect-ratio correction" msgstr "Correcció de la relació d'aspecte" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr "" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr "" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +msgid " or incorrect game behavior." msgstr "" -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 #, fuzzy msgid "Main game controls:" msgstr "Canvia les opcions del joc" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 #, fuzzy msgid "Push" msgstr "Pausa" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 #, fuzzy msgid "Go to" msgstr "Amunt" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 #, fuzzy msgid "Turn off" msgstr "So engegat/parat" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 #, fuzzy msgid "Switch" msgstr "Veus" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 #, fuzzy msgid "Travel" msgstr "Desa" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 #, fuzzy msgid "KeyUp" msgstr "Tecles" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 #, fuzzy msgid "KeyDown" msgstr "Avall" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 #, fuzzy msgid "Tongue" msgstr "Zona" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 #, fuzzy msgid "Other game controls:" msgstr "Canvia les opcions del joc" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 #, fuzzy msgid "Switching characters:" msgstr "Commuta el personatge" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "" -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "" -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "" -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1719,7 +1822,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1730,7 +1833,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1741,273 +1844,501 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " "directory inside the Tentacle game directory." msgstr "" -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "Mode ~Z~ip activat" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "~T~ransicions activades" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "~E~fecte de l'aigua activat" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Desa la partida:" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Restaura" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"No s'ha pogut carregar l'estat del joc del fitxer:\n" +"\n" +"%s" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"No s'ha pogut desar l'estat del joc al fitxer:\n" +"\n" +"%s" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"No s'ha pogut desar l'estat del joc al fitxer:\n" +"\n" +"%s" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"No s'ha pogut desar l'estat del joc al fitxer:\n" +"\n" +"%s" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "Desa la partida:" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "Carrega partida:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "Desa la partida:" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "Emulador OPL de MAME" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "Emulador OPL DOSBox" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "Sense música" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Emulador d'àudio Amiga" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "Emulador d'AdLib" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Emulador d'Apple II GS (NO IMPLEMENTAT)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "Emulador d'àudio C64" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "Iniciant l'Emulador de MT-32" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "Emulador de MT-32" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "Emulador Altaveu PC" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "Emulador d'IBM PCjr" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "Emulador de FM Towns" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Mapa de teclat:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr " (Actiu)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr " (Global)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr " (Joc)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "MIDI de Windows" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "Menú Principal de ScummVM" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "Mode ~e~squerrà" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "Controls de lluita de l'~I~ndy" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Mostra el cursor del ratolí" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "Enganxa a les vores" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Desplaçament X del toc" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Desplaçament Y del toc" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "Utilitza el control del cursor a l'estil del trackpad dels portàtils" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "Toc per a clic esquerre, doble toc per a clic dret" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Sensibilitat" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "Escalat inicial de la pantalla superior:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Escalat de la pantalla principal:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "Escalat per hardware (ràpid, però de baixa qualitat)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "Escalat per software (bona qualitat, però més lent)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Sense escalar (haureu de desplaçar-vos a esquerra i dreta)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Lluminositat:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "Alta qualitat d'àudio (més lent) (reiniciar)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Desactiva l'apagat automàtic" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "Mode Touchpad activat." + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "Mode Touchpad desactivat." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "Mode Touchpad activat." -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "Mode Touchpad desactivat." -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Normal (sense escalar)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal (no escalat)" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "Correcció de la relació d'aspecte" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "Correcció de la relació d'aspecte" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +msgid "Active graphics filter:" +msgstr "" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "Mode de pintat:" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "Mode de vídeo actual:" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Amunt" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "Avall" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "Esquerra" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "Dreta" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Clic esquerre" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Clic dret" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Zona" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "Funció Múltiple" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "Commuta el personatge" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "Salta el text" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Mode ràpid" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Depurador" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Menú global" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "Teclat virtual" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Mapejador de tecles" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "Vols sortir?" @@ -2128,129 +2459,187 @@ msgid "Network down" msgstr "Xarxa inactiva" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "Iniciant la xarxa" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +#, fuzzy +msgid "Timeout while initializing network" msgstr "S'ha excedit el temps d'iniciació de la xarxa" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "Xarxa no iniciada (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Oculta la barra d'eines" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Mostra el teclat" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "So engegat/parat" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Clic dret" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Mostra/Oculta el cursor" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Vista lliure" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Amplia" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Redueix" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Mapeja tecles" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "Cursor Amunt" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "Cursor Avall" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "Cursor Esquerra" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "Cursor Dreta" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "Voleu carregar o desar el joc?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr " Esteu segur de voler sortir? " -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Teclat" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Rotar" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "Utilitzant el controlador SDL " -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Pantalla " -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "Voleu fer una cerca automàtica?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "Realment voleu suprimir aquesta partida?" + +#: backends/events/default/default-events.cpp:222 +msgid "Launcher" +msgstr "" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "Vols sortir?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "Volum" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "Volum" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "" + +#~ msgid "Discovered %d new games." +#~ msgstr "S'han trobat %d jocs nous." + +#~ msgid "FM Towns Emulator" +#~ msgstr "Emulador de FM Towns" + #~ msgid "Invalid Path" #~ msgstr "Camí incorrecte" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index 69592b2c9b..6a570b81c2 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.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: 2011-04-22 19:33+0100\n" -"PO-Revision-Date: 2011-04-23 10:55+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" +"PO-Revision-Date: 2011-06-14 15:04+0100\n" "Last-Translator: Zbynìk Schwarz <zbynek.schwarz@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -20,108 +20,118 @@ msgstr "" "X-Poedit-Country: CZECH REPUBLIC\n" "X-Poedit-SourceCharset: iso-8859-1\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(sestaveno na %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "Zakompilované Funkce:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Dostupná jádra:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "Jít nahoru" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Jít na pøedchozí úroveò adresáøe" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "Jít nahoru" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Zru¹it" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Zvolit" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Zavøít" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Kliknutí my¹í" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Zobrazit klávesnici" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Pøemapovat klávesy" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Zvolte èinnost k mapování" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Mapovat" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Zvolte èinnost a kliknìte 'Mapovat'" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Pøiøazená klávesa: %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Pøiøazená klávesa: ¾ádná" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Prosím vyberte èinnost" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Zmáèknìte klávesu pro pøiøazení" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Hra" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -129,310 +139,310 @@ msgstr "" "Krátký identifikátor her, pou¾ívaný jako odkaz k ulo¾eným hrám a spu¹tìní " "hry z pøíkazového øádku" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Jméno" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "Úplný název hry" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Jméno:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Jazyk:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" msgstr "Jazyk hry. Toto z Va¹í ©panìlské verze neudìlá Anglickou" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<výchozí>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Platforma:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "Platforma, pro kterou byla hra pùvodnì vytvoøena" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Platforma:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Obraz" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "GFX" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "Potlaèit globální nastavení obrazu" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "Potlaèit globální nastavení obrazu" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "Zvuk" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "Potlaèit globální nastavení zvuku" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "Potlaèit globální nastavení zvuku" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "Hlasitost" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "Hlasitost" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "Potlaèit globální nastavení hlasitosti" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "Potlaèit globální nastavení hlasitosti" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "Potlaèit globální nastavení MIDI" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Potlaèit globální nastavení MIDI" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "Potlaèit globální nastavení MT-32" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Potlaèit globální nastavení MT-32" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "Cesty" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "Cesty" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "Cesta Hry:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "Cesta Hry:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "Dodateèná Cesta:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "Stanoví cestu pro dodateèná data pou¾itá ve høe" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "Dodateèná Cesta:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "Cesta pro ulo¾ení:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "Stanovuje, kam jsou umístìny Va¹e ulo¾ené hry" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "Cesta pro ulo¾ení:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "®ádné" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Výchozí" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "Vybrat SoundFont" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Vyberte adresáø s daty hry" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "Vyberte dodateèný adresáø hry" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Vyberte adresáø pro ulo¾ené hry" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "Toto ID hry je u¾ zabrané. Vyberte si, prosím, jiné." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~U~konèit" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "Ukonèit ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "~O~ Programu..." -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "O ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~V~olby..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Zmìnit globální volby ScummVM" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "~S~pustit" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "Spustit zvolenou hru" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~N~ahrát..." -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Nahrát ulo¾enou pozici pro zvolenou hru" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "~P~øidat hru..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "Podr¾te Shift pro Hromadné Pøidání" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "~U~pravit Hru..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Zmìnit volby hry" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "~O~dstranit Hru" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "Odstranit hru ze seznamu. Herní data zùstanou zachována" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~P~øidat hru..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~U~pravit hru..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~O~dstranit hru" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "Hledat v seznamu her" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Hledat:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Vyèistit hodnotu" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Nahrát hru:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Nahrát" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -440,204 +450,221 @@ msgstr "" "Opravdu chcete spustit hromadnou detekci her? Toto by mohlo potenciálnì " "pøidat velkou spoustu her. " -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Ano" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "Ne" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM nemohl tento adresáø otevøít!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM nemohl v zadaném adresáøi najít ¾ádnou hru!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Vybrat hru:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "Opravdu chcete odstranit nastavení této hry?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "Tato hra nepodporuje spou¹tìní her ze spou¹tìèe" -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM nemohl najít ¾ádné jádro schopné vybranou hru spustit!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Hromadné Pøidání..." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Hromadné Pøidání..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Pøidat Hru..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Pøidat Hru..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... prùbìh ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "Hledání dokonèeno!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "Objeveno %d nových her." +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/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "Prohledáno %d adresáøù..." -#: gui/massadd.cpp:254 +#: gui/massadd.cpp:253 #, c-format -msgid "Discovered %d new games ..." -msgstr "Objeveno %d nových her..." +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/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Nikdy" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "Ka¾dých 5 min" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "Ka¾dých 10 min" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "Ka¾dých 15 min" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "Ka¾dých 30 min" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "®ádné" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "Nelze pou¾ít nìkteré zmìny mo¾ností grafiky:" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "re¾im obrazu nemohl být zmìnìn." + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "nastavení celé obrazovky nemohlo být zmìnìno" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "nastavení pomìru stran nemohlo být zmìnìno" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "Re¾im obrazu:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Re¾im vykreslení:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "Speciální re¾imy chvìní podporované nìkterými hrami" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Re¾im celé obrazovky" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Korekce pomìru stran" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Korigovat pomìr stran pro hry 320x200" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "Nerozkládání EGA" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "Povolit nerozkládání v EGA hrách, které to podporují" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Prioritní Zaøízení:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "Hudební zaøízení" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 msgid "Specifies preferred sound device or sound card emulator" msgstr "Stanoví prioritní zvukové zaøízení nebo emulátor zvukové karty" -#: gui/options.cpp:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 msgid "Specifies output sound device or sound card emulator" msgstr "Stanoví výstupní zvukové zaøízení nebo emulátor zvukové karty" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Prioritní Zaø.:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "Hudební zaøízení" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "AdLib emulátor" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib se pou¾ívá pro hudbu v mnoha hrách" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "Výstup. frekvence:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -645,62 +672,62 @@ msgstr "" "Vy¹¹í hodnota zpùsobí lep¹í kvalitu zvuku, ale nemusí být podporována Va¹i " "zvukovou kartou" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "GM Zaøízení:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "Specifies default sound device for General MIDI output" msgstr "Stanoví výchozí zvukové zaøízení pro výstup General MIDI" -#: gui/options.cpp:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "Nepou¾ívat hudbu General MIDI" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "Pou¾ít první dostupné zaøízení" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 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:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "Smí¹ený re¾im AdLib/MIDI" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "Pou¾ít obì zvukové generace MIDI a AdLib" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "Zesílení MIDI:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "Zaøízení MT-32:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 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:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Opravdový Roland MT-32 (vypne GM emulaci)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -708,190 +735,190 @@ 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:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Opravdový Roland MT-32 (¾ádná GM emulace)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "Zapnout re¾im Roland GS" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "Vypne mapování General MIDI pro hry s Roland MT-32 zvukovým doprovodem" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "Nepou¾ívat hudbu Roland MT-32" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Text a Øeè" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Øeè" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Titulky" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Oba" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Rychlost titulkù:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Text a Øeè:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Øeè" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "Titl" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "Oba" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Zobrazit titulky a pøehrávat øeè" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Rychlost titulkù" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "Hlasitost hudby" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "Hlasitost hudby" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Ztlumit V¹e" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "Hlasitost zvukù" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "Hlasitost speciálních zvukových efektù" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "Hlasitost zvukù" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "Hlasitost øeèi" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "Hlasitost øeèi" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "Cesta ke Vzhledu:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "Cesta ke Vzhledu:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 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:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "Cesta k Pluginùm:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "Cesta k Pluginùm:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Rùzné" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Rùzné" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Vzhled:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "GUI Vykreslovaè:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Autoukládání:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Autoukládání:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Klávesy" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "Jazyk GUI" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Jazyk GUI ScummVM" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." -msgstr "Pro pou¾ití tìchto nastavení musíte restartovat ScummVM" +#: gui/options.cpp:1295 +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:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Vybrat adresáø pro ulo¾ené hry" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 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:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "Vyberte adresáø pro vhledy GUI" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Vyberte adresáø pro dodateèné soubory" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "Vyberte adresáø pro zásuvné moduly" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -899,779 +926,869 @@ 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." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "Neulo¾ena ¾ádná data" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "®ádný ulo¾ený èas" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "®ádná ulo¾ená doba hraní" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Smazat" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "Opravdu chcete tuto ulo¾enou hru vymazat" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Datum:" -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Èas:" -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Doba hraní:" -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Bezejmenný ulo¾ený stav" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Vyberte Vzhled" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "GFX zakázáno" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX zakázáno" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Standardní Vykreslovaè (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Standardní (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Vykreslovaè s vyhlazenými hranami (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "S vyhlazenými hranami (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Jádro nepodporuje úroveò ladìní '%s'" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Menu" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Pøeskoèit" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pauza" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Pøeskoèit øádek" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "Chyba pøi spu¹tìní hry:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "Nelze nalézt ¾ádné jádro schopné vybranou hru spustit" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "®ádná chyba" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "Data hry nenalezena" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "Id hry není podporováno" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "Nepodporovaný barevný re¾im" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "Oprávnìní ke ètení zamítnuto" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "Oprávnìní k zápisu zamítnuto" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "Cesta neexistuje" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "Cesta není adresáø" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "Cesta není soubor" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "Nelze vytvoøit soubor" -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "Ètení dat selhalo" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Zápis dat selhal" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "Nelze nalézt vhodný zás. modul jádra" -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "Zás. modul jádra nepodporuje ulo¾ené stavy" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "Argument pøíkazové øádky nebyl zpracován" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "Neznámá chyba" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules Zelená" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules Jantarová" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules Zelená" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules Jantarová" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "Hra v '%s' se zdá být neznámá." + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "Prosím nahlaste následující data týmu ScummVM spolu se jménem" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "hry, kterou jste se pokusili pøidat a její verzi/jazyk/atd.:" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" +"Bylo zji¹tìno, ¾e Va¹e verze hry pou¾ívá jméno souboru shodující se s " +"variantou %s." + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "Pokud je toto pùvodní a nezmìnìná verze, ohlaste prosím jakékoli" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "pøede¹le vypsané informace od ScummVM zpátky týmu." + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "~P~okraèovat" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~N~ahrát" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~U~lo¾it" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~V~olby" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~N~ápovìda" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "~O~ programu" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "~N~ávrat do Spou¹tìèe" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~N~ávrat do Spou¹tìèe" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Ulo¾it hru:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Ulo¾it" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" +"Je nám líto, ale toto jádro v souèasnosti nepodporuje herní nápovìdu. Prosím " +"prohlédnìte si README pro základní informace a pro instrukce jak získat " +"dal¹í pomoc." + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "~Z~ru¹it" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~K~lávesy" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "Nelze zavést barevný formát." + +#: engines/engine.cpp:228 +msgid "Could not switch to video mode: '" +msgstr "Nelze pøepnout na re¾im obrazu: '" + +#: engines/engine.cpp:237 +msgid "Could not apply aspect ratio setting." +msgstr "Nelze pou¾ít nastavení pomìru stran." + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "Nelze pou¾ít nastavení celé obrazovky." + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" +"Vypadá to, ¾e tuto hru hrajete pøímo z\n" +" CD. Je známo, ¾e toto zpùsobuje problémy\n" +" a je tedy doporuèeno, a» místo toho zkopírujete\n" +"datové soubory na Vá¹ pevný disk.\n" +"Pro podrobnosti si pøeètìte README." + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" +"Tato hra má na svém disku zvukové stopy. Tyto\n" +"stopy musí být z disku zkopírovány pou¾itím\n" +"vhodného nástroje pro extrakci zvuku z CD,\n" +"abyste mohli poslouchat hudbu ve høe.\n" +"Pro podrobnosti si pøeètìte README." + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~P~øedchozí" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~D~al¹í" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~Z~avøít" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "Bì¾né klávesové pøíkazy" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "Dialog Nahrát / Ulo¾it" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "Pøeskoèit øádek textu" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Mezerník" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "Pøeskoèit video" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Mezerník" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "Pozastavit hru" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "Nahrát stav hry 1-10" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "Ulo¾it stav hry 1-10" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Ukonèit" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Enter" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "Zapnout celou obrazovku" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "Hlasitost hudby nahoru / dolù" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "Zvý¹it / Sní¾it rychlost textu" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "Napodobit levé tlaèítko my¹i" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "Napodobit pravé tlaèítko my¹i" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "Speciální klávesové pøíkazy" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "Ukázat / Skrýt konzoli" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "Spustit ladící program" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "Zobrazit spotøebu pamìti" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "Spustit v rychlém re¾imu (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "Spustit ve velmi rychlém re¾imu (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "Povolit zachycování my¹i" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "Pøepínat mezi grafickými filtry" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "Zvìt¹it / Zmen¹it faktor zmìny velikosti" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "Povolit korekci pomìru stran" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "Upozoròujeme, ¾e pou¾ívání ctrl-f a" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " ctrl-g není doporuèeno" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr "jeliko¾ mù¾ou zpùsobit pád" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." -msgstr "nebo nesprávné chování hry" +#: engines/scumm/help.cpp:110 +msgid " or incorrect game behavior." +msgstr " nebo nesprávné chování hry." -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "Pletení náèrtkù na klávesnici:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "Hlavní ovládací prvky:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "Tlaèit" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "Táhnout" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "Dát" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "Otevøít" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "Jít do" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "Vzít" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "Pou¾ít" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "Pøeèíst" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "Nové dítì" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "Zapnout" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "Vypnout" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "Pøejít na" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "Sebrat" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "Co je" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "Odemknout" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "Obléct" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "Svléct" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "Spravit" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "Pøepnout" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "Dívat se" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "Mluvit" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "Cestovat" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "Henrymu / Indymu" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "zahrát c moll na pøeslici" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "zahrát D na pøeslici" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "zahrát E na pøeslici" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "zahrát F na pøeslici" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "zahrát G na pøeslici" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "zahrát A na pøeslici" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "zahrát B na pøeslici" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "zahrát C dur na pøeslici" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "tlaèIt" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "táhnout (©kubnout)" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "Mluvit s" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "Dívat se na" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "zapnouT" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "vypnoUt" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "KlávesaNahoru" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "Zvýraznit pøedchozí dialog" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "KlávesaDolù" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "Zvýraznit následující dialog" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "Jít" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "Inventáø" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "Objekt" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "Èernobílé / Barva" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "Oèi" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Jazyk" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "Udeøit" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "Kopnout" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "Prohlédnout" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "Obyèejný kurzor" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Komunikace" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "Ulo¾it / Nahrát / Volby" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "Dal¹í ovládací prvky hry" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "Inventáø:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "Posunout seznam nahoru" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "Posunout seznam dolu" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "Polo¾ka vlevo nahoøe" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "Polo¾ka vlevo dole" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "Polo¾ka vpravo nahoøe" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "Polo¾ka vpravo dole" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "Polo¾ka vlevo uprostøed" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "Polo¾ka vpravo uprostøed" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "Mìnìní postav:" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "Druhé dítì" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "Tøetí dítì" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "Ovládání boje (num. kláv.)" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "Ustoupit" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "Bránit nahoøe" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "Bránit uprostøed" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "Bránit dole" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "Udeøit nahoru" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "Udeøit doprostøed" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "Udeøit dolù" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Tyto jsou pro Indyho nalevo." -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "Kdy¾ je Indy napravo," -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "71 4 a 1 jsou zamìnìny s" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "9, 6 a 3, v tomto poøadí." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "Kontrola dvojplo¹níku (numerická klávesnice)" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "Letìt doprava nahoru" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "Letìt doleva" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "Letìt doleva dolù" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "Letìt nahoru" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "Letìt rovnì" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "Letìt dolù" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "Letìt doprava nahoru" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "Letìt doprava" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "Letìt doprava dolù" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" +"Pøirozená podpora MIDI vy¾aduje Aktualizaci Roland od LucasArts,\n" +"ale %s chybí. Místo toho je pou¾it AdLib." + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1682,7 +1799,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1693,18 +1810,18 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" "\n" "%s" msgstr "" -"Stav hry úspe¹nì ulo¾en do:\n" +"Stav hry úspì¹nì ulo¾en do:\n" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " @@ -1714,268 +1831,508 @@ msgstr "" "Abyste toto mohli hrát, pøejdìte do 'Pøidat Hru' v poèáteèním menu ScummVM a " "vyberte adresáø 'Maniac' uvnitø herního adresáøe Tentacle." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "~R~e¾im Svi¹tìní Aktivován" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "~P~øechody zapnuty" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "~Z~ahodit Stránku" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "~Z~obrazit Mapu" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "~E~fekt Vody Zapnut" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Obnovit hru" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Obnovit" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "Soubor videa '%s' nenalezen'" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +msgid "Failed to load game state from file." +msgstr "Nelze naèíst stav hry ze souboru." + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +msgid "Failed to save game state to file." +msgstr "Nelze ulo¾it stav hry do souboru." + +#: engines/gob/inter_v5.cpp:107 +msgid "Failed to delete file." +msgstr "Nelze smazat soubor." + +#: engines/groovie/script.cpp:417 +msgid "Failed to save game" +msgstr "Nelze ulo¾it hru." + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" +"Zdá se, ¾e pou¾íváte zaøízení General MIDI,\n" +"ale Va¹e hra podporuje pouze Roland MT32 MIDI.\n" +"Sna¾íme se mapovat nástroje Roland MT32 na\n" +"ty od General MIDI. Po tomto se mù¾e stát,\n" +"¾e pár stop nebude správnì pøehráno." + +#: engines/m4/m4_menus.cpp:138 +msgid "Save game failed!" +msgstr "Ukládání hry selhalo!" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" +"Nelze nalézt soubor \"sky.cpt\"!\n" +"Stáhnìte si ho, prosím z www.scummvm.org" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" +"Soubor \"sky.cpt\" má nesprávnou velikost.\n" +"Stáhnìte si ho, prosím, (znovu) z www.scummvm.org" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "Videa DXA nalezena, ale ScummVM byl sestaven bez podpory zlib" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "Videa MPGE2 ji¾ nejsou podporována" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "Video '%s' nenalezeno" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" +"ScummVM zjistil, ¾e máte staré ulo¾ené pozice pro Broken Sword 1, které by " +"mìly být pøevedeny.\n" +"Starý formát ulo¾ených her ji¾ není podporován, tak¾e pokud je nepøevedete, " +"nebudete moci Va¹e hry naèíst.\n" +"\n" +"Stisknìte OK, abyste je pøevedli teï, jinak budete po¾ádáni znovu, pøi " +"spu¹tìní této hry.\n" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" +"Nová cílová ulo¾ená hra ji¾ existuje!\n" +"Chtìli byste ponechat starou ulo¾enou hru (%s), nebo novou (%s)?\n" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "Ponechat starou" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "Ponechat novou" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "Toto je konec Dema Broken Sword 1" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" +"Nelze ulo¾it hru do pozice %i\n" +"\n" + +#: engines/parallaction/saveload.cpp:211 +msgid "Loading game..." +msgstr "Nahrávání hry..." + +#: engines/parallaction/saveload.cpp:226 +msgid "Saving game..." +msgstr "Ukládání hry..." + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" +"ScummVM zjistil, ¾e máte staré ulo¾ené pozice pro Nippon Safes, které by " +"mìly být pøejmenovány.\n" +"Staré názvy ji¾ nejsou podporovány, tak¾e pokud je nepøevedete, nebudete " +"moci Va¹e hry naèíst.\n" +"\n" +"Stisknìte OK, abyste je pøevedli teï, jinak budete po¾ádáni pøí¹tì.\n" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "ScummVM úspì¹nì pøevedl v¹echny Va¹e ulo¾ené pozice. " + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" +"ScummVM vytiskl nìkterá varování ve Va¹em oknì konzole a nemù¾e zaruèit, ¾e " +"v¹echny Va¹e soubory byly pøevedeny.\n" +"\n" +"Prosím nahlaste to týmu" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "MAME OPL Emulátor" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "DOSBox OPL Emulátor" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" +"Zvolené zaøízení '%s' nebylo nalezeno (napø. mù¾e být vypnuto nebo " +"odpojeno). Pokus o navrácení na nejbli¾¹í dostupné zaøízení..." + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" +"Zvolené zaøízení '%s' nelze pou¾ít.. Podívejte se na záznam pro více " +"informací. Pokus o navrácení na nejbli¾¹í dostupné zaøízení..." + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" +"Upøednostòované zaøízení '%s' nebylo nalezeno (napø. mù¾e být vypnuto nebo " +"odpojeno). Pokus o navrácení na nejbli¾¹í dostupné zaøízení..." + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" +"Upøednostòované zaøízení '%s' nelze pou¾ít. Podívejte se na záznam pro více " +"informací. Pokus o navrácení na nejbli¾¹í dostupné zaøízení..." + +#: audio/null.h:43 msgid "No music" msgstr "Bez hudby" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Emulátor zvuku Amiga" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "AdLib Emulátor" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Apple II GS Emulátor (NENÍ ZAVEDEN)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "Emulátor zvuku C64" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" -msgstr "Spou¹tím MT-32 Emulátor" +#: audio/softsynth/mt32.cpp:329 +msgid "Initializing MT-32 Emulator" +msgstr "Zavádím MT-32 Emulátor" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "MT-32 Emulátor" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "PC Speaker Emulátor" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "IBM PCjr Emulátor" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "FM Towns Emulátor" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Mapa Kláves:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr "(Aktivní)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr "(Globální)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr "(Hra)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "Windows MIDI" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "Hlavní Menu ScummVM" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "~R~e¾im pro leváky" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "~O~vládání Indyho boje" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Zobrazit kurzor my¹i" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "Pøichytit k okrajùm" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Dotykové vyrovnáni na ose X" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Dotykové vyrovnáni na ose Y" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "Pou¾ít styl kontroly kurzoru jako u ovládací podu¹ky laptopu" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "«uknìte pro levé kliknutí, dvakrát pro pravé kliknutí" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Citlivost" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "Poèáteèní zmìna velikosti horní obrazovky:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Zmìna velikosti hlavní obrazovky:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "Hardwarová zmìna velikosti (rychlé, ale nízká kvalita)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "Softwarová zmìna velikosti (dobrá kvalita, ale pomalej¹í)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Beze zmìny velikosti (musíte posunovat doleva a doprava)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Jas:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "Vysoká kvalita zvuku (pomalej¹í) (restart) " -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Zakázat vypnutí" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +msgid "Mouse-click-and-drag mode enabled." +msgstr "Re¾im pøetáhnutí my¹i zapnut." + +#: backends/platform/iphone/osys_events.cpp:340 +msgid "Mouse-click-and-drag mode disabled." +msgstr "Re¾im pøetáhnutí my¹i vypnut." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "Touchpad re¾im zapnut" -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "Touchpad re¾im vypnut" -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Normální (bez zmìny velikosti)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normální (bez zmìny velikosti)" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +msgid "Enabled aspect ratio correction" +msgstr "Povolena korekce pomìru stran" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +msgid "Disabled aspect ratio correction" +msgstr "Zakázána korekce pomìru stran" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +msgid "Active graphics filter:" +msgstr "Aktivní grafický filtr:" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +msgid "Windowed mode" +msgstr "Re¾im do okna" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL Normální" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "OpenGL Zachovávající" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL Pùvodní" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +msgid "Current display mode" +msgstr "Souèasný re¾im obrazu" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "Souèasná velikost" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "Aktivní re¾im filtru: Lineární" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "Aktivní re¾im filtru: Nejbli¾¹í" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Nahoru" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "Dolù" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "Doleva" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "Doprava" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Levé Kliknutí" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Pravé kliknutí" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Oblast" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "Multi Funkce" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "Zamìnit znaky" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "Pøeskoèit text" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Rychlý re¾im" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Ladící program" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Globální menu" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "Virtuální klávesnice" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Mapovaè kláves" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" -msgstr "Chcete ukonèit?" +msgstr "Chcete ukonèit ?" #: backends/platform/wii/options.cpp:51 msgid "Video" @@ -2094,135 +2451,190 @@ msgid "Network down" msgstr "Sí» je nedostupná" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" -msgstr "Spou¹tím sí»" +msgid "Initializing network" +msgstr "Zavádím sí»" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" -msgstr "Pøi spou¹tìní sítì vypr¹el limit" +msgid "Timeout while initializing network" +msgstr "Pøi zavádìní sítì vypr¹el limit" #: backends/platform/wii/options.cpp:186 #, c-format -msgid "Network not initialised (%d)" -msgstr "Sí» není zapnuta (%d)" +msgid "Network not initialized (%d)" +msgstr "Sí» není zavedena (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Skrýt Panel nástrojù" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Zobrazit klávesnici" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "Zvuk zapnout/vypnout" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Pravé kliknutí" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Ukázat/Skrýt Kurzor" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Rozhlí¾ení pomocí my¹i" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Pøiblí¾ení nahoru" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Pøiblí¾ení dolù" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Pøiøadit klávesy" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "©ipka Nahoru" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "©ipka Dolù" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "©ipka Doleva" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "©ipka Doprava" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "Chcete hru nahrát nebo ulo¾it?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr " Jste si jisti, ¾e chcete odejít ? " -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Klávesnice" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Otáèet" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "Pou¾ívá ovladaè SDL" -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Displej" -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" -msgstr "Chcete provést automatické hledání?" +msgstr "Chcete provést automatické hledání ?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "Mapovat èinnost pravé kliknutí" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "" "Musíte namapovat klávesu pro èinnost 'Pravé Kliknutí', abyste tuto hru mohli " "hrát" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "Mapovat èinnost skrýt panel nástrojù" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" "Musíte namapovat klávesu pro èinnost 'Skrýt Panel nástrojù', abyste tuto hru " "mohli hrát" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "Namapovat èinnost Pøiblí¾it Nahoru (nepovinné)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "Namapovat èinnost Pøiblí¾it Dolù (nepovinné)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "Nezapomeòte namapovat klávesu k èinnosti 'Skrýt Panel Nástrojù, abyste " "vidìli celý inventáø" +#: backends/events/default/default-events.cpp:222 +msgid "Do you really want to return to the Launcher?" +msgstr "Opravdu se chcete vrátit tuto do Spou¹tìèe?" + +#: backends/events/default/default-events.cpp:222 +msgid "Launcher" +msgstr "Spou¹tìè" + +#: backends/events/default/default-events.cpp:244 +msgid "Do you really want to quit?" +msgstr "Opravdu chcete skonèit?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "'Re¾im «uknutí' Dotykové Obrazovky - Levé Kliknutí" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "'Re¾im «uknutí' Dotykové Obrazovky - Pravé Kliknutí" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "'Re¾im «uknutí' Dotykové Obrazovky - Najetí (Bez Kliknutí)" + +#: backends/events/gph/gph-events.cpp:390 +msgid "Maximum Volume" +msgstr "Maximální Hlasitost" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "Zvy¹uji Hlasitost" + +#: backends/events/gph/gph-events.cpp:398 +msgid "Minimal Volume" +msgstr "Minimální Hlasitost" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "Sni¾uji Hlasitost" + +#~ msgid "Discovered %d new games." +#~ msgstr "Objeveno %d nových her." + +#~ msgid "Command line argument not processed" +#~ msgstr "Argument pøíkazové øádky nebyl zpracován" + +#~ msgid "FM Towns Emulator" +#~ msgstr "FM Towns Emulátor" + #~ msgid "Invalid Path" #~ msgstr "Neplatná Cesta" diff --git a/po/da_DA.po b/po/da_DA.po index 8e77f376ac..1d9acf76f5 100644 --- a/po/da_DA.po +++ b/po/da_DA.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2011-01-08 22:53+0100\n" "Last-Translator: Steffen Nyeland <steffen@nyeland.dk>\n" "Language-Team: Steffen Nyeland <steffen@nyeland.dk>\n" @@ -16,108 +16,118 @@ msgstr "" "Language: Dansk\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(bygget den %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "Funktioner kompileret ind:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Tilgængelige \"motorer\":" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "Gå op" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Gå til forrige biblioteks niveau" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "Gå op" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Fortryd" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Vælg" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Luk" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Muse klik" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Vis tastatur" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Kortlæg taster" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Vælg en handling at kortlægge" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Kortlæg" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Vælg en handling og klik 'Kortlæg'" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Tilknyttet tast : %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Tilknyttet tast : ingen" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Vælg venligst en handling" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Tryk tasten for at tilknytte" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Spil" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -125,29 +135,29 @@ msgstr "" "Kort spil identifikator til brug for gemmer, og for at køre spillet fra " "kommandolinien" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Navn:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "Fuld titel på spillet" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Navn:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Sprog:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" @@ -155,282 +165,282 @@ msgstr "" "Spillets sprog. Dette vil ikke ændre din spanske version af spillet til " "engelsk" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<standard>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Platform:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "Platform som spillet oprindeligt var designet til" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Platform:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Grafik" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "GFX" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "Overstyr globale grafik indstillinger" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "Overstyr globale grafik indstillinger" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "Lyd" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "Overstyr globale lyd indstillinger" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "Overstyr globale lyd indstillinger" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "Lydstyrke" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "Lydstyrke" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "Overstyr globale lydstyrke indstillinger" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "Overstyr globale lydstyrke indstillinger" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "Overstyr globale MIDI indstillinger" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Overstyr globale MIDI indstillinger" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "Overstyr globale MT-32 indstillinger" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Overstyr globale MT-32 indstillinger" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "Stier" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "Stier" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "Spil sti:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "Spil sti:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "Ekstra sti:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "Angiver sti til ekstra data der bruges i spillet" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "Ekstra sti:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "Gemme sti:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "Angiver hvor dine gemmer bliver lagt" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "Gemme sti:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "Ingen" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Standard" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "Vælg SoundFont" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Vælg bibliotek med spil data" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "Vælg ekstra spil bibliotek" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Vælg bibliotek til spil gemmer" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "Dette spil ID er allerede i brug. Vælg venligst et andet." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~A~fslut" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "Afslut ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "~O~m..." -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "Om ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~I~ndstillinger..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Ændre globale ScummVM indstillinger" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "~S~tart" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "Start det valgte spil" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~H~ent..." -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Hent gemmer for det valgte spil" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "~T~ilføj spil..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "Hold Skift for at tilføje flere" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "~R~ediger spil..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Ændre spil indstillinger" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "~F~jern spil" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "Fjerner spil fra listen. Spillets data filer forbliver uberørt" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~T~ilføj spil..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~R~ediger spil..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~F~jern spil" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "Søg i spil liste" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Søg:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Slet værdi" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Indlæs spil:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Indlæs" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -438,205 +448,222 @@ msgstr "" "Vil du virkelig køre fler spils detektoren? Dette kunne potentielt tilføje " "et stort antal spil." -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Ja" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "Nej" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kunne ikke åbne det angivne bibliotek!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM kunne ikke finde noget spil i det angivne bibliotek!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Vælg spillet:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "Vil du virkelig fjerne denne spil konfiguration?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "Dette spil understøtter ikke hentning af spil fra spiloversigten." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM kunne ikke finde en motor, istand til at afvikle det valgte spil!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Tilføj flere..." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Tilføj flere..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Tilføj spil..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Tilføj spil..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... fremskridt ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "Skan gennemført!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "Fundet %d nye spil." +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "Gennemset %d biblioteker ..." -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "Fundet %d nye spil ..." -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Aldrig" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "hvert 5. minut" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "hvert 10. minut" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "hvert 15. minut" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "hvert 30. minut" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "Ingen" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "Grafik tilstand:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Rendere tilstand:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "Speciel farvereduceringstilstand understøttet a nogle spil" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Fuldskærms tilstand" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Billedformat korrektion" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Korrekt billedformat til 320x200 spil" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "EGA farveforøgelse" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "Aktiver farveforøgelse i EGA spil der understøtter det" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Foretruk. enhed:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "Musik enhed:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 msgid "Specifies preferred sound device or sound card emulator" msgstr "Angiver foretukket lyd enhed eller lydkort emulator" -#: gui/options.cpp:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 msgid "Specifies output sound device or sound card emulator" msgstr "Angiver lyd udgangsenhed eller lydkorts emulator" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Foretruk. enh.:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "Musik enhed:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "AdLib emulator:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib bliver brugt til musik i mange spil" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "Udgangsfrekvens:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -644,60 +671,60 @@ msgstr "" "Højere værdi angiver bedre lyd kvalitet, men understøttes måske ikke af dit " "lydkort" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "GM enhed:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "Specifies default sound device for General MIDI output" msgstr "Angiver standard lyd enhed for General MIDI udgang" -#: gui/options.cpp:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "Brug ikke General MIDI musik" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "Brug første tilgængelig enhed" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 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:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "Blandet AdLib/MIDI tilstand" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "Brug både MIDI og AdLib lyd generering" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "MIDI lydstyrke:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "MT-32 enhed:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 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:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Ægte Roland MT-32 (undlad GM emulering)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -705,190 +732,191 @@ msgstr "" "Kontroller om du vil bruge din rigtige hardware Roland-kompatible lyd enhed " "tilsluttet til din computer" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Ægte Roland MT-32 (ingen GM emulering)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "Aktivér Roland GS tilstand" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "Sluk for General MIDI kortlægning for spil med Roland MT-32 lydspor" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "Brug ikke Roland MT-32 musik" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Tekst og tale:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Tale" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Undertekster" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Begge" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Tekst hastighed:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Tekst og tale:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Tale" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "Tekst" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "Begge" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Vis undertekster og afspil tale" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Tekst hastighed:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "Musik lydstyrke:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "Musik lydstyrke:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Mute alle" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "SFX lydstyrke:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "Lydstyrke for specielle lydeffekter" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "SFX lydstyrke:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "Tale lydstyrke:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "Tale lydstyrke:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "Tema sti:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "Tema sti:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 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:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "Plugin sti:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "Plugin sti:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Andet" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Andet" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "GUI renderer:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Auto gemme:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Auto gemme:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Taster" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "Sprog:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Sprog for brugerfladen i ScummVM" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +msgid "You have to restart ScummVM before your changes will take effect." msgstr "Du skal genstarte ScummVM for at ændringer vises." -#: gui/options.cpp:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Vælg bibliotek til gemmer" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 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:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "Vælg bibliotek for GUI temaer" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Vælg bibliotek for ekstra filer" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "Vælg bibliotek for plugins" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -896,786 +924,862 @@ 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." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "Ingen dato gemt" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "Intet tidspunkt gemt" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "Ingen spilletid gemt" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Slet" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "Vil du virkelig slette denne gemmer?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Dato:" -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Tid:" -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Spilletid:" -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Unavngivet gemmetilstand" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Vælg et tema" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "Deaktiveret GFX" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "Deaktiveret GFX" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Standard renderer (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Standard (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Antialias renderer (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "Antialias (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Motor understøtter ikke fejlfindingsniveau '%s'" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Menu" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Spring over" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pause" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Spring linje over" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "Fejl ved kørsel af spil:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "Kunne ikke finde nogen motor istand til at afvikle det valgte spil" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "" -#: common/error.cpp:44 +#: common/error.cpp:40 #, fuzzy msgid "Game data not found" msgstr "Spil data ikke fundet" -#: common/error.cpp:46 +#: common/error.cpp:42 #, fuzzy msgid "Game id not supported" msgstr "Spil id ikke understøttet" -#: common/error.cpp:48 +#: common/error.cpp:44 #, fuzzy msgid "Unsupported color mode" msgstr "Ikke understøttet farve tilstand" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "Læse rettighed nægtet" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "Skrive rettighed nægtet" -#: common/error.cpp:56 +#: common/error.cpp:52 #, fuzzy msgid "Path does not exist" msgstr "Sti eksistere ikke" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "Sti ikke et bibliotek" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "Sti ikke en fil" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "Kan ikke oprette fil" -#: common/error.cpp:65 +#: common/error.cpp:61 #, fuzzy msgid "Reading data failed" msgstr "Læsning fejlet" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Skrivning af data fejlet" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "" -#: common/error.cpp:72 +#: common/error.cpp:68 #, fuzzy msgid "Engine plugin does not support save states" msgstr "Motor understøtter ikke fejlfindingsniveau '%s'" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "" - -#: common/error.cpp:79 +#: common/error.cpp:72 #, fuzzy msgid "Unknown error" msgstr "Ukendt fejl" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules grøn" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules brun" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules grøn" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules brun" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "Gen~o~ptag" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~H~ent" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~G~em" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~I~ndstillinger" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "H~j~ælp" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "~O~m" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "~R~etur til spiloversigt" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~R~etur til oversigt" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Gemmer:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Gem" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "~F~ortryd" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~T~aster" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "Aktuel videotilstand:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "Skift billedformat korrektion" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "Fo~r~rige" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~N~æste" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~L~uk" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "Almindelige tastatur kommandoer:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "Gem / Hent dialog" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "Spring tekstlinje over" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "Spring mellemscene over" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Mellemrum" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "Pause spil" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "Hent spil tilstand 1-10" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "Gem spil tilstand 1-10" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Afslut" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Enter" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "Skift fuldskærm" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "Musik lydstyrke op / ned" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "Tekst hastighed langsommere / hurtigere" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "Simulere venstre museknap" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "Simulere højre museknap" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "Specielle tastatur kommandoer:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "Vis / Skjul konsol" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "Start fejlfinder" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "Vis hukommelsesforbrug" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "Kør i hurtig tilstand (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "Kør i meget hurtig tilstand (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "Skift muse fanger" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "Skift mellem grafik filtre" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "Hæv / Sænk skaleringsfaktor" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "Skift billedformat korrektion" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* Bemærk at brug af ctrl-f og" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " ctrl-g ikke kan ikke anbefales" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr " siden de kan skabe nedbrud" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +#, fuzzy +msgid " or incorrect game behavior." msgstr " eller ukorrekt opførsel af spil." -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "Spind ordspil på tastaturet:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "Vigtigste spilstyring:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "Skub" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "Træk" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "Giv" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "Åbn" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "Gå til" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "Tag" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "Brug" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "Læs" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "Nyt barn" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "Tænd" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "Sluk" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "Gå til" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "Tag op" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "Hvad er" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "Lås op" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "Tag på" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "Tag af" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "Lav" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "Skift" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "Se" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "Tal" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "Rejs" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "Til Henry / Til Indy" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "spil C-mol på rok" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "spil D på rok" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "spil E på rok" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "spil F på rok" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "spil G på rok" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "spil A på rok" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "spil H på rok" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "spil C-dur på rok" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "Skub" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "træk (Y)" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "Tal til" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "Lur på" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "tæNd" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "sluk (F)" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "TastOp" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "Fremhæv forrige dialog" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "TastNed" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "Fremhæv næste dialog" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "Gå" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "Oversigt" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "Objekt" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "Sort og hvid / Farve" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "Øjne" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Tunge" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "Slag" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "Spark" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "Undersøg" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "Normal markør" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Komm" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "Gem / Hent / Indstillinger" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "Andre spil kontroller" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "Oversigt:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "Rul liste op" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "Rul liste ned" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "Øverste venstre punkt" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "Nederste højre punkt" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "Øverste højre punkt" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "Nederste venstre punkt" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "Midterste højre punkt" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "Midterste højre punkt" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "Skift personer:" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "Andet barn" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "Tredie barn" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "Kamp kontroller (numtast):" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "Skridt tilbage" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "Blokér højt" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "Blokér midtfor" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "Blokér lavt" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "Slå højt" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "Slå midtfor" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "Slå lavt" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Disse er for Indy til venstre" -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "Når Indy er til højre," -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "7, 4 og 1 bliver bytte med" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "repektivt 9, 6 og 3." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "Biplan kontroller (numtast):" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "Flyv øverst til venste" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "Flyv til venstre" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "Flyv nederst til venstre" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "Flyv opad" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "Flyv ligeud" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "Flyv nedad" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "Flyv øverst til højre" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "Flyv til højre" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "Flyv nederst til højre" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1686,7 +1790,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1697,7 +1801,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1708,273 +1812,502 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " "directory inside the Tentacle game directory." msgstr "" -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "~Z~ip tilstand aktiveret" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "~O~vergange aktiveret" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "~V~andeffekter aktiveret" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Gendan spil:" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Gendan" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"Mislykkedes at hente spil tilstand fra fil:\n" +"\n" +"%s" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"Mislykkedes at gemme spil tilstand til fil:\n" +"\n" +"%s" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"Mislykkedes at gemme spil tilstand til fil:\n" +"\n" +"%s" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"Mislykkedes at gemme spil tilstand til fil:\n" +"\n" +"%s" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "Gemmer:" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "Indlæs spil:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "Gemmer:" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "MAME OPL emulator" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "DOSBox OPL emulator" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "Ingen musik" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Amiga lyd emulator" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "AdLib emulator" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Apple II GS emulator (IKKE IMPLEMENTERET)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "C64 lyd emulator" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "Initialisere MT-32 emulator" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "MT-32 emulator" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "PC Speaker emulator" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "IBM PCjr emulator" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "FM Towns emulator" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Tasteoversigt:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr " (Aktiv)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr " (Global)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr " (Spil)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "Windows MIDI" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "ScummVM Hovedmenu" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "~V~enstrehåndstilstand " -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "~I~ndy kamp styring" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Vis muse markør" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "Hæft til hjørner" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Touch X forskydning" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Touch Y forskydning" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "Brug bærbar museplade-agtig markør kontrol" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "Tryk for venstre klik, dobbelt tryk for højre klik" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Følsomhed" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "Skalering af øverste skærm ved opstart:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Hovedskærm skalering" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "Hardware skalering (hurtig, men lav kvalitet)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "Software skalering (god kvalitet, men langsommere)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Ikke skaleret (du skal rulle til venstre og højre)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Lysstyrke:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "Høj lydkvalitet (langsommere) (genstart)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Deaktiver slukning" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "Pegeplade tilstand aktiveret." + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "Pegeplade tilstand deaktiveret." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "Pegeplade tilstand aktiveret." -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "Pegeplade tilstand deaktiveret." -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Normal (ingen skalering)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal (ingen skalering)" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "Skift billedformat korrektion" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "Skift billedformat korrektion" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +#, fuzzy +msgid "Active graphics filter:" +msgstr "Skift mellem grafik filtre" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "Rendere tilstand:" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL Normal" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "OpenGL Bevar" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL Original" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "Aktuel videotilstand:" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Op" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "Ned" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "Venstre" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "Højre" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Venstre klik" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Højre klik" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Zone" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "Multi funktion" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "Skift person" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "Spring tekst over" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Hurtig tilstand" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Fejlsøger" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Global menu" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "Virtuelt tastatur" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Tastetildeling" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "Vil du afslutte?" @@ -2095,134 +2428,193 @@ msgid "Network down" msgstr "Netværk nede" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "Initialisere netværk" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +#, fuzzy +msgid "Timeout while initializing network" msgstr "Tidsgrænse nået ved initialisering af netværk" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "Netværk ikke initialiseret (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Skjul værktøjslinje" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Vis tastatur" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "Lyd til/fra" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Højre klik" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Vis/skjul markør" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Fri udsigt" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Formindsk" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Forstør" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Tildel taster" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "Pil op" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "Pil ned" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "Pil til venstre" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "Pil til højre" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "Vil du hente eller gemme spillet?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr " Er du sikker på at du vil afslutte ? " -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Tastatur" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Drej" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "Brug SDL driver" -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Vis" -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "Vil du udføre en automatisk skanning ?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "Tildel højreklikshandling" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "" "Du skal tildele en tast til 'Højreklik' handlingen for at spille dette spil" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "Tildel \"skjul værktøjslinje\" handling" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" "Du skal tildele en tast til 'Skjul værktøjslinje' handlingen for at spille " "dette spil" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "Tildel Formindsk handling (valgfri)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "Tildel Forstør handling (valgfri)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "Glem ikke at tildele en tast til 'Skjul værktøjslinje' handling for at se " "hele oversigten" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "Vil du virkelig slette denne gemmer?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "Slag" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "Vil du afslutte?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "Lydstyrke" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "Lydstyrke" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "" + +#~ msgid "Discovered %d new games." +#~ msgstr "Fundet %d nye spil." + +#~ msgid "FM Towns Emulator" +#~ msgstr "FM Towns emulator" + #~ msgid "Invalid Path" #~ msgstr "Ugyldig sti" diff --git a/po/de_DE.po b/po/de_DE.po index ac167b785f..154c529984 100755..100644 --- a/po/de_DE.po +++ b/po/de_DE.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: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2011-04-24 12:35+0100\n" "Last-Translator: Simon Sawatzki <SimSaw@gmx.de>\n" "Language-Team: Lothar Serra Mari <Lothar@Windowsbase.de> & Simon Sawatzki " @@ -18,108 +18,118 @@ msgstr "" "Language: Deutsch\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(erstellt am %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "Verwendete Funktionen:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Verfügbare Spiele-Engines:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "Pfad hoch" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Zu höherer Pfadebene wechseln" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "Pfad hoch" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Abbrechen" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Auswählen" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Schließen" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Mausklick" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Tastatur anzeigen" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Tasten neu zuweisen" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Eine Aktion zum Zuweisen auswählen" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Zuweisen" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Aktion auswählen und \"Zuweisen\" klicken" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Zugewiesene Taste: %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Zugewiesene Taste: keine" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Bitte eine Aktion auswählen" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Taste drücken, um sie zuzuweisen" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Spiel" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "Kennung:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -127,29 +137,29 @@ msgstr "" "Kurzer Spielname, um die Spielstände zuzuordnen und das Spiel von der " "Kommandozeile aus starten zu können" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Name:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "Voller Name des Spiels" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Name:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Sprache:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" @@ -157,284 +167,284 @@ msgstr "" "Sprache des Spiels. Diese Funktion wird nicht eine spanische Version des " "Spiels in eine deutsche verwandeln." -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<Standard>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Plattform:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "Plattform, für die das Spiel ursprünglich erstellt wurde" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Plattform:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Grafik" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "GFX" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "Globale Grafikeinstellungen übergehen" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "Globale Grafikeinstellungen übergehen" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "Audio" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "Globale Audioeinstellungen übergehen" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "Globale Audioeinstellungen übergehen" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "Lautstärke" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "Lautst." -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "Globale Lautstärke-Einstellungen übergehen" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "Globale Lautstärkeeinstellungen übergehen" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "Globale MIDI-Einstellungen übergehen" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Globale MIDI-Einstellungen übergehen" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "Globale MT-32-Einstellungen übergehen" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Globale MT-32-Einstellungen übergehen" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "Pfade" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "Pfade" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "Spielpfad:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "Spielpfad:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "Extrapfad:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "Legt das Verzeichnis für zusätzliche Spieldateien fest." -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "Extrapfad:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "Spielstände:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "Legt fest, wo die Spielstände abgelegt werden." -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "Speichern:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "Keiner" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Standard" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "SoundFont auswählen" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Verzeichnis mit Spieldateien auswählen" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "Verzeichnis mit zusätzlichen Dateien auswählen" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Verzeichnis für Spielstände auswählen" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "Diese Spielkennung ist schon vergeben. Bitte eine andere wählen." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~B~eenden" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "ScummVM beenden" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "Übe~r~" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "Über ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~O~ptionen" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Globale ScummVM-Einstellungen bearbeiten" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "~S~tarten" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "Ausgewähltes Spiel starten" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~L~aden..." -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Spielstand für ausgewähltes Spiel laden" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "Spiel ~h~inzufügen" -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "" "Umschalttaste (Shift) gedrückt halten, um Verzeichnisse nach Spielen zu " "durchsuchen" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "Spielo~p~tionen" -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Spieloptionen ändern" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "Spiel ~e~ntfernen" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "Spiel aus der Liste entfernen. Die Spieldateien bleiben erhalten." -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~H~inzufügen" -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "Spielo~p~tion" -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~E~ntfernen" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "In Spieleliste suchen" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Suchen:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Wert löschen" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Spiel laden:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Laden" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -442,207 +452,226 @@ msgstr "" "Möchten Sie wirklich den PC nach Spielen durchsuchen? Möglicherweise wird " "dabei eine größere Menge an Spielen hinzugefügt." -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Ja" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "Nein" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM konnte das gewählte Verzeichnis nicht öffnen!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM konnte im gewählten Verzeichnis kein Spiel finden!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Spiel auswählen:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "Möchten Sie wirklich diese Spielkonfiguration entfernen?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "" "Für dieses Spiel wird das Laden aus der Spieleliste heraus nicht unterstützt." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM konnte keine Engine finden, um das Spiel zu starten!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Durchsuchen" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Durchsuchen" -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Hinzufügen" -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Spiel hinzufügen" -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... läuft..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "Suchlauf abgeschlossen!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "%d neue Spiele gefunden." +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "%d Ordner durchsucht..." -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "%d neue Spiele gefunden..." -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Niemals" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "alle 5 Minuten" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "alle 10 Minuten" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "alle 15 Minuten" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "alle 30 Minuten" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "-" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "Grafikmodus:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Render-Modus:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "" "Spezielle Farbmischungsmethoden werden von manchen Spielen unterstützt." -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Vollbildmodus" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Seitenverhältnis korrigieren" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Seitenverhältnis für Spiele mit der Auflösung 320x200 korrigieren" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "Antifehlerdiffusion für EGA" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" -msgstr "Aktiviert die Aufhebung der Fehlerdiffusion in EGA-Spielen, die dies unterstützen." +msgstr "" +"Aktiviert die Aufhebung der Fehlerdiffusion in EGA-Spielen, die dies " +"unterstützen." -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Standard-Gerät:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "Musikgerät:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 msgid "Specifies preferred sound device or sound card emulator" msgstr "" "Legt das bevorzugte Tonwiedergabe-Gerät oder den Soundkarten-Emulator fest." -#: gui/options.cpp:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 msgid "Specifies output sound device or sound card emulator" msgstr "Legt das Musikwiedergabe-Gerät oder den Soundkarten-Emulator fest." -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Standard-Gerät:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "Musikgerät:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "AdLib-Emulator" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib wird für die Musik in vielen Spielen verwendet." -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "Ausgabefrequenz:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -650,64 +679,64 @@ msgstr "" "Höhere Werte bewirken eine bessere Soundqualität, werden aber möglicherweise " "nicht von jeder Soundkarte unterstützt." -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "GM-Gerät:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 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:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "Keine General-MIDI-Musik" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "Erstes verfügbares Gerät" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 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:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "AdLib-/MIDI-Modus" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "Benutzt MIDI und AdLib zur Sounderzeugung." -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "MIDI-Lautstärke:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "MT-32-Gerät:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 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:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Echte Roland-MT-32-Emulation (GM-Emulation deaktiviert)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -715,975 +744,1052 @@ msgstr "" "Wählen Sie dies aus, wenn Sie Ihre echte Hardware, die mit einer Roland-" "kompatiblen Soundkarte verbunden ist, verwenden möchten." -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Echte Roland-MT-32-Emulation (kein GM)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "Roland-GS-Modus" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" "Schaltet die General-MIDI-Zuweisung für Spiele mit Roland-MT-32-Audiospur " "aus." -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "Keine Roland-MT-32-Musik" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Sprache und Text:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Sprache" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Untertitel" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Beides" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Untertitel-Tempo:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Sprache + Text:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Spr." -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "TXT" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "S+T" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Untertitel anzeigen und Sprachausgabe aktivieren" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Text-Tempo:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "Musiklautstärke:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "Musiklautstärke:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Alles aus" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "Effektlautstärke:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "Lautstärke spezieller Soundeffekte" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "Effektlautst.:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "Sprachlautstärke:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "Sprachlautst.:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "Themenpfad:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "Themenpfad:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 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:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "Plugin-Pfad:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "Plugin-Pfad:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Sonstiges" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Andere" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Thema:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "GUI-Renderer:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Autom. Speichern:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Speich.(auto)" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Tasten" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "Sprache:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Sprache der ScummVM-Oberfläche" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +msgid "You have to restart ScummVM before your changes will take effect." msgstr "Sie müssen ScummVM neu starten, um die Einstellungen zu übernehmen." -#: gui/options.cpp:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Verzeichnis für Spielstände auswählen" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 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:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "Verzeichnis für Oberflächen-Themen" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Verzeichnis für zusätzliche Dateien auswählen" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 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:1335 +#: gui/options.cpp:1389 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 "" -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "Kein Datum gespeichert" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "Keine Zeit gespeichert" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "Keine Spielzeit gespeichert" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Löschen" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "Diesen Spielstand wirklich löschen?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Datum: " -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Zeit: " -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Spieldauer: " -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Unbenannt" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Thema auswählen" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "GFX ausgeschaltet" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX ausgeschaltet" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Standard-Renderer (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Standard (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Kantenglättung (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "Kantenglättung (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Engine unterstützt den Debug-Level \"%s\" nicht." -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Menü" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Überspringen" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pause" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Zeile überspringen" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "Fehler beim Ausführen des Spiels:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "Konnte keine Spiel-Engine finden, die dieses Spiel starten kann." -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "Kein Fehler" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "Spieldaten nicht gefunden" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "Spielkennung nicht unterstützt" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "Farbmodus nicht unterstützt" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "Lese-Berechtigung nicht vorhanden" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "Schreib-Berechtigung nicht vorhanden" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "Verzeichnis existiert nicht." -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "Ungültiges Verzeichnis" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "Pfad ist keine Datei." -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "Kann Datei nicht erstellen." -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "Daten konnten nicht gelesen werden." -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Daten konnten nicht geschrieben werden." -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "Konnte kein passendes Engine-Plugin finden." -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "Engine-Plugin unterstützt keine Speicherstände." -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "Argument in Kommandozeile nicht verarbeitet" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "Unbekannter Fehler" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules-Grün" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules-Bernsteingelb" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules-Grün" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules-Gelb" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "~F~ortsetzen" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~L~aden" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~S~peichern" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~O~ptionen" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~H~ilfe" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "Übe~r~" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "Zur Spiele~l~iste zurück" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "Zur Spiele~l~iste" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Speichern:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Speichern" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "~A~bbrechen" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~T~asten" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "Aktueller Videomodus:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "Seitenverhältnis anpassen: an/aus" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~Z~urück" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~W~eiter" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~S~chließen" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "Allgemeine Tastenbefehle:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "Menü zum Speichern/Laden" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "Textzeile überspringen" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "Zwischensequenz überspringen" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Leertaste" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "Spielpause" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Strg" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "Spielstand 1-10 laden" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "Spielstand 1-10 speichern" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Beenden" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Enter" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "Vollbild-/Fenster-Modus" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "Musiklautstärke höher/niedriger" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "Texttempo langsamer/schneller" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "Linke Maustaste simulieren" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tabulator" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "Rechte Maustaste simulieren" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "Spezielle Tastenbefehle:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "Konsole zeigen/verbergen" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "Debugger starten" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "Speicherverbrauch anzeigen" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "Schneller Modus (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "Sehr schneller Modus (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "Mauseingrenzung in Fenster an/aus" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "Zwischen Grafikfiltern wechseln" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "Größenverhätlnis höher/niedriger" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "Seitenverhältnis anpassen: an/aus" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* Es wird davon abgeraten," -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " Strg+f und Strg+g zu verwenden," -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr " da dies Abstürze oder fehlerhaftes" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +#, fuzzy +msgid " or incorrect game behavior." msgstr " Spielverhalten verursachen kann." -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "Sprüche mit Tastatur spinnen:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "Hauptspielsteuerung:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "Drücke" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "Ziehe" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "Gib" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "Öffne" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "Gehe zu" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "Nimm" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "Benutze" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "Lies" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "Person" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "Schalt ein" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "Schalt aus" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "Gehe zu" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "Nimm" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "Was ist" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "Schließ auf" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "Zieh an" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "Nimm ab" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "Reparier" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "Wechsle" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "Schau" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "Rede" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "Reise" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "Zu Henry/Zu Indy" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "spiele tiefes C auf Stab" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "spiele D auf Stab" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "spiele E auf Stab" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "spiele F auf Stab" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "spiele G auf Stab" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "spiele A auf Stab" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "spiele B auf Stab" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "spiele hohes C auf Stab" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "Drücke" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "Ziehe" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "Rede mit" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "Schau an" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "Mach an" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "Mach aus" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "Hoch-Taste" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "Vorige Dialogwahl markieren" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "Runter-Taste" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "Nächste Dialogwahl markieren" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "Gehe" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "Inventar" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "Objekt" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "Graustufen-Modus/Farbe" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "Augen" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Zunge" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "Schlage" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "Tritt" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "Betrachte" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "Normaler Mauszeiger" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Kommunikation" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "Speichern / Laden / Optionen" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "Weitere Steuerung:" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "Inventar:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "Liste hochblättern" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "Liste runterblättern" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "Oberer linker Gegenstand" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "Unterer linker Gegenstand" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "Oberer rechter Gegenstand" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "Unterer rechter Gegenstand" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "Mittlerer linker Gegenstand" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "Mittlerer rechter Gegenstand" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "Figuren wechseln:" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "Zweites Kind" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "Drittes Kind" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "Kampfsteuerung (Ziffernblock):" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "Schritt zurück" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "Deckung oben" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "Deckung Mitte" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "Deckung unten" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "Schlag oben" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "Schlag Mitte" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "Schlag unten" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Dies gilt für Indy links." -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "Wenn Indy rechts steht," -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "werden 7, 4 und 1 je mit" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "9, 6 und 3 vertauscht." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "Doppeldecker (Ziffernblock):" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "Nach oben links fliegen" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "Nach links fliegen" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "Nach unten links fliegen" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "Nach oben fliegen" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "Geradeaus fliegen" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "Nach unten fliegen" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "Nach oben rechts fliegen" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "Nach rechts fliegen" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "Nach unten rechts fliegen" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1694,7 +1800,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1705,7 +1811,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1716,273 +1822,506 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " "directory inside the Tentacle game directory." -msgstr "Normalerweise würde jetzt Maniac Mansion starten. ScummVM kann das jedoch noch nicht. Um dieses Spiel zu spielen, klicken Sie auf \"Spiel hinzufügen\" im Startmenü von ScummVM und wählen das Verzeichnis \"Maniac\" im Verzeichnis dieses Spiels aus." +msgstr "" +"Normalerweise würde jetzt Maniac Mansion starten. ScummVM kann das jedoch " +"noch nicht. Um dieses Spiel zu spielen, klicken Sie auf \"Spiel hinzufügen\" " +"im Startmenü von ScummVM und wählen das Verzeichnis \"Maniac\" im " +"Verzeichnis dieses Spiels aus." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "~Z~ip-Modus aktiviert" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "Über~g~änge aktiviert" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "~W~assereffekt aktiviert" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Spiel laden:" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Laden" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"Konnte Spielstand nicht aus folgender Datei laden:\n" +"\n" +"%s" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"Konnte Spielstand nicht in folgender Datei speichern:\n" +"\n" +"%s" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"Konnte Spielstand nicht in folgender Datei speichern:\n" +"\n" +"%s" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"Konnte Spielstand nicht in folgender Datei speichern:\n" +"\n" +"%s" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "Speichern:" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "Spiel laden:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "Speichern:" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "MAME-OPL-Emulator" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "DOSBox-OPL-Emulator" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "Keine Musik" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Amiga-Audio-Emulator" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "AdLib-Emulator" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Apple-II-GS-Emulator (NICHT INTEGRIERT)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "C64-Audio-Emulator" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "MT-32-Emulator wird gestartet..." -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "MT-32-Emulation" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "PC-Lautsprecher-Emulator" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "IBM-PCjr-Emulator" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "FM-Towns-Emulator" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Tasten-Layout:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr " (Aktiv)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr " (Global)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr " (Spiel)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "Windows MIDI" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "ScummVM-Hauptmenü" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "~L~inke-Hand-Modus" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "~K~ampfsteuerung für Indiana Jones" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Mauszeiger anzeigen" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "An Ecken anheften" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Zu X-Position gehen" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Zu Y-Position gehen" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "Den Trackpad-Style für Maussteuerung benutzen" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "Tippen für Linksklick, Doppeltippen für Rechtsklick" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Empfindlichkeit" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "Vergößerung des oberen Bildschirms:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Hauptbildschirm-Skalierung:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "Hardware-Skalierung (schnell, aber schlechte Qualität)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "Software-Skalierung (gute Qualität, aber langsamer)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Nicht skalieren (Sie müssen nach links und nach rechts scrollen)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Helligkeit:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "Hohe Audioqualität (lansamer) (erfordert Neustart)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Stromsparmodus abschalten" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "Touchpad-Modus aktiviert." + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "Touchpad-Modus ausgeschaltet." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "Touchpad-Modus aktiviert." -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "Touchpad-Modus ausgeschaltet." -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Normal (keine Skalierung)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal ohn.Skalieren" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "Seitenverhältnis anpassen: an/aus" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "Seitenverhältnis anpassen: an/aus" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +#, fuzzy +msgid "Active graphics filter:" +msgstr "Zwischen Grafikfiltern wechseln" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "Render-Modus:" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "Aktueller Videomodus:" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Hoch" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "Runter" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "Links" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "Rechts" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Linksklick" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Rechtsklick" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Zone" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "Multifunktion" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "Figur wechseln" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "Text überspringen" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Schneller Modus" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Debugger" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Hauptmenü" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "Virtuelle Tastatur" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Tasten zuordnen" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "Möchten Sie beenden?" @@ -2103,135 +2442,197 @@ msgid "Network down" msgstr "Netzwerk ist aus." #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "Netzwerk wird gestartet..." #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +#, fuzzy +msgid "Timeout while initializing network" msgstr "Zeitüberschreitung beim Starten des Netzwerks" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "Netzwerk nicht gestartet (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Werkzeugleiste verbergen" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Tastatur zeigen" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "Ton ein/aus" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Rechtsklick" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Cursor zeigen/verbergen" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Freie Ansicht" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Herauszoomen" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Hineinzoomen" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Tasten zuweisen" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "Zeiger hoch" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "Zeiger runter" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "Zeiger nach links" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "Zeiger nach rechts" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "Möchten Sie ein Spiel laden oder speichern?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr " Möchten Sie wirklich beenden? " -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Tastatur" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Drehen" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "Verwende SDL-Treiber " -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Anzeige " -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "Möchten Sie eine automatische Suche durchführen?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "Aktion \"Rechtsklick\" zuweisen" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "" "Sie müssen der Aktion \"Rechtsklick\" eine Taste zuweisen, um dieses Spiel " "spielen zu können." -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "Aktion \"Werkzeugleiste verbergen\" zuweisen" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" "Sie müssen der Aktion \"Werkzeugleiste verbergen\" eine Taste zuweisen, um " "dieses Spiel spielen zu können." -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "Aktion \"Herauszoomen\" zuweisen (optional)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "Aktion \"Hineinzoomen\" zuweisen (optional)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "Vergessen Sie nicht, der Aktion \"Werkzeugleiste verbergen\" eine Taste " "zuzuweisen, um das ganze Inventar sehen zu können." +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "Diesen Spielstand wirklich löschen?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "Schlage" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "Möchten Sie beenden?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "Lautstärke" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "Lautstärke" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "" + +#~ msgid "Discovered %d new games." +#~ msgstr "%d neue Spiele gefunden." + +#~ msgid "Command line argument not processed" +#~ msgstr "Argument in Kommandozeile nicht verarbeitet" + +#~ msgid "FM Towns Emulator" +#~ msgstr "FM-Towns-Emulator" + #~ msgid "Invalid Path" #~ msgstr "Ungültiges Verzeichnis" diff --git a/po/es_ES.po b/po/es_ES.po index 837ac60911..0f76d38917 100644 --- a/po/es_ES.po +++ b/po/es_ES.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: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2011-05-08 13:31+0100\n" "Last-Translator: Tomás Maidagan\n" "Language-Team: \n" @@ -16,108 +16,118 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Language: Espanol\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(compilado el %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "Características incluidas:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Motores disponibles:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "Arriba" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Ir al directorio anterior" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "Arriba" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Cancelar" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Aceptar" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Cerrar" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Clic de ratón" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Mostrar el teclado" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Asignar teclas" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Elige la acción a asociar" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Asignar" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "Aceptar" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Selecciona una acción y pulsa \"Asignar\"" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Tecla asociada: %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Tecla asociada: ninguna" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Por favor, selecciona una acción" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Pulsa la tecla a asignar" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Juego" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -125,29 +135,29 @@ msgstr "" "Identificador usado para las partidas guardadas y para ejecutar el juego " "desde la línea de comando" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Nombre:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "Título completo del juego" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Nom.:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Idioma:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" @@ -155,282 +165,282 @@ msgstr "" "Idioma del juego. No sirve para pasar al inglés la versión española de un " "juego" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<por defecto>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Plataforma:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "Plataforma para la que se diseñó el juego" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Plat.:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Gráficos" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "GFX" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "Ignorar opciones gráficas generales" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "Opciones gráficas específicas" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "Sonido" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "Ignorar opciones de sonido generales" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "Opciones de sonido específicas" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "Volumen" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "Volumen" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "Ignorar opciones de volumen generales" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "Opciones de volumen específicas" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "Ignorar opciones de MIDI generales" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Opciones de MIDI específicas" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "Ignorar opciones de MT-32 generales" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Opciones de MT-32 específicas" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "Rutas" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "Rutas" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "Juego:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "Juego:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "Adicional:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "Especifica un directorio para datos adicionales del juego" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "Adicional:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "Partidas:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "Especifica dónde guardar tus partidas" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "Partidas:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "Ninguna" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Por defecto" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "Selecciona un SoundFont" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Selecciona el directorio del juego" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "Selecciona el directorio adicional" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Selecciona el directorio para partidas guardadas" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "Esta ID ya está siendo usada. Por favor, elige otra." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~S~alir" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "Cerrar ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "Acerca ~d~e" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "Acerca de ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~O~pciones..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Cambiar opciones generales de ScummVM" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "~J~ugar" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "Jugar al juego seleccionado" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~C~argar..." -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Cargar partida del juego seleccionado" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "~A~ñadir juego..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "Mantener pulsado Mayús para añadir varios juegos" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "~E~ditar juego..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Cambiar opciones de juego" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "E~l~iminar juego" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "Eliminar el juego de la lista. Los archivos no se borran" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~A~ñadir..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~ditar..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "E~l~iminar" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "Buscar en la lista de juegos" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Buscar:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Eliminar valor" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Cargar juego:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Cargar" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -438,208 +448,225 @@ msgstr "" "¿Seguro que quieres ejecutar la detección masiva? Puede que se añada un gran " "número de juegos." -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Sí" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "No" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "¡ScummVM no ha podido abrir el directorio!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "¡ScummVM no ha encontrado ningún juego en el directorio!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Elige el juego:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "¿Seguro que quieres eliminar la configuración de este juego?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "Este juego no permite cargar partidas desde el lanzador." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "¡ScummVM no ha podido encontrar ningún motor capaz de ejecutar el juego!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Añad. varios" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Añadir varios..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Añadir..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Añadir juego..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... progreso..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "¡Búsqueda completada!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "Se han encontrado %d juegos nuevos." +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "Se ha buscado en %d directorios..." -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "Se han encontrado %d juegos nuevos..." -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Nunca" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "cada 5 minutos" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "cada 10 minutos" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "cada 15 minutos" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "cada 30 minutos" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "Ninguno" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "Modo gráfico:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Renderizado:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "Modos especiales de expansión soportados por algunos juegos" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Pantalla completa" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Corrección de aspecto" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Corregir relación de aspecto en juegos 320x200" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "Difuminado EGA" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "Activar difuminado en los juegos EGA compatibles" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Disp. preferido:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "Disp. de música:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 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:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 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:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Disp. preferido:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "Disp. de música:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "Emul. de AdLib:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib se usa para la música en muchos juegos" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "Frec. de salida:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -647,64 +674,64 @@ msgstr "" "Los valores más altos ofrecen mayor calidad, pero puede que tu tarjeta de " "sonido no sea compatible" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "Dispositivo GM:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "Specifies default sound device for General MIDI output" msgstr "Especifica el dispositivo de salida General MIDI por defecto" -#: gui/options.cpp:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "No usar música General MIDI" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "Utilizar el primer dispositivo disponible" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "" "SoundFont está soportado por algunas tarjetas de sonido, además de " "Fluidsynth y Timidity" -#: gui/options.cpp:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "Modo AdLib/MIDI" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "Usar tanto MIDI como AdLib en la generación de sonido" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "Ganancia MIDI:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "Disp. MT-32:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 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:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Roland MT-32 auténtica (desactivar emulación GM)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -712,191 +739,192 @@ msgstr "" "Marcar si se quiere usar un dispositivo de sonido real conectado al " "ordenador y compatible con Roland" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Roland MT-32 real (sin emulación GM)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "Activar modo Roland GS" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "Desactiva la conversión General MIDI en juegos con sonido Roland MT-32" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "No usar música Roland MT-32" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Texto y voces:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Voces" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Subtítulos" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Ambos" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Vel. de subtítulos:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Texto y voces:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Voz" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "Subt" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "V&S" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Reproducir voces y subtítulos" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Vel. de subt.:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "Música:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "Música:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Silenciar" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "Efectos:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "Volumen de los efectos de sonido" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "Efectos:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "Voces:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "Voces:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "Temas:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "Temas:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 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:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "Plugins:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "Plugins:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Otras" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Otras" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "Interfaz:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Autoguardado:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Autoguardado:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Teclas" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "Idioma:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Idioma de la interfaz de ScummVM" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +msgid "You have to restart ScummVM before your changes will take effect." msgstr "Tienes que reiniciar ScummVM para aplicar los cambios." -#: gui/options.cpp:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Selecciona el directorio de guardado" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 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:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "Selecciona el directorio de temas" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Selecciona el directorio adicional" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "Selecciona el directorio de plugins" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -904,779 +932,855 @@ msgstr "" "El tema seleccionado no es compatible con el idioma actual. Si quieres usar " "este tema debes cambiar a otro idioma primero." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "No hay fecha guardada" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "No hay hora guardada" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "No hay tiempo guardado" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Borrar" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "¿Seguro que quieres borrar esta partida?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Fecha: " -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Hora: " -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Tiempo: " -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Partida sin nombre" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Selecciona un tema" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "GFX desactivados" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX desactivados" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Estándar (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Estándar (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Suavizado (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "Suavizado (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "El motor no soporta el nivel de debug '%s'" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Menú" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Saltar" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pausar" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Saltar frase" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "Error al ejecutar el juego:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "No se ha podido encontrar ningún motor capaz de ejecutar el juego" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "Ningún error" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "No se han encontrado datos de juego" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "ID del juego no soportada" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "Modo de color no soportado" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "Permiso de lectura denegado" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "Permiso de escritura denegado" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "La ruta no existe" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "La ruta no es un directorio" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "La ruta no es un archivo" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "Imposible crear el archivo" -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "Fallo de lectura" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Fallo en la escritura de datos" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "No se ha encontrado un plugin adecuado" -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "El plugin del motor no es compatible con partidas guardadas" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "Argumento no válido de la línea de comando" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "Error desconocido" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules verde" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules ámbar" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules verde" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules ámbar" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "~R~eanudar" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~C~argar" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~G~uardar" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~O~pciones" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~A~yuda" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "Acerca ~d~e" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "~V~olver al lanzador" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~V~olver al lanzador" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Guardar partida" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Guardar" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~S~í" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "~C~ancelar" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~T~eclas" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "Modo de vídeo actual:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "Corrección de aspecto" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~A~nterior" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "Si~g~uiente" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "Cerra~r~" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "Comandos básicos de teclado:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "Pantalla de Guardar / Cargar" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "Saltar frase" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "Saltar escena" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Espacio" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "Pausar el juego" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "Cargar partida 1-10" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "Guardar partida 1-10" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Salir" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Enter" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "Activar pantalla completa" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "Subir / Bajar el volumen de la música" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "Aumentar / Disminuir la vel. de texto" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "Simular botón izquierdo del ratón" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "Simular botón derecho del ratón" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "Comandos especiales de teclado:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "Mostrar / Ocultar consola" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "Iniciar debugger" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "Mostrar consumo de memoria" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "Ejecutar en modo rápido (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "Ejecutar en modo muy rápido (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "Captura de ratón" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "Alternar entre filtros gráficos" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "Aumentar / Disminuir factor de escalado" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "Corrección de aspecto" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* No se recomienda utilizar" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " ctrl-f y ctrl-g, ya que pueden" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr " provocar cuelgues o un" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +#, fuzzy +msgid " or incorrect game behavior." msgstr " funcionamiento incorrecto del juego" -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "Tejer hechizos con el teclado:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "Controles básicos:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "Empujar" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "Tirar" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "Dar" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "Abrir" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "Ir a" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "Coger" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "Usar" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "Leer" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "Cambiar personaje" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "Encender" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "Apagar" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "Ir a" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "Recoger" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "Qué es" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "Abrir con llave" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "Ponerse" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "Quitarse" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "Arreglar" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "Cambiar" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "Mirar" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "Hablar" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "Viajar" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "Henry / Indy" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "Tocar C menor con el bastón" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "Tocar D con el bastón" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "Tocar E con el bastón" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "Tocar F con el bastón" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "Tocar G con el bastón" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "Tocar A con el bastón" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "Tocar B con el bastón" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "Tocar C mayor con el bastón" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "Empujar" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "Tirar" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "Hablar con" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "Mirar" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "Encender" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "Apagar" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "Arriba" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "Seleccionar diálogo anterior" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "Abajo" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "Seleccionar diálogo siguiente" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "Caminar" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "Inventario" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "Objeto" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "Blanco y negro / Color" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "Ojos" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Lengua" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "Puñetazo" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "Patada" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "Examinar" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "Cursor normal" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Comm" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "Guardar / Cargar / Opciones" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "Otros controles:" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "Inventario:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "Subir" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "Bajar" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "Objeto superior izquierdo" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "Objeto inferior izquierdo" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "Objeto superior derecho" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "Objeto inferior derecho" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "Objeto izquierdo del medio" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "Objeto derecho del medio" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "Cambiar personaje:" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "Segundo chaval" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "Tercer chaval" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "Controles de lucha (tecl. num.)" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "Retroceder" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "Bloqueo alto" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "Bloqueo medio" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "Bloqueo bajo" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "Puñetazo alto" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "Puñetazo medio" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "Puñetazo bajo" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Válidos cuando Indy está a la izquierda." -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "Cuando Indy está a la derecha," -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "7, 4 y 1 se cambian por" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "9, 6 y 3, respectivamente." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "Controles del biplano (tecl. num.)" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "Volar arriba y a la izquierda" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "Volar a la izquierda" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "Volar abajo y a la izquierda" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "Volar arriba" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "Volar recto" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "Volar abajo" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "Volar arriba y a la derecha" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "Volar a la derecha" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "Volar abajo y a la derecha" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1687,7 +1791,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1698,7 +1802,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1709,7 +1813,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " @@ -1719,266 +1823,495 @@ msgstr "" "permite. Para jugar, ve a 'Añadir juego' en el menú de inicio de ScummVM y " "selecciona el directorio 'Maniac', dentro del directorio de DOTT." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "Modo ~Z~ip activado" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "Tra~n~siciones activadas" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "Efecto ag~u~a activado" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Cargar partida:" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Cargar" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"Fallo al cargar desde el archivo:\n" +"\n" +"%s" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"Fallo al guardar en el archivo:\n" +"\n" +"%s" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"Fallo al guardar en el archivo:\n" +"\n" +"%s" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"Fallo al guardar en el archivo:\n" +"\n" +"%s" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "Guardar partida" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "Cargar juego:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "Guardar partida" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "Emulador OPL de MAME" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "Emulador OPL de DOSBox" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "Sin música" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Emulador de Amiga Audio" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "Emulador de AdLib" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Emulador de Apple II GS (NO IMPLEMENTADO)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "Emulador de C64 Audio" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "Iniciando emulador de MT-32" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "Emulador de MT-32" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "Emulador del altavoz de PC" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "Emulador de IBM PCjr" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "Emulador de FM Towns" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Asignación de teclas:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr "(Activa)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr "(General)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr "(Juego)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "Windows MIDI" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "Menú principal de ScummVM" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "Modo para ~z~urdos" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "Controles para pelear de ~I~ndy" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Mostrar el cursor" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "Pegar a los bordes" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Compensación X del toque" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Compensación Y del toque" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "Activar el sistema de control tipo trackpad de los portátiles" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "Un toque para clic izquierdo, dos para clic derecho" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Sensibilidad" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "Escalado inicial de la pantalla superior:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Escalado de la pantalla principal:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "Escalado por hardware (rápido, pero de baja calidad)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "Escalado por software (buena calidad, pero más lento)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Sin escalado (debes desplazar la pantalla a los lados)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Brillo:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "Sonido de alta calidad (más lento) (reinicio)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Desactivar apagado" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "Modo Touchpad activado." + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "Modo Touchpad desactivado." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "Modo Touchpad activado." -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "Modo Touchpad desactivado." -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Normal (sin reescalado)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "Corrección de aspecto" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "Corrección de aspecto" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +#, fuzzy +msgid "Active graphics filter:" +msgstr "Alternar entre filtros gráficos" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "Renderizado:" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL Normal" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "OpenGL Conservar" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL Original" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "Modo de vídeo actual:" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Arriba" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "Abajo" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "Izquierda" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "Derecha" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Clic izquierdo" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Clic derecho" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Zona" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "Multifunción" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "Cambiar personaje" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "Saltar texto" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Modo rápido" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Debugger" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Menú general" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "Teclado virtual" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Asignación de teclas" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "¿Quieres salir?" @@ -2099,134 +2432,196 @@ msgid "Network down" msgstr "Red desconectada" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "Inicializando red" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +#, fuzzy +msgid "Timeout while initializing network" msgstr "Se ha excedido el tiempo de inicialización de red" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "Red no inicializada (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Ocultar barra de tareas" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Mostrar teclado" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "Sonido activado/desactivado" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Clic derecho" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Mostrar/Ocultar cursor" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Vista libre" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Aumentar zoom" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Disminuir zoom" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Asignar teclas" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "Arriba" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "Abajo" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "Izquierda" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "Derecha" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "¿Quieres cargar o guardar el juego?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr "¿Seguro que quieres salir?" -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Teclado" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Rotar" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "Usando driver SDL" -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Pantalla" -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "¿Quieres realizar una búsqueda automática?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "Asignar acción 'Clic derecho'" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "" "Debes asignar una tecla a la acción 'Clic derecho' para jugar a este juego" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "Asignar acción 'Ocultar barra de tareas'" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" "Debes asignar una tecla a la acción 'Ocultar barra de tareas' para jugar a " "este juego" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "Asignar acción 'Zoom' (opcional)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "Asignar acción 'Disminuir zoom' (opcional)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "No olvides asignar una tecla a la acción 'Ocultar barra de tareas' para ver " "todo el inventario" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "¿Seguro que quieres borrar esta partida?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "Puñetazo" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "¿Quieres salir?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "Volumen" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "Volumen" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "" + +#~ msgid "Discovered %d new games." +#~ msgstr "Se han encontrado %d juegos nuevos." + +#~ msgid "Command line argument not processed" +#~ msgstr "Argumento no válido de la línea de comando" + +#~ msgid "FM Towns Emulator" +#~ msgstr "Emulador de FM Towns" + #~ msgid "Invalid Path" #~ msgstr "Ruta no válida" diff --git a/po/fr_FR.po b/po/fr_FR.po index e73d2c8345..1dca127df8 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: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2011-05-02 19:50+0100\n" "Last-Translator: Thierry Crozat <criezy@scummvm.org>\n" "Language-Team: French <scummvm-devel@lists.sf.net>\n" @@ -17,108 +17,118 @@ msgstr "" "Language: Francais\n" "Plural-Forms: nplurals=2; plural=n>1;\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(compilé sur %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "Options incluses:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Moteurs disponibles:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "Remonter" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Remonte d'un niveau dans la hiérarchie de répertoire" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "Remonter" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Annuler" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Choisir" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Fermer" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Clic de souris" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Afficher le clavier" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Changer l'affectation des touches" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Sélectionnez une action à affecter" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Affecter" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Selectionez une action et cliquez 'Affecter'" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Touche associée: %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Touche associée: aucune" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Selectionnez une action" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Appuyez sur la touche à associer" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Jeu" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -126,29 +136,29 @@ msgstr "" "ID compact du jeu utilisée pour identifier les sauvegardes et démarrer le " "jeu depuis la ligne de commande" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Nom:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "Nom complet du jeu" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Nom:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Langue:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" @@ -156,283 +166,283 @@ msgstr "" "Langue du jeu. Cela ne traduira pas en anglais par magie votre version " "espagnole du jeu." -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<defaut>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Plateforme:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "Plateforme pour laquelle votre jeu a été conçu" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Système:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Graphique" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "GFX" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "Utiliser des réglages graphiques spécifiques à ce jeux" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "Réglages spécifiques à ce jeux" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "Audio" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "Utiliser des réglages audio spécifiques à ce jeux" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "Réglages spécifiques à ce jeux" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "Volume" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "Volume" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "Utiliser des réglages de volume sonore spécifiques à ce jeux" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "Réglages spécifiques à ce jeux" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "Utiliser des réglages MIDI spécifiques à ce jeux" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Réglages spécifiques à ce jeux" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "Utiliser des réglages MT-32 spécifiques à ce jeux" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Réglages spécifiques à ce jeux" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "Chemins" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "Chemins" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "Chemin du Jeu:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "Chemin du Jeu:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "Extra:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "Définie un chemin vers des données suplémentaires utilisées par le jeu" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "Extra:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "Sauvegardes:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "Définie l'emplacement où les fichiers de sauvegarde sont créés" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "Sauvegardes:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "Aucun" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Défaut" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "Choisir une banque de sons" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Sélectionner le répertoire contenant les données du jeu" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "Sélectionner un répertoire supplémentaire" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Sélectionner le répertoire pour les sauvegardes" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "Cet ID est déjà utilisé par un autre jeu. Choisissez en un autre svp." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~Q~uitter" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "Quitter ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "À ~P~ropos..." -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "À propos de ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~O~ptions..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Change les options globales de ScummVM" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "~D~émarrer" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "Démarre le jeu sélectionné" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~C~harger" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Charge une sauvegarde pour le jeu sélectionné" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "~A~jouter..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "" "Ajoute un jeu à la Liste. Maintenez Shift enfoncée pour un Ajout Massif" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "~E~diter..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Change les options du jeu" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "~S~upprimer" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "Supprime le jeu de la liste. Les fichiers sont conservés" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~A~jouter..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~diter..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~S~upprimer" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "Recherche dans la liste de jeux" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Filtre:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Effacer la valeur" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Charger le jeu:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Charger" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -440,207 +450,224 @@ msgstr "" "Voulez-vous vraiment lancer la détection automatique des jeux? Cela peut " "potentiellement ajouter un grand nombre de jeux." -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Oui" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "Non" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM n'a pas pu ouvrir le répertoire sélectionné." -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM n'a pas trouvé de jeux dans le répertoire sélectionné." -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Choisissez le jeu:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "Voulez-vous vraiment supprimer ce jeu?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "" "Le chargement de sauvegarde depuis le lanceur n'est pas supporté pour ce jeu." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM n'a pas pu trouvé de moteur pour lancer le jeu sélectionné." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Ajout Massif..." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Ajout Massif..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Ajouter..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Ajouter..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... en cours ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "Examen terminé!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "%d nouveaux jeux trouvés." +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "%d répertoires examinés ..." -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "%d nouveaux jeux trouvés ..." -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Jamais" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "Toutes les 5 mins" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "Toutes les 10 mins" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "Toutes les 15 mins" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "Toutes les 30 mins" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "Aucune" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "Mode graphique:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Mode de rendu:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "Mode spécial de tramage supporté par certains jeux" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Plein écran" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Correction du rapport d'aspect" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Corrige le rapport d'aspect pour les jeu 320x200" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "Détramage EGA" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "Active le détramage dans les jeux EGA qui le supporte" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Sortie Préféré:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "Sortie Audio:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 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:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 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:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Sortie Préféré:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "Sortie Audio:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "Émulateur AdLib:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib est utilisé pour la musique dans de nombreux jeux" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "Fréquence:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -648,64 +675,64 @@ msgstr "" "Une valeur plus élevée donne une meilleure qualité audio mais peut ne pas " "être supporté par votre carte son" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "Sortie GM:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 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:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "Ne pas utiliser la musique General MIDI" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "Utiliser le premier périphérique disponible" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "Banque de sons:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 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:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "Mode mixe AdLib/MIDI" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "Utiliser à la fois MIDI et AdLib" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "Gain MIDI:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "Sortie MT-32:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 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:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Roland MT-32 exacte (désactive l'émulation GM)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -713,195 +740,196 @@ msgstr "" "Vérifie si vous voulez utiliser un périphérique audio compatible Roland " "connecté à l'ordinateur" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Roland MT-32 exacte (pas d'ému GM)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "Activer le mode Roland GS" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "Désactiver la conversion des pistes MT-32 en General MIDI" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "Ne pas utiliser la musique Roland MT-32" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Dialogue:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Voix" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Sous-titres" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Les deux" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Vitesse des ST:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Dialogue:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Voix" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "Subs" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "V&S" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Affiche les sous-titres et joue les dialogues audio" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Vitesse des ST:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "Volume Musique:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "Musique:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Silence" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "Volume Bruitage:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "Volume des effets spéciaux sonores" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "Bruitage:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "Volume Dialogues:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "Dialogues:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "Thèmes:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "Thèmes:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 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:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "Plugins:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "Plugins:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Divers" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Divers" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Thème:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "Interface:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Sauvegarde auto:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Sauvegarde:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Touches" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "Langue:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Langue de l'interface graphique de ScummVM" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +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:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Sélectionner le répertoire pour les sauvegardes" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 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:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "Sélectionner le répertoire des thèmes d'interface" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Sélectionner le répertoire pour les fichiers suplémentaires" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "Sélectionner le répertoire des plugins" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -909,779 +937,855 @@ 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." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "Date inconnue" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "Heure inconnue" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "Durée de jeu inconnue" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Supprimer" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "Voulez-vous vraiment supprimer cette sauvegarde?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Date: " -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Heure: " -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Durée de jeu: " -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Sauvegarde sans nom" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Sélectionnez un Thème" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "GFX désactivé" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX désactivé" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Rendu Standard (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Standard (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Rendu Anti-crénelé (16 bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "Anti-crénelé (16 bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Le niveau de debug '%s' n'est pas supporté par ce moteur de jeu" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Menu" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Passer" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Mettre en pause" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Passer la phrase" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "Erreur lors de l'éxécution du jeu:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "Impossible de trouver un moteur pour exécuter le jeu sélectionné" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "Pas d'erreur" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "Fichier de donées introuvable" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "ID de jeu non supporté" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "Mode de couleurs non supporté" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "Véroullié en lecture" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "Verrouillé en écriture" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "Chemin inexistant" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "Chemin n'est pas un répertoire" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "Chemin n'est pas un fichier" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "Impossible de créer le fichier" -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "Echec de la lecture" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Echec de l'écriture des données" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "Aucun plugin n'a pu être trouvé pour ce jeu" -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "Ce moteur de jeu ne supporte pas les sauvegardes" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "Argument de ligne de commande non traité" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "Erreur inconnue" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules Vert" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules Ambre" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules Vert" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules Ambre" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "~R~eprendre" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~C~harger" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~S~auver" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~O~ptions" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~A~ide" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "À ~P~ropos" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "Retour au ~L~anceur" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "Retour au ~L~anceur" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Sauvegarde:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Sauver" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "~A~nnuler" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~T~ouches" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "Mode vidéo actuel" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "Changer correction du rapport d'aspect" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~P~récédent" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~S~uivant" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~F~ermer" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "Commandes clavier communes:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "Dialogue de Sauvegarde/Chargement" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "Passer la phrase" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "Passer la séquence" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Espace" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "Mettre en pause:" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "Charger sauvegarde 1-10:" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "Écrire sauvegarde 1-10:" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Quitter" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Entrer" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "Basculer en plein écran" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "Augmenter / Diminuer volume musique" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "Diminuer/Augmenter vitesse du texte" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "Simuler bouton gauche de la souris" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "Simuler bouton droit de la souris" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "Commandes clavier spéciales:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "Afficher/Cacher la console" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "Ouvrir le débugger" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "Afficher la consomation de mémoire" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "Jouer en mode rapide (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "Jouer en mode très rapide (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "Capturer/Libérer la souris" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "Changer de filtre graphique" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "Augmenter/Diminuer le facteur d'échelle" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "Changer correction du rapport d'aspect" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* Note que l'utilisation de crtl-f et" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " crtl-g n'est pas recommandé car" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr " elle peut causer des plantages ou" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +#, fuzzy +msgid " or incorrect game behavior." msgstr " un comportement incorrect du jeu" -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "Filage au clavier:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "Controles principaux du jeu:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "Pousser" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "Tirer" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "Donner" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "Ouvrir" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "Aller" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "Prendre" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "Utiliser" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "Lire" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "Changer" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "Allumer" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "Éteindre" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "Aller" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "Prendre" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "Qu'est-ce" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "Déverrouiller" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "Mettre" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "Enlever" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "Réparer" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "Commuter" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "Regarder" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "Parler" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "Voyager" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "Henry / Indy" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "jouer Do mineur sur la quenouille" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "jouer Ré sur la quenouille" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "jouer Mi sur la quenouille" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "jouer Fa sur la quenouille" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "jouer Sol sur la quenouille" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "jouer La sur la quenouille" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "jouer Si sur la quenouille" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "jouer Do Majeur sur la quenouille" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "Pousser" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "Tirer" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "Parler à" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "Regarder" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "Allumer" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "Éteindre" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "Touche Haut" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "Sélectionner le dialogue précédent" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "Touche Bas" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "Sélectionner le dialogue suivant" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "Marcher" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "Inventaire" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "Objet" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "Noir et Blanc / Couleur" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "Yeux" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Langue" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "Frapper" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "Coup de pied" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "Examiner" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "Curseur normal" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Comm" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "Sauvegarder / Charger / Options" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "Autres controles du jeu:" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "Inventaires:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "Faire défiler vers le haut" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "Faire défiler vers le bas" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "Élément en haut à gauche" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "Élément en bas à gauche" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "Élément en haut à droite" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "Élément en bas à droite" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "Élément au milieu à gauche" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "Élément au milieu à droite" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "Changer de personnage" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "Second enfant" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "Troisième enfant" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "Controles de combat (pavet numérique):" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "Pas en arrière" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "Bloquer haut" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "Bloquer milieu" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "Bloquer bas" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "Fraper haut" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "Frapper milieu" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "Frapper bas" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Correct quand Indy est à gauche." -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "Quand Indy est à droite, 7, 4 et 1" -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "sont interverties avec 9, 6 et 3" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "respectivement." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "Controles du biplane (paver numérique):" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "Voler vers le haut à gauche" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "Voler vers la gauche" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "Voler vers le bas à gauche" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "Voler vers le haut" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "Voler tout droit" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "Voler vers le bas" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "Voler vers le haut à droite" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "Voler vers la droite" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "Voler vers la bas à droite" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1692,7 +1796,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1703,7 +1807,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1714,7 +1818,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " @@ -1725,266 +1829,495 @@ msgstr "" "choisissez 'Ajouter...' dans le Lanceur de ScummVM et sélectionnez le " "répertoire 'Maniac Mansion' dans le répertoire du jeu Day Of The Tentacle." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "Mode ~Z~ip Activé" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "T~r~ansitions activé" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "~E~ffets de l'Eau Activés" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Charger le jeu:" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Charger" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"Échec du chargement de l'état du jeu depuis le fichier:\n" +"\n" +"%s" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"Échec de l'enregistrement de l'état du jeu dans le fichier:\n" +"\n" +"%s" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"Échec de l'enregistrement de l'état du jeu dans le fichier:\n" +"\n" +"%s" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"Échec de l'enregistrement de l'état du jeu dans le fichier:\n" +"\n" +"%s" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "Sauvegarde:" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "Charger le jeu:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "Sauvegarde:" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "Émulateur MAME OPL" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "Émulateur DOSBox OPL" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "Pas de musique" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Émulateur Amiga Audio" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "Émulateur AdLib" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Émulateur Apple II GS (PAS IMPLÉMENTÉ)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "Émulateur C64 Audio" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "Initialisation de l'Émulateur MT-32" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "Émulateur MT-32" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "Émulateur Haut Parleur PC" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "Émulateur IBM PCjr" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "Émulateur FM Towns" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Affectation des touches:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr "(Actif)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr "(Global)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr "(Jeu)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "MIDI Windows" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "Menu Principal ScummVM" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "Mode ~G~aucher" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "Contrôle des combats d'~I~ndy" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Afficher le curseur de la souris" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "Aligner sur les bords" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Décalage X du toucher" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Décallage Y du toucher" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "Activer le contrôle du curseur de type trackpad" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "Toucher pour un clic gauche, toucher deux fois pour un clic droit" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Sensibilité" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "Échelle initiale de l'écran du haut" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Échelle de l'écran principal" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "Mise à l'echelle matérielle (rapide mais qualité faible)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "Mise à l'échelle logicielle (bonne qualité mais plus lent)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Sans changement d'échelle (vous devez faire défiler l'écran)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Luminosité:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "Audio haute qualité (plus lent) (redémarrer)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Désactivé l'extinction" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "Mode touchpad activé" + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "Mode touchpad désactivé" + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "Mode touchpad activé" -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "Mode touchpad désactivé" -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Normal (échelle d'origine)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "Changer correction du rapport d'aspect" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "Changer correction du rapport d'aspect" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +#, fuzzy +msgid "Active graphics filter:" +msgstr "Changer de filtre graphique" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "Mode de rendu:" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL Normal" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "OpenGL Préserve" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL Originel" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "Mode vidéo actuel" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Haut" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "Bas" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "Gauche" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "Droite" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Clic Gauche" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Clic Droit" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Zone" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "Fonction Multiple" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "Changement de personnage" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "Sauter le texte" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Mode rapide" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Debugger" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Menu global" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "Clavier virtuel" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Affectation des touches" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "Voulez-vous quitter?" @@ -2105,135 +2438,197 @@ msgid "Network down" msgstr "Réseau déconnecté" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "Initialisation du réseau" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +#, fuzzy +msgid "Timeout while initializing network" msgstr "Dépassement du délai lors de l'initialisation du réseau" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "Réseau non initialisé (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Caché la barre d'outils" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Afficher le clavier" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "Audio marche/arrêt" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Clic droit" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Afficher/Cacher le curseur" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Regarder autour" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Dézoomer" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Zoomer" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Affecter les touches" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "Haut" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "Bas" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "Gauche" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "Droit" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "Voulez-vous charger ou enregistrer le jeu?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr "Voulez-vous vraiment quitter?" -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Clavier" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Pivoter" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "Utilise le pilote SDL" -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Affichage" -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "Voulez-vous exécuter une recherche automatique?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "Affecter l'action 'Clic Droit'" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "" "Vous devez affecter une touche à l'action de 'Clic Droit' pour pouvoir jouer " "à ce jeu" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "Affecter l'action 'Cacher Bar d'Outils'" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" "Vous devez affecter une touche à l'action 'Cacher Bar d'Outils' pour pouvoir " "jouer à ce jeu" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "Affecter l'action 'Dézoomer' (optionnelle)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "Affecter l'action 'Zoomer' (optionnelle)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "Noubliez pas d'affecter une touche à l'action 'Cacher Bar d'Outils' pour " "pouvoir voir entièrement l'inventaire" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "Voulez-vous vraiment supprimer cette sauvegarde?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "Frapper" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "Voulez-vous quitter?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "Volume" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "Volume" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "" + +#~ msgid "Discovered %d new games." +#~ msgstr "%d nouveaux jeux trouvés." + +#~ msgid "Command line argument not processed" +#~ msgstr "Argument de ligne de commande non traité" + +#~ msgid "FM Towns Emulator" +#~ msgstr "Émulateur FM Towns" + #~ msgid "Invalid Path" #~ msgstr "Chemin Invalide" diff --git a/po/hu_HU.po b/po/hu_HU.po index 2a2256b7a1..d392369220 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: 2011-04-22 19:33+0100\n" -"PO-Revision-Date: 2011-04-23 15:38+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" +"PO-Revision-Date: 2011-06-12 07:17+0100\n" "Last-Translator: Gruby <grubycza@hotmail.com>\n" "Language-Team: Hungarian\n" "MIME-Version: 1.0\n" @@ -20,419 +20,429 @@ msgstr "" "X-Poedit-Country: HUNGARY\n" "X-Poedit-SourceCharset: iso-8859-1\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(készült %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "Lefordított összetevõk:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Támogatott játékmotorok:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "Feljebb" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Vissza az elõzõ könyvtárszintre" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "Feljebb" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Mégse" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Választ" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Bezár" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Egérkattintás" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Billentyûzet beállítások" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Billentyûk átállítása" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Válassz mûveletet a kiosztáshoz" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Kiosztás" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Válassz mûveletet és katt a 'Kiosztás'-ra" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Társított billentyû: %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Társított billentyû: nincs" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Válassz egy mûveletet" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Nyomj egy billentyût a társításhoz" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Játék" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" msgstr "" "Rövid játékazonosító a játékmentésekhez és a játék parancssori futtatásához" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Név:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "A játék teljes neve" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Név:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Nyelv:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" msgstr "" "A játék nyelve. Ne állítsd át a pl. Spanyol nyelvû játékodat Angolra nyelvre" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<alapértelmezett>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Platform:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "Platform amire a játékot eredetileg készítették" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Platform:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Grafika" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "GFX" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "Globális grafikai beállítások felülbírálása" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "Globális grafikai beállítások felülbírálása" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "Audió" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "Globális audió beállítások felülbírálása" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "Globális audió beállítások felülbírálása" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "Hangerõ" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "Hangerõ" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "Globális hangerõbeállítások felülbírálása" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "Globális hangerõbeállítások felülbírálása" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "Globális MIDI beállítások felülbírálása" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Globális MIDI beállítások felülbírálása" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "Globális MT-32 beállítások felülbírálása" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 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:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "Mappák" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "Mappák" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "Játék Mappa:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "Játék Mappa:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "Extra Mappa:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "Mappa kiválasztás a játékok kiegészítõ fájljaihoz" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "Extra Mappa:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "Mentés Mappa:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "Játékmentések helyének meghatározása" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "Mentés Mappa:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "Nincs" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Alapértelmezett" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "SoundFont kiválasztás" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Játékok helyének kiválasztása" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "Válassz mappát a játék kiegészítõkhöz" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Válaszz játékmentéseknek mappát" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "Ez a játékazonosító ID már foglalt, Válassz egy másikat." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "Kilépés" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "ScummVM bezárása" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "Névjegy" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "ScummVM névjegy" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~O~pciók..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Globális ScummVM opciók cseréje" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "Indítás" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "A választott játék indítása" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "Betöltés" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Kimentett játékállás betöltése" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "Játék hozzáadás" -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "Tratsd lenyomva a Shift-et a Masszív módhoz" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "Játékopciók" -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Játék beállítások megváltoztatása" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "Játék törlése" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "Törli a játék nevét a listáról. A játékfájlok megmaradnak" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "Játék hozzáadás" -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "Játékopciók" -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "Játék törlése" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "Keresés a játéklistában" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Keresés:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Érték törlése" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Játék betöltése:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Betöltés" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -440,266 +450,283 @@ msgstr "" "Biztos hogy futtatod a Masszív játékdetektort? Ez potenciálisan sok játékot " "hozzáad a listához." -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Igen" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "Nem" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM nem tudja megnyitni a választott mappát!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "A ScummVM nem talált egy játékot sem a választott mappában!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Válassztott játék:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "Biztosan törölni akarod ezt a játékkonfigurációt?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "Ez a játék nem támogatja a játékállás betöltést az indítóból." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM nem talált olyan játékmotort ami a választott játékot támogatja!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Masszív mód..." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Masszív mód..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Játék hozzáadás" -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Játék hozzáadás" -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... folyamatban ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "Vizsgálat kész!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "%d Új játékot találtam." +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/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "%d Mappa átvizsgálva..." -#: gui/massadd.cpp:254 +#: gui/massadd.cpp:253 #, c-format -msgid "Discovered %d new games ..." -msgstr "%d Új játékot találtam." +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/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Soha" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "5 percenként" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "10 percenként" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "15 percenként" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "30 percenként" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "Nincs" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "Néhány grafikus opció változtatása sikertelen:" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "a videómód nem változott." + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "a teljesképernyõs beállítás nem változott" + +#: gui/options.cpp:396 +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:705 msgid "Graphics mode:" msgstr "Grafikus mód:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Kirajzolás mód:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 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:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Teljesképernyõs mód:" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Képméretarány korrekció" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Helyes oldalarány a 320x200 játékokhoz" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "EGA szinjavítás" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "EGA színjavítás támogatott EGA játékokban" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Elsõdleges eszköz:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "Zene eszköz:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 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:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 msgid "Specifies output sound device or sound card emulator" msgstr "Hangeszköz vagy hangkártya emulátor beállítások" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Elsõdleges eszk.:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "Zene eszköz:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "AdLib emulátor:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib meghajtót sok játék használja zenéhez" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "Kimeneti ráta:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 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:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "GM Eszköz:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "Specifies default sound device for General MIDI output" msgstr "Alapértelmezett hangeszköz General MIDI kimenethez" -#: gui/options.cpp:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "Ne használj General MIDI zenét" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "Elsõ elérhetõ eszköz használata" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 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:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "Vegyes AdLib/MIDI mód" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "MIDI és AdLib hanggenerátorok használata" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "MIDI erõsítés:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "MT-32 Eszköz:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 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:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Roland MT-32 Hardver (GM emuláció tiltva)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -707,190 +734,190 @@ msgstr "" "Jelöld be, ha hardveres Roland-Kompatibilis hangeszköz van csatlakoztatva a " "gépedhez és használni akarod" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Roland MT-32 Hardver (GM emuláció nincs)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "Roland GS Mód engedélyezve" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "General MIDI leképezés Roland MT-32 zenés játékokhoz kikapcsolva" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "Ne használj Roland MT-32 zenét" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Szöveg és beszéd:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Csak beszéd" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Csak felirat" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Mind" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Felirat sebesség:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Felirat és beszéd:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Besz" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "Text" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "Mind" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Hang és feliratok megjelenítése" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Felirat sebesség:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "Zene hangerõ:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "Zene hangerõ:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Összes némítása" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "SFX hangerõ:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "Speciális hangeffektusok hangereje" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "SFX hangerõ:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "Beszéd hangerõ:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "Beszéd hangerõ:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "Téma Mappa:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "Téma Mappa:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 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:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "Plugin Mappa:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "Plugin Mappa:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Vegyes" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Vegyes" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Téma:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "GUI Renderelõ:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Automentés:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Automentés:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Billentyûk" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "GUI nyelve:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "A ScummVM GUI nyelve" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +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:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Válassz játékmentés mappát" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 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:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "GUI téma mappa kiválasztása" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Mappa választás az extra fájloknak" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "Plugin mappa kiválasztása" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -898,779 +925,854 @@ 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." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "Dátum nincs mentve" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "Idõ nincs mentve" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "Játékidõ nincs mentve" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Töröl" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "Biztos hogy törölni akarod ezt a játékállást?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Dátum:" -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Idõ:" -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Játékidõ:" -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Névtelen játékállás" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Válassz témát" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "GFX letiltva" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX letiltva" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Standard leképezõ (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Standard (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Élsimításos leképezõ (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "Élsimított (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "A motor nem támogatja a '%s' debug szintet" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Menü" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Tovább" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Szünet" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Sor átlépése" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "Hiba a játék futtatásakor:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "Nem található olyan játékmotor ami a választott játékot támogatja" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "Nincs hiba" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "Játék adat nem található" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "Játék id nem támogatott" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "Nem támogatott színmód" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "Olvasás hozzáfárés megtagadva" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "Írás hozzáférés megtagadva" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "Mappa nem létezik" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "Mappa nem egy könyvtár" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "Mappa nem egy fájl" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "Fájl nem hozható létre" -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "A Beolvasott adat hibás" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Kiírt adat hibás" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "Nem található alkalmas motor plugin" -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "A motor nem támogatja a játékállás mentését" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "Parancssori paraméter nem mûködik" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "Ismeretlen hiba" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules Zöld" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules Sárga" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules Zöld" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules Sárga" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "A '%s' játék ismeretlennek tûnik." + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "Kérlek jelezd a ScummVM csapatnak a következõ adatokat, együtt a játék" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "címével és megbízható adataival játékverzió/nyelv(ek)/stb.:" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "A felismert játékverziód a használt fájlnévvel a %s egy változata." + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "Ha ez egy eredeti nem változtatott verzió, kérlek jelezd minden" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "elõzõleg kiírt információt a ScummVM csapatnak." + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "Folytatás" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "Betöltés" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "Mentés" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~O~pciók" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "Súgó" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "Névjegy" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "Visszatérés az indítóba" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "Visszatérés az indítóba" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Játék mentése:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Mentés" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "Mégse" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "Billentyük" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "Jelenlegi videómód:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "Méretarány korrekció engedélyezve" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "Elõzõ" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "Következõ" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "Bezár" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "Általános billentyûparancsok:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "Ment / Tölt dialógus" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "Szövegsor átugrása" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "Bevezetõ átugrása" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Szóköz" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "Szünet a játékban" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "1-10 Játékállás betöltése" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "1-10 Játékállás mentése" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Kilépés" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Enter" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "Teljesképernyõ kapcsoló" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "Zene hangerõ fel / le" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "Szövegsebesség gyors / lassú" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "Bal egérgomb szimuláció" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "Jobb egérgomb szimuláció" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "Speciális billentyûparancsok:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "Konzol be / ki kapcsolás" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "Hibakeresõ indítása" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "Memóriakihasználtság látszik" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "Futtatás gyors módban (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "Futtatás túlgyors módban (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "Egér rögzítés kapcsoló" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "Kapcsolás grafikus szûrõk között" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "Lépték növelés / csökkentés" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "Méretarány korrekció kapcsoló" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* Megjegyzés, ctrl-f és" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " ctrl-g használata nem javasolt" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr " mert rendszerösszeomlást vagy" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." -msgstr " hibás mûködést eredményezhet." +#: engines/scumm/help.cpp:110 +msgid " or incorrect game behavior." +msgstr " vagy hibás játékmûködést okoz." -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "Forgó draftok a billentyûzeten:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "Fõ játékvezérlõk:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "Tol" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "Húz" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "Ad" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "Nyit" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "Menj" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "Vesz" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "Használ" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "Olvas" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "Új gyerek" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "Bekapcsol" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "Kikapcsol" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "Odamegy" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "Felvesz" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "Mi ez" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "Felold" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "Felvesz" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "Letesz" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "Javít" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "Kapcsol" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "Megnéz" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "Beszél" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "Utazás" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "Henrytõl / Indytõl" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "C moll játék a bottal" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "Játék D-ben a bottal" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "Játék E-ben a bottal" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "Játék F-ben a bottal" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "Játék G-ben a bottal" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "Játék A-ban a bottal" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "Játék B-ben a bottal" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "C dúr játék a bottal" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "Megtol" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "húz (Ránt)" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "Beszél" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "Megnézi" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "Bekapcsol" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "Kikapcsol" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "FelGomb" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "Elõzõ dialógus kiemelése" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "LeGomb" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "Következõ dialógus kiemelése" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "Megy" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "Tárgylista" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "Tárgy" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "Fekete fehér / Színes" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "Szemek" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Nyelv" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "Megüt" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "Megüt" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "Vizsgál" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "Szabvány kurzor" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Comm" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "Ment / Tölt / Opciók" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "Egyébb játékvezérlõk:" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "Tárgylista:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "Listagörgetés fel" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "Listagörgetés le" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "Bal felsõ tárgy" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "Bal alsó tárgy" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "Jobb felsõ tárgy" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "Jobb alsó tárgy" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "Bal középsõ tárgy" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "Jobb középsõ tárgy" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "Karakterek cseréje:" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "Második gyerek" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "Harmadik gyerek" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "Verekedés irányítók (numpad):" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "Hátralép" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "Felsõ védés" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "Védés középen" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "Alsó védés" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "Felsõ ütés" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "Ütés középen" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "Alsó ütés" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Indytõl balra levõ." -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "Indytõl jobbra levõ," -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "7, 4, és 1 átkapcsolva" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "9, 6, és 3-ra, egyenként." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "Repülõ vezérlõk (numpad):" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "Balra fel repülés" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "Balra repülés" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "Balra le repülés" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "Repülés fel" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "Repülés elõre" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "Repülés le" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "Jobbra fel repülés" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "Jobbra repülés" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "Jobbra le repülés" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1681,7 +1783,7 @@ msgstr "" "\n" "%s fájlba nem sikerült" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1692,7 +1794,7 @@ msgstr "" "\n" "%s fájlból nem sikerült" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1703,7 +1805,7 @@ msgstr "" "\n" "%s fájlba elkészült" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " @@ -1713,266 +1815,497 @@ msgstr "" "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." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "~Z~ip Mód aktiválva" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "Átmenetek engedélyezve" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "Oldal~D~obás" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "~S~ Térkép" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "Vízeffektus engedélyezve" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Játékmenet visszaállítása:" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Visszaállítás" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"Játékállás betöltése:\n" +"\n" +"%s fájlból nem sikerült" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"Játékállás mentése:\n" +"\n" +"%s fájlba nem sikerült" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"Játékállás mentése:\n" +"\n" +"%s fájlba nem sikerült" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"Játékállás mentése:\n" +"\n" +"%s fájlba nem sikerült" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "Játék mentése:" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "Játék betöltése:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "Játék mentése:" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "MAME OPL emulátor" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "DOSBox OPL emulátor" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, fuzzy, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" +"A '%s' kiválasztott hangeszköz nem elérhetõ. Bõvebb információ a " +"naplófájlban. Következõ elérhetõ eszköz keresése..." + +#: audio/mididrv.cpp:216 +#, fuzzy, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" +"A '%s' kiválasztott hangeszköz nem elérhetõ. Bõvebb információ a " +"naplófájlban. Következõ elérhetõ eszköz keresése..." + +#: audio/mididrv.cpp:250 +#, fuzzy, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" +"A '%s' elsõdleges hangeszköz nem elérhetõ. Bõvebb információ a naplófájlban. " +"Következõ elérhetõ eszköz keresése..." + +#: audio/mididrv.cpp:265 +#, fuzzy, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" +"A '%s' elsõdleges hangeszköz nem elérhetõ. Bõvebb információ a naplófájlban. " +"Következõ elérhetõ eszköz keresése..." + +#: audio/null.h:43 msgid "No music" msgstr "Nincs zene" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Amiga Audió Emulátor" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "AdLib Emulátor" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Apple II GS Emulátor (NEM TÁMOGATOTT)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "C64 Audio Emulátor" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" -msgstr "MT-32 Emulátor inicializálás" +#: audio/softsynth/mt32.cpp:329 +msgid "Initializing MT-32 Emulator" +msgstr "MT-32 Emulátor inicializálása" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "MT-32 Emulátor" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "PC Speaker Emulátor" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "IBM PCjr Emulátor" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "FM Towns Emulátor" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Billentyûzet kiosztás:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr " (Aktív)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr " (Globális)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr " (Játék)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "Windows MIDI" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "ScummVM Fõmenü" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "Balkezes mód:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "~I~ndy fight controls" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Egérkurzor látszik" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "Élekre illesztés" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Touch X Eltolás" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Touch Y Eltolás" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "Laptop trackpad stílusu kurzor vezérlõ" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "Érintés balkatt, duplaérintés jobbkatt" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Érzékenység" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "Képernyõ felsõ kezdõpont:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Fõképernyõ átméretezés:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "Hardveres átméretezés (gyors, alacsony minõség)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "Szoftveres átméretezés (jó minõség, lassú)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Eredeti (görgethetsz jobbra és balra)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Fényerõ:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "Jóminõségü audió (lassabb)(újraindítás)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Leállítás tiltva" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "Touchpad mód engedélyezve." + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "Touchpad mód letiltva." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "Touchpad mód engedélyezve." -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "Touchpad mód letiltva." -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Normál (nincs átméretezés)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normál (nincs átméretezés)" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +msgid "Enabled aspect ratio correction" +msgstr "Méretarány korrekció engedélyezve" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +msgid "Disabled aspect ratio correction" +msgstr "Méretarány korrekció letiltva" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +msgid "Active graphics filter:" +msgstr "Aktív grafikus szûrõk:" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +msgid "Windowed mode" +msgstr "Ablakos mód" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL Normál" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "OpenGL Megtartott" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL Eredeti" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +msgid "Current display mode" +msgstr "Jelenlegi videómód" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "Aktuális méretezés" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "Aktív filter mód: Lineáris" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "Aktív filter mód: Közelítõ" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Fel" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "Le" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "Bal" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "Jobb" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Bal katt" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Jobb katt" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Zóna" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "Többfunkciós" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "Karakter csere" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "Szöveg átugrása" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Gyors mód" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Hibakeresõ" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Globális menü" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "Virtuális billentyûzet" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Billentyû kiosztás" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "Ki akarsz lépni ?" @@ -2093,131 +2426,189 @@ msgid "Network down" msgstr "Nincs hálózat" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" -msgstr "Hálózat inicializálás" +msgid "Initializing network" +msgstr "Hálózat inicializálása" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" -msgstr "Idõtúllépés a hálózat inicializálásnál" +msgid "Timeout while initializing network" +msgstr "Idõtúllépés a hálózat inicializálásakor" #: backends/platform/wii/options.cpp:186 #, c-format -msgid "Network not initialised (%d)" -msgstr "Hálózat nincs inicializálva (%d)" +msgid "Network not initialized (%d)" +msgstr "(%d) Hálózat nincs inicializálva" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Eszköztár rejtés" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Billentyûzet megjelenítés" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "Hang be/ki" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Jobb katt" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Kurzor be/ki" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Szabad nézet" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Nagyítás" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Kicsinyítés" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Kapcsolódás kulcsok" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "Kurzor Fel" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "Kurzor Le" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "Kurzor Bal" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "Kurzor Jobb" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "Játékállás betöltése vagy mentése?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr " Biztos hogy ki akarsz lépni ? " -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Billentyûzet" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Forgatás" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "SDL meghajtó használata" -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Kijelzõ" -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "El akarod kezdeni az automatikus vizsgálatot ?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "Jobbkatt mûvelet gomb" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "Válassz egy billentyût a 'Jobbkatt' mûvelethez" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "Eszköztár rejtés gomb" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "Válassz egy billentyût az 'Eszköztár rejtés' mûvelethez" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "Nagyítás mûvelet (opcionális)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "Kicsinyítés mûvelet (opcionális)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "Ne felejts billentyût társítani az 'Eszköztár rejtés' mûvelethez, hogy lásd " "a teljes listát" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "Biztos hogy törölni akarod ezt a játékállást?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "Megüt" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "Ki akarsz lépni ?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "Érintõképernyõ 'Tap Mód' - Bal katt" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "Érintõképernyõ 'Tap Mód' - Jobb katt" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "Érintõképernyõ 'Tap Mód' - Lebegõ (Nincs katt)" + +#: backends/events/gph/gph-events.cpp:390 +msgid "Maximum Volume" +msgstr "Maximum Hangerõ" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "Hangerõ növelése" + +#: backends/events/gph/gph-events.cpp:398 +msgid "Minimal Volume" +msgstr "Minimum Hangerõ" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "Hangerõ csökkentése" + +#~ msgid "Discovered %d new games." +#~ msgstr "%d Új játékot találtam." + +#~ msgid "Command line argument not processed" +#~ msgstr "Parancssori paraméter nem mûködik" + +#~ msgid "FM Towns Emulator" +#~ msgstr "FM Towns Emulátor" + #~ msgid "Invalid Path" #~ msgstr "Érvénytelen mappa" diff --git a/po/it_IT.po b/po/it_IT.po index c8e9b8dc55..24f09e349f 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: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2011-04-24 14:46+0100\n" "Last-Translator: Matteo 'Maff' Angelino <matteo.maff at gmail dot com>\n" "Language-Team: Italian\n" @@ -16,108 +16,118 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Language: Italiano\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(build creata il %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "Funzionalità compilate in:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Motori disponibili:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "Cartella superiore" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Vai alla cartella superiore" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "Su" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Annulla" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Scegli" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Chiudi" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Clic del mouse" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Mostra tastiera" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Riprogramma tasti" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Scegli un'azione da mappare" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Mappa" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Seleziona un'azione e clicca 'Mappa'" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Tasto associato: %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Tasto associato: nessuno" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Seleziona un'azione" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Premi il tasto da associare" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Gioco" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -125,311 +135,311 @@ msgstr "" "Breve identificatore di gioco utilizzato per il riferimento a salvataggi e " "per l'esecuzione del gioco dalla riga di comando" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Nome:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "Titolo completo del gioco" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Nome:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Lingua:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" msgstr "" "Lingua del gioco. Un gioco inglese non potrà risultare tradotto in italiano" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<predefinito>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Piattaforma:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "La piattaforma per la quale il gioco è stato concepito" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Piattaf.:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Grafica" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "Grafica" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "Ignora le impostazioni grafiche globali" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "Ignora le impostazioni grafiche globali" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "Audio" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "Ignora le impostazioni audio globali" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "Ignora le impostazioni audio globali" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "Volume" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "Volume" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "Ignora le impostazioni globali di volume" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "Ignora le impostazioni globali di volume" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "Ignora le impostazioni MIDI globali" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Ignora le impostazioni MIDI globali" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "Ignora le impostazioni MT-32 globali" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Ignora le impostazioni MT-32 globali" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "Percorsi" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "Perc." -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "Percorso gioco:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "Perc. gioco:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "Percorso extra:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "Specifica il percorso di ulteriori dati usati dal gioco" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "Perc. extra:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "Salvataggi:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "Specifica dove archiviare i salvataggi" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "Salvataggi:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "Nessuno" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Predefinito" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "Seleziona SoundFont" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Seleziona la cartella contenente i file di gioco" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "Seleziona la cartella di gioco aggiuntiva" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Seleziona la cartella dei salvataggi" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "Questo ID di gioco è già in uso. Si prega di sceglierne un'altro." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "C~h~iudi" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "Chiudi ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "~I~nfo..." -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "Informazioni su ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~O~pzioni..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Modifica le opzioni globali di ScummVM" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "~G~ioca" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "Esegue il gioco selezionato" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~C~arica..." -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Carica un salvataggio del gioco selezionato" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "~A~ggiungi gioco..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "Tieni premuto Shift per l'aggiunta in massa" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "~M~odifica gioco..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Modifica le opzioni di gioco" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "~R~imuovi gioco" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "Rimuove il gioco dalla lista. I file del gioco rimarranno intatti" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~A~gg. gioco..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~M~odif. gioco..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~R~im. gioco" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "Cerca nella lista dei giochi" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Cerca:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Cancella" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Carica gioco:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Carica" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -437,210 +447,227 @@ msgstr "" "Vuoi davvero eseguire il rilevatore di giochi in massa? Potrebbe aggiungere " "un numero enorme di giochi." -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Sì" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "No" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM non ha potuto aprire la cartella specificata!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM non ha potuto trovare nessun gioco nella cartella specificata!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Scegli il gioco:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "Sei sicuro di voler rimuovere questa configurazione di gioco?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "" "Questo gioco non supporta il caricamento di salvataggi dalla schermata di " "avvio." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM non ha potuto trovare un motore in grado di eseguire il gioco " "selezionato!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Agg. massa..." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Agg. in massa..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Agg. gioco..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Aggiungi gioco..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... progresso ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "Scansione completa!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "Rilevati %d nuovi giochi." +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "%d cartelle analizzate..." -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "Rilevati %d nuovi giochi..." -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Mai" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "ogni 5 minuti" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "ogni 10 minuti" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "ogni 15 minuti" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "ogni 30 minuti" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "Nessuno" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "Modalità:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Resa grafica:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "Modalità di resa grafica speciali supportate da alcuni giochi" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Modalità a schermo intero" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Correzione proporzioni" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Corregge le proporzioni dei giochi 320x200" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "Undithering EGA" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "Attiva undithering nei giochi EGA che lo supportano" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Disp. preferito:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "Dispositivo audio:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 msgid "Specifies preferred sound device or sound card emulator" msgstr "" "Specifica il dispositivo audio o l'emulatore della scheda audio preferiti" -#: gui/options.cpp:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 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:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Disp. preferito:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "Disposit. audio:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "Emulatore AdLib:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib è utilizzato per la musica in molti giochi" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "Frequenza:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -648,62 +675,62 @@ msgstr "" "Valori più alti restituiscono un suono di maggior qualità, ma potrebbero non " "essere supportati dalla tua scheda audio" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "Dispositivo GM:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "Specifies default sound device for General MIDI output" msgstr "Specifica il dispositivo audio predefinito per l'output General MIDI" -#: gui/options.cpp:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "Non utilizzare la musica General MIDI" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "Utilizza il primo dispositivo disponibile" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "SoundFont è supportato da alcune schede audio, Fluidsynth e Timidity" -#: gui/options.cpp:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "Modalità mista AdLib/MIDI" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "Utilizza generazione di suono sia MIDI che AdLib" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "Guadagno MIDI:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "Disposit. MT-32:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 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:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Roland MT-32 effettivo (disattiva emulazione GM)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -711,192 +738,193 @@ msgstr "" "Seleziona se vuoi usare il dispositivo hardware audio compatibile con Roland " "che è connesso al tuo computer" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Roland MT-32 effettivo (disat.emul.GM)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "Attiva la modalità Roland GS" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" "Disattiva la mappatura General MIDI per i giochi con colonna sonora Roland " "MT-32" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "Non utilizzare la musica Roland MT-32" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Testo e voci:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Voci" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Sottotitoli" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Entrambi" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Velocità testo:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Testo e voci:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Voci" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "Sub" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "Entr." -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Mostra i sottotitoli e attiva le voci" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Velocità testo:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "Volume musica:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "Volume musica:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Disattiva audio" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "Volume effetti:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "Volume degli effetti sonori" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "Volume effetti:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "Volume voci:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "Volume voci:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "Percorso tema:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "Perc. tema:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 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:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "Percorso plugin:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "Perc. plugin:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Varie" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Varie" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "Renderer GUI:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Autosalva:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Autosalva:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Tasti" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "Lingua GUI:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Lingua dell'interfaccia grafica di ScummVM" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +msgid "You have to restart ScummVM before your changes will take effect." msgstr "Devi riavviare ScummVM affinché le modifiche abbiano effetto." -#: gui/options.cpp:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Seleziona la cartella per i salvataggi" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 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:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "Seleziona la cartella dei temi dell'interfaccia" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Seleziona la cartella dei file aggiuntivi" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "Seleziona la cartella dei plugin" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -904,780 +932,856 @@ msgstr "" "Il tema che hai selezionato non supporta la lingua attuale. Se vuoi " "utilizzare questo tema devi prima cambiare la lingua." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "Nessuna data salvata" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "Nessun orario salvato" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "Nessun tempo salvato" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Elimina" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "Sei sicuro di voler eliminare questo salvataggio?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Data: " -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Ora: " -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Tempo di gioco: " -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Salvataggio senza titolo" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Seleziona un tema" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "Grafica disattivata" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "Grafica disattivata" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Renderer standard (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Standard (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Renderer con antialiasing (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "Con antialiasing (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Il motore non supporta il livello di debug '%s'" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Menu" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Salta" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pausa" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Salta battuta" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "Errore nell'esecuzione del gioco:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "" "Impossibile trovare un motore in grado di eseguire il gioco selezionato" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "Nessun errore" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "Dati di gioco non trovati" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "ID di gioco non supportato" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "Modalità colore non supportata" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "Autorizzazione di lettura negata" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "Autorizzazione di scrittura negata" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "Il percorso non esiste" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "Il percorso non è una cartella" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "Il percorso non è un file" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "Impossibile creare il file" -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "Lettura dei dati fallita" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Scrittura dati fallita" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "Impossibile trovare un plugin idoneo" -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "Il plugin del motore non supporta i salvataggi" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "Argomento della linea di comando non eseguito" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "Errore sconosciuto" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules verde" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules ambra" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules verde" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules ambra" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "~R~ipristina" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~C~arica" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~S~alva" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~O~pzioni" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~A~iuto" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "~I~nfo" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "~T~orna a elenco giochi" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~V~ai a elenco giochi" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Salva gioco:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Salva" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "~A~nnulla" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~T~asti" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "Modalità video attuale:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "Cambia correzione proporzioni" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~P~recedenti" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~S~uccessivi" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~C~hiudi" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "Comandi da tastiera comuni:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "Finestra di salvataggio / caricamento" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "Salta battuta" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "Salta scena di intermezzo" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Spazio" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "Metti in pausa" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "Carica salvataggio 1-10" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "Salva nella posizione 1-10" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Esci" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Invio" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "Attiva / disattiva schermo intero" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "Volume musica su / giù" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "Testo più veloce / meno veloce" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "Simula clic sinistro del mouse" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "Simula clic destro del mouse" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "Comandi da tastiera speciali:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "Mostra/nascondi console" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "Avvia il debugger" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "Mostra consumo memoria" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "Esegui in modalità veloce (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "Esegui in modalità molto veloce (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "Attiva / disattiva ancoraggio del mouse" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "Cambia filtro grafico" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "Aumenta / diminuisci dimensioni" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "Cambia correzione proporzioni" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* Nota che l'utilizzo di ctrl-f e" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " ctrl-g non è consigliato perché" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr " potrebbe causare blocchi o un" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +#, fuzzy +msgid " or incorrect game behavior." msgstr " comportamento errato del gioco." -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "Tessere melodie da tastiera:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "Controlli principali di gioco:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "Premi" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "Tira" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "Dai" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "Apri" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "Vai verso" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "Prendi" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "Usa" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "Leggi" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "Cambia personaggio" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "Accendi" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "Spegni" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "Cammina verso" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "Raccogli" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "Che cos'è" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "Apri" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "Indossa" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "Togli" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "Ripara" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "Sposta" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "Guarda" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "Parla" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "Viaggio" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "A Henry / a Indy" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "suona Do (C) minore sul bastone" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "suona Re (D) sul bastone" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "suona Mi (E) sul bastone" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "suona Fa (F) sul bastone" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "suona Sol (G) sul bastone" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "suona La (A) sul bastone" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "suona Si (B) sul bastone" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "suona Do (C) maggiore sul bastone" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "Premi" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "Tira" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "Parla con" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "Esamina" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "Accendi" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "Spegni" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "Tasto su" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "Evidenzia dialogo precedente" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "Tasto giù" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "Evidenzia dialogo successivo" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "Cammina" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "Inventario" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "Oggetto" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "Bianco e nero / colori" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "Occhi" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Lingua" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "Pugno" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "Calcio" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "Esamina" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "Cursore normale" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Comm" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "Salva / Carica / Opzioni" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "Altre opzioni di gioco:" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "Inventario:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "Scorri lista verso l'alto" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "Scorri lista verso il basso" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "Oggetto in alto a sinistra" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "Oggetto in basso a sinistra" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "Oggetto in alto a destra" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "Oggetto in basso a destra" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "Oggetto al centro a sinistra" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "Oggetto al centro a destra" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "Cambio personaggio:" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "Secondo ragazzo" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "Terzo ragazzo" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "Controlli di combattimento (tastierino numerico):" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "Passo indietro" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "Para in alto" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "Para al centro" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "Para in basso" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "Colpisci in alto" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "Colpisci al centro" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "Colpisci in basso" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Questi sono i controlli quando" -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "Indy è sulla sinistra. Quando è" -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "sulla destra, 7, 4 e 1 sostituiscono" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "rispettivamente 9, 6 e 3." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "Controlli biplano (tastierino numerico):" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "Vola in alto a sinistra" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "Vola a sinistra" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "Vola in basso a sinistra" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "Vola in alto" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "Vola diritto" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "Vola in basso" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "Vola in alto a destra" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "Vola a destra" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "Vola in basso a destra" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1688,7 +1792,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1699,7 +1803,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1710,7 +1814,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " @@ -1721,266 +1825,495 @@ msgstr "" "principale di ScummVM e seleziona la cartella \"Maniac\" all'interno della " "cartella di Day Of The Tentacle." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "Modalità ~Z~ip attivata" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "~T~ransizioni attive" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "~E~ffetto acqua attivo" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Ripristina gioco:" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Ripristina" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"Impossibile caricare il gioco dal file:\n" +"\n" +"%s" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"Impossibile salvare il gioco nel file:\n" +"\n" +"%s" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"Impossibile salvare il gioco nel file:\n" +"\n" +"%s" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"Impossibile salvare il gioco nel file:\n" +"\n" +"%s" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "Salva gioco:" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "Carica gioco:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "Salva gioco:" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "Emulatore OPL MAME" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "Emulatore OPL DOSBox" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "Nessuna musica" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Emulatore audio Amiga" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "Emulatore AdLib" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Emulatore Apple II GS (NON IMPLEMENTATO)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "Emulatore audio C64" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "Avvio in corso dell'emulatore MT-32" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "Emulatore MT-32" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "Emulatore PC Speaker" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "Emulatore IBM PCjr" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "Emulatore FM Towns" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Mappa tasti:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr " (Attivo)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr " (Globale)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr " (Gioco)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "MIDI Windows" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "Menu principale di ScummVM" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "~M~odalità mancini" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "Controlli combattimento di ~I~ndy" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Mostra cursore del mouse" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "Aggancia ai bordi" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Compensa X del tocco" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Compensa Y del tocco" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "Utilizza il controllo del cursore stile trackpad del portatile" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "Un tocco per il clic sinistro, doppio tocco per il clic destro" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Sensibilità" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "Schermo in primo piano:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Schermo principale:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "Ridimensionamento hardware (veloce, ma di bassa qualità)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "Ridimensionamento software (di buona qualità, ma più lento)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Non ridimensionato (devi scorrere a sinistra e a destra)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Luminosità:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "Audio ad alta qualità (più lento) (riavviare)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Disattiva spegnimento in chiusura" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "Modalità touchpad attivata." + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "Modalità touchpad disattivata." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "Modalità touchpad attivata." -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "Modalità touchpad disattivata." -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Normale (nessun ridimensionamento)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normale (no ridim.)" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "Cambia correzione proporzioni" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "Cambia correzione proporzioni" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +#, fuzzy +msgid "Active graphics filter:" +msgstr "Cambia filtro grafico" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "Resa grafica:" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL Normal" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "OpenGL Conserve" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL Original" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "Modalità video attuale:" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Su" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "Giù" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "Sinistra" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "Destra" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Clic sinistro" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Clic destro" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Zona" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "Multifunzione" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "Cambia personaggio" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "Salta testo" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Modalità veloce" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Debugger" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Menu globale" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "Tastiera virtuale" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Programmatore tasti" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "Sei sicuro di voler uscire?" @@ -2101,133 +2434,195 @@ msgid "Network down" msgstr "Rete disattivata" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "Avvio rete in corso" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +#, fuzzy +msgid "Timeout while initializing network" msgstr "Attesa per l'avvio della rete" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "Rete non avviata (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Nascondi la barra degli strumenti" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Mostra tastiera" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "Suono on/off" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Clic destro" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Mostra/nascondi cursore" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Osservazione libera" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Zoom avanti" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Zoom indietro" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Associa tasti" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "Cursore su" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "Cursore giù" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "Cursore a sinistra" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "Cursore a destra" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "Vuoi caricare o salvare il gioco?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr " Sei sicuro di voler uscire? " -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Tastiera" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Rotazione" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "Utilizzo del driver SDL " -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Visualizza " -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "Vuoi eseguire una scansione automatica?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "Mappa l'azione del tasto destro" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "Devi mappare un tasto per l'azione \"Tasto destro\" per giocare" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "Mappa l'azione nascondi barra degli strumenti" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" "Devi mappare un tasto per l'azione \"Nascondi barra degli strumenti\" per " "giocare" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "Mappa l'azione Zoom Up (opzionale)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "Mappa l'azione Zoom Down (opzionale)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "Non dimenticare di mappare un tasto per l'azione \"Nascondi barra degli " "strumenti\" per vedere l'intero inventario" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "Sei sicuro di voler eliminare questo salvataggio?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "Pugno" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "Sei sicuro di voler uscire?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "Volume" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "Volume" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "" + +#~ msgid "Discovered %d new games." +#~ msgstr "Rilevati %d nuovi giochi." + +#~ msgid "Command line argument not processed" +#~ msgstr "Argomento della linea di comando non eseguito" + +#~ msgid "FM Towns Emulator" +#~ msgstr "Emulatore FM Towns" + #~ msgid "Invalid Path" #~ msgstr "Percorso non valido" diff --git a/po/nb_NO.po b/po/nb_NO.po index a23f0a7d1b..3afebc96d9 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: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2011-04-25 22:56+0100\n" "Last-Translator: Einar Johan T. Sømåen <einarjohants@gmail.com>\n" "Language-Team: somaen <einarjohants@gmail.com>\n" @@ -20,108 +20,118 @@ msgstr "" "X-Poedit-Country: NORWAY\n" "X-Poedit-SourceCharset: iso-8859-1\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(bygd den %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "Funksjoner innkompilert:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Tilgjengelige motorer:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "Gå tilbake" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Gå til forrige mappenivå" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "Gå tilbake" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Avbryt" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Velg" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Lukk" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Musklikk" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Vis tastatur" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Omkoble taster" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Velg en handling for kobling" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Koble" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Velg en handling, og trykk 'Koble'" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Koblet tast : %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Koblet tast: ingen" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Vennligst velg en handling" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Trykk tasten som skal kobles" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Spill" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -129,29 +139,29 @@ msgstr "" "Kort spill-identifikator, brukt for å referere til lagrede spill, og å kjøre " "spillet fra kommandolinjen" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Navn:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "Full spilltittel" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Navn:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Språk:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" @@ -159,282 +169,282 @@ msgstr "" "Spillets språk. Dette vil ikke gjøre din spanske spillversjon om til engelsk " "versjon" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<standard>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Plattform:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "Plattform spillet opprinnelig ble designet for" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Plattform:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Grafikk" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "GFX" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "Overstyr globale grafikkinstillinger" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "Overstyr globale grafikkinstillinger" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "Lyd" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "Overstyr globale lydinstillinger" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "Overstyr globale lydinstillinger" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "Volum" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "Volum" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "Overstyr globale voluminstillinger" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "Overstyr globale voluminstillinger" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "Overstyr globale MIDI-instillinger" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Overstyr globale MIDI-instillinger" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "Overstyr globale MT-32-instillinger" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Overstyr globale MT-32-instillinger" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "Sti" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "Sti" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "Spillsti:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "Spillsti:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "Ekstrasti:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "Bestemmer sti til ytterligere data brukt av spillet" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "Ekstrasti:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "Lagringssti:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "Bestemmer sti til lagrede spill" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "Lagringssti:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "Ingen" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Standard" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "Velg SoundFont" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Velg mappe med spilldata" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "Velg mappe med ytterligere data" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Velg mappe for lagrede spill" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "Denne spill-IDen er allerede i bruk. Vennligst velg en annen." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~A~vslutt" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "Avslutt ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "~O~m..." -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "Om ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~V~alg..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Endre globale ScummVM-innstillinger" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "~S~tart" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "Start valgt spill" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~Å~pne..." -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Åpne lagret spill for det valgte spillet" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "~L~egg til spill..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "Hold Shift for å legge til flere" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "~R~ediger spill..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Endre spillinstillinger" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "~F~jern spill" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "Fjern spill fra listen. Spilldataene forblir intakte" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~L~egg til spill..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~R~ediger spill..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~F~jern spill" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "Søk i spilliste" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Søk:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Tøm verdi" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Åpne spill:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Åpne" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -442,205 +452,222 @@ msgstr "" "Vil du virkelig kjøre flerspill-finneren? Dette kan potensielt legge til et " "stort antall spill." -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Ja" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "Nei" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kunne ikke åpne den valgte mappen!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM kunne ikke finne noe spill i den valgte mappen!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Velg spill:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "Vil du virkelig fjerne denne spillkonfigurasjonen?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "Dette spillet støtter ikke lasting av spill fra oppstarteren." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM kunne ikke finne noen motor som kunne kjøre det valgte spillet!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Legg til flere..." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Legg til flere..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Legg til spill..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Legg til spill..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... fremdrift ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "Søk fullført!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "Oppdaget %d nye spill." +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "Sjekket %d mapper ..." -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "Fant %d nye spill ..." -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Aldri" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "hvert 5. min" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "hvert 10. min" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "hvert 15. min" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "hvert 30. min" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "Ingen" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "Grafikkmodus:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Tegnemodus:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "Spesiel dithering-modus støttet av enkelte spill" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Fullskjermsmodus" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Aspekt-rate korrigering" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Korriger aspekt-rate for 320x200-spill" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "EGA av-dithering" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "Slår av dithering i EGA-spill som støtter det." -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Foretrukket enhet:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "Musikkenhet:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 msgid "Specifies preferred sound device or sound card emulator" msgstr "Velger foretrukket lydenhet eller lydkort-emulator" -#: gui/options.cpp:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 msgid "Specifies output sound device or sound card emulator" msgstr "Velger ut-lydenhet eller lydkortemulator" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Foretrukket enh.:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "Musikkenhet:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "AdLib-emulator:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib brukes til musikk i mange spill" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "Utrate:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -648,60 +675,60 @@ msgstr "" "Høyere verdier gir bedre lydkvalitet, men støttes kanskje ikke av ditt " "lydkort " -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "GM-enhet:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "Specifies default sound device for General MIDI output" msgstr "Velger standard lydenhet for General MIDI-utdata" -#: gui/options.cpp:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "Ikke bruk General MIDI-musikk" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "Bruk første tilgjengelige enhet" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 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:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "Mikset AdLib/MIDI-modus" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "Bruk både MIDI- og AdLib- lydgenerering" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "MIDI gain:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "MT-32 Enhet:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 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:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Ekte Roland MT-32 (deaktiver GM-emulering)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -709,190 +736,191 @@ msgstr "" "Velg hvis du har et ekte Roland-kompatible lydkort tilkoblet maskinen, og " "vil bruke dette." -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Ekte Roland MT-32 (deaktiver GM-emulering)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "Aktiver Roland GS-modus" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "Slå av General MIDI-kobling for spill som har Roland MT-32-lydspor" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "Ikke bruk Roland MT-32-musikk" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Tekst og Tale:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Tale" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Undertekster" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Begge" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Teksthastighet:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Tekst og Tale:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Tale" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "Tekst" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "Begge" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Vis undertekster, og spill av tale" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Underteksthastighet:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "Musikkvolum:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "Musikkvolum:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Demp alle" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "Lydeffektvolum:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "Volum for spesielle lydeffekter" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "Lydeffektvolum:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "Talevolum:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "Talevolum:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "Temasti:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "Temasti:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 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:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "Pluginsti:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "Pluginsti:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Div" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Div" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "GUI-tegner:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Autolagre:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Autolagre:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Taster" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "GUI-språk:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Språk i ScummVM-GUIet" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +msgid "You have to restart ScummVM before your changes will take effect." msgstr "Du må omstarte ScummVM for at endringene skal skje. " -#: gui/options.cpp:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Velg mappe for lagrede spill" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 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:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "Velg mappe for GUI-temaer" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Velg mappe for ytterligere filer" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "Velg mappe for plugins" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -900,779 +928,855 @@ 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." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "Ingen dato lagret" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "Ingen tid lagret" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "Ingen spilltid lagret" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Slett" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "Vil du virkelig slette dette lagrede spillet?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Dato: " -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Tid: " -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Spilltid: " -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Ikke navngitt spilltilstand" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Velg et tema" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "Deaktivert GFX" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "Deaktivert GFX" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Standard Tegner (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Standard (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Antialiased Tegner (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "Antialiased (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Motoren støtter ikke debug-nivå '%s'" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Meny" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Hopp over" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pause" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Hopp over linje" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "Problem ved kjøring av spill:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "Kunne ikke finne noen motor som kunne kjøre det valgte spillet" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "Ingen feil" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "Spilldata ikke funnet" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "Spill-ID ikke støttet" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "Ustøttet fargemodus" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "Lesetilgang nektet" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "Skrivetilgang nektet" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "Stien eksisterer ikke" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "Stien er ikke en mappe" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "Stien er ikke en fil" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "Kan ikke opprette fil" -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "Lesing av data feilet" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Dataskriving feilet" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "Kunne ikke finne en passende engine-plugin" -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "Spillmotor-plugin støtter ikke lagrede tilstander" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "Kommandolinjeargument ikke behandlet" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "Ukjent feil" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules Grønn" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules Oransje" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules Grønn" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules Oransje" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "~F~ortsett" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~Å~pne" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~L~agre" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~V~alg" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~H~jelp" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "~O~m" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "~T~ilbake til oppstarter" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~T~ilbake til oppstarter" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Lagret spill:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Lagre" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "~A~vbryt" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~T~aster" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "Nåværende videomodus:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "Veksle aspekt-rate korrigering" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~F~orrige" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~N~este" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~L~ukk" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "Vanlige tastaturkommandoer:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "Lagre- / åpne-dialog" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "Hopp over tekstlinje" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "Hopp over cutscene" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Space" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "Pause spill" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "Åpne spilltilstand 1-10" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "Lagre spilltilstand 1-10" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Avslutt" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Enter" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "Veksle fullskjerm" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "Musikkvolum opp/ned" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "Tekstfart saktere/raskere" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "Simuler venstre mustast" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "Simuler høyre mustast" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "Spesielle tastaturkommandoer:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "Vis / Skjul konsollen" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "Start debuggeren" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "Vis minneforbruk" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "Kjør i rask modus (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "Kjør i virkelig rask modus (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "Veksle muslåsing" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "Bytt grafikkfiltre" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "Øk / Minsk skaleringsfaktor" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "Veksle aspekt-rate korrigering" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* Merk at å bruke ctrl-f og" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " ctrl-g anbefales ikke, siden" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr " de kan forårsake kræsj, eller" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +#, fuzzy +msgid " or incorrect game behavior." msgstr " feilaktig spilloppførsel." -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "Spinne drafts på tastaturet:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "Hovedkontroller for spill:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "Dytt" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "Dra" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "Gi" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "Åpne" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "Gå til" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "Få" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "Bruk" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "Les" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "Bytt unge" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "Slå på" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "Slå av" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "Gå til" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "Plukk opp" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "Hva er" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "Lås opp" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "Ta på tøy" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "Ta av tøy" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "Fiks" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "Bytt" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "Kikk" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "Snakk" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "Reis" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "Til Henry / Til Indy" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "Spill C moll på distaffen" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "spill D på distaffen" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "spill E på distaffen" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "spill F på distaffen" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "spill G på distaffen" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "spill A på distaffen" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "spill H på distaffen" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "spill C dur på distaffen" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "Dytt" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "Dra" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "Snakk til" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "Se på" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "Slå på" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "Slå av" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "Ned-tast" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "Merk forrige dialog" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "Opp-tast" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "Merk neste dialog" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "Gå" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "Inventar" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "Gjenstand" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "Svart/Hvitt / Farger" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "Øyne" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Tunge" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "Slå" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "Spark" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "Undersøk" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "Vanlig muspeker" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Comm" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "Lagre / Åpne / Valg" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "Andre spillkontroller" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "Inventar:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "Bla liste opp" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "Bla liste ned" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "Øvre venstre gjenstand" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "Nedre venstre gjenstand" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "Øvre høyre gjenstand" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "Nedre høyre gjenstand" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "Midtre venstre gjenstand" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "Midtre høyre gjenstand" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "Bytte av karakterer:" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "Andre unge" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "Tredje unge" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "Kampkontroller (talltastatur)" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "Bakoversteg" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "Høy blokk" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "Mid-blokk" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "Lav blokk" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "Slå høyt" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "Slå midje" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "Slå lavt" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Gjelder når Indy er til venstre." -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "Når Indy er til høyre," -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "Byttes 7, 4, og 1 med" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "henholdsvis 9, 6, og 3." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "Flykontroller (talltastatur)" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "Fly til øvre venstre" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "Fly til venstre" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "Fly til nedre venstre" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "Fly oppover" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "Fly rett" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "Fly ned" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "Fly til øvre høyre" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "Fly til høyre" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "Fly til nedre høyre" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1683,7 +1787,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1694,7 +1798,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1705,7 +1809,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " @@ -1715,266 +1819,495 @@ msgstr "" "ennå. Så, for å spille Maniac Mansion, gå til 'Legg til spill' i ScummVM-" "hovedmenyen og velg 'Maniac'-undermappa i Tentacle-mappa." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "~Z~ipmodus aktivert" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "~O~verganger aktivert" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "~V~anneffekt aktivert" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Gjennopprett spill:" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Gjenopprett" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"Klarte ikke åpne spilltilstand fra fil:\n" +"\n" +"%s" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"Klarte ikke lagre spilltilstand til fil:\n" +"\n" +"%s" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"Klarte ikke lagre spilltilstand til fil:\n" +"\n" +"%s" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"Klarte ikke lagre spilltilstand til fil:\n" +"\n" +"%s" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "Lagret spill:" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "Åpne spill:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "Lagret spill:" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "MAME OPL emulator" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "DOSBox OPL emulator" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "Ingen musikk" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Amiga Lydemulator" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "AdLib Emulator" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Apple II GS Emulator (IKKE IMPLEMENTERT)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "C64 Lydemulator" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "Initialiserer MT-32-Emulator" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "MT-32 Emulator" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "PC Speaker Emulator" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "IBM PCjr Emulator" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "FM Towns Emulator" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Tastkobling:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr " (Aktiv)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr " (Global)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr " (Spill)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "Windows MIDI" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "ScummVM Hovedmeny" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "~V~enstrehendt modus" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "~I~ndy kampkontroller" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Vis muspeker" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "Hopp til kanter" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Gå til X-posisjon" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Gå til Y-posisjon" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "Bruk bærbar trackpad-stil muspekerkontroll" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "Tap for venstreklikk, dobbelt-tap for høyreklikk" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Følsomhet" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "Skalering for øvre skjerm:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Hovedskjermsskalering:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "Maskinvareskalering (rask, men lav kvalitet)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "Programvareskalering (god kvalitet, men tregere)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Uskalert (du må scrolle til venstre og høyre)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Lysstyrke:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "Høy lydkvalitet (tregere) (omstart)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Deaktiver strømsparing" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "Touchpad-modus aktivert." + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "Touchpad-modus deaktivert." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "Touchpad-modus aktivert." -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "Touchpad-modus deaktivert." -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Normal (ingen skalering)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal (ingen skalering)" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "Veksle aspekt-rate korrigering" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "Veksle aspekt-rate korrigering" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +#, fuzzy +msgid "Active graphics filter:" +msgstr "Bytt grafikkfiltre" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "Tegnemodus:" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL Normal" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "OpenGL Bevar" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL Original" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "Nåværende videomodus:" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Opp" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "Ned" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "Venstre" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "Høyre" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Venstreklikk" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Høyreklikk" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Sone" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "Multifunksjon" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "Bytt karakter" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "Hopp over tekst" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Rask modus" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Debugger" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Global meny" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "Virtuelt tastatur" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Tastkobler" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "Vil du avslutte?" @@ -2096,134 +2429,196 @@ msgid "Network down" msgstr "Nettverket er nede" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "Initialiserer nettverk" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +#, fuzzy +msgid "Timeout while initializing network" msgstr "Timeout under initialisering av nettverk" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "Nettverk ikke initialisert (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Skjul verktøylinje" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Vis tastatur" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "Lyd av/på" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Høyreklikk" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Vis/Skjul muspeker" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Frikikking" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Zoom opp" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Zoom ned" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Koble taster" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "Peker opp" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "Peker ned" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "Peker venstre" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "Peker høyre" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "Vil du åpne eller lagre spillet?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr " Er du sikker på at du vil avslutte ?" -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Tastatur" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Roter" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "Bruk SDL-driver" -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Skjerm" -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "Vil du utføre et automatisk søk?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "Koble handling til høyreklikk" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "" "Du må koble en tast til handlingen 'Høyreklikk' for å spille dette spillet" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "Koble skjul-verktøylinje-handlingen" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" "Du må koble en tast til 'Skjul verktøylinje'-handlingen for å spille dette " "spillet" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "Koble handlingen Zoom Opp (valgfritt)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "Koble handlingen Zoom Ned (valgfritt)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "Ikke glem å koble en tast til handlingen 'Skjul verktøylinje' for å se hele " "inventaret" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "Vil du virkelig slette dette lagrede spillet?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "Slå" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "Vil du avslutte?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "Volum" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "Volum" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "" + +#~ msgid "Discovered %d new games." +#~ msgstr "Oppdaget %d nye spill." + +#~ msgid "Command line argument not processed" +#~ msgstr "Kommandolinjeargument ikke behandlet" + +#~ msgid "FM Towns Emulator" +#~ msgstr "FM Towns Emulator" + #~ msgid "Invalid Path" #~ msgstr "Ugyldig sti" diff --git a/po/nn_NO.po b/po/nn_NO.po index 777c6e0e68..9eecf8b6b5 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: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2011-04-25 23:07+0100\n" "Last-Translator: Einar Johan T. Sømåen <einarjohants@gmail.com>\n" "Language-Team: somaen <einarjohants@gmail.com>\n" @@ -20,108 +20,118 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "X-Poedit-Country: NORWAY\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(bygd den %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "Funksjonar innkompilert:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Tilgjengelege motorar:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "Gå tilbake" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Gå til forrige mappenivå" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "Gå tilbake" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Avbryt" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Vel" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Steng" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Musklikk" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Syn Tastatur" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Omkople tastar" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Vel ei handling for kopling:" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Kople" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Vel ei handling, og klikk 'Kople'" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Kopla tast : %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Kopla tast: ingen" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Vel ei handling" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Trykk tasten du vil kople" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Spel" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -129,29 +139,29 @@ msgstr "" "Kort spelidentifikator nytta for å referere til lagra spel, og å køyre " "spelet frå kommandolinja" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Namn:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "Full speltittel:" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Namn:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Språk:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" @@ -159,487 +169,504 @@ msgstr "" "Spelets språk. Dette vil ikkje gjere den spanske versjonen av spelet til ein " "engelsk versjon" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<standard>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Plattform:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "Plattform spelet opprineleg vart designa for" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Plattform:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Grafikk" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "GFX" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "Overstyr globale grafikkinstillingar" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "Overstyr globale grafikkinstillingar" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "Lyd" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "Overstyr globale lydinstillingar" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "Overstyr globale lydinstillingar" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "Volum" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "Volum" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "Overstyr globale voluminstillingar" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "Overstyr globale voluminstillingar" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "Overstyr globale MIDI-instillingar" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Overstyr globale MIDI-instillingar" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "Overstyr globale MT-32-instillingar" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Overstyr globale MT-32-instillingar" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "Stiar" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "Stiar" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "Spelsti:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "Spelsti:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "Ekstrasti:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "Ekstrasti:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "Lagringssti:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "Lagringssti:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "Ingen" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Standard" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "Vel SoundFont" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Vel mappe med speldata" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Vel mappe for lagra spel" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "" -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~A~vslutt" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "Avslutt ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "~O~m..." -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "Om ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~V~al..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Endre globale ScummVM-instillingar" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "~S~tart" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "Start det velde spelet" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~Å~pne..." -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Åpne eit lagra spel for the velde spelet" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "~L~egg til spel..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "Hold Shift nede for å legge til fleire" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "~R~ediger spel..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Endre spelinstillingar" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "~F~jern spel" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~L~egg til spel..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~R~ediger spel..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~F~jern spel" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "Søk i spelliste" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Søk:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Tøm verdi" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Åpne spel:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Åpne" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." msgstr "" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Ja" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "Nei" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kunne ikkje åpne den velde mappa!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM kunne ikkje finne noko spel i den velde mappa!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Vel spelet:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "Vil du verkeleg fjerne denne spelkonfigurasjonen?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "Dette spelet støttar ikkje åpning av lagra spel frå oppstartaren." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM kunne ikkje finne nokon motor som var i stand til å køyre det velde " "spelet!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Legg til fleire..." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Legg til fleire..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Legg til spill..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Legg til spill..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... fremdrift ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "Søk fullført!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "Oppdaga %d nye spel." +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "Søkt i %d mappar ..." -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "Oppdaga %d nye spel ..." -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Aldri" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "kvart 5. min" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "kvart 10. min" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "kvart 15. min" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "kvart 30. min" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "Ingen" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "Grafikkmodus:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Teiknemodus:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "Spesielle dithering-modus som støttast av nokre spel" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Fullskjermsmodus" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Aspekt-korrigering" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Rett opp aspekt for 320x200 spel" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Føretrukken eining:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 msgid "Specifies preferred sound device or sound card emulator" msgstr "" -#: gui/options.cpp:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 msgid "Specifies output sound device or sound card emulator" msgstr "" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "AdLib emulator:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib nyttast til musikk i mange spel" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -647,249 +674,250 @@ msgstr "" "Høgare verdier gir betre lydkvalitet, men støttast kanskje ikkje av " "lydkortet ditt" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "Specifies default sound device for General MIDI output" msgstr "" -#: gui/options.cpp:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "Ikkje nytt General MIDI musikk" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "SoundFont støttast av enkelte lydkort, Fluidsynth og Timidity" -#: gui/options.cpp:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "Blanda AdLib/MIDI-modus" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "Nytt båe MIDI og AdLib lydskaping" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "MIDI gain:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" msgstr "" -#: gui/options.cpp:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Ekte Roland MT-32 (deaktiver GM-emulering)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" msgstr "" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Ekte Roland MT-32 (ingen GS-emulering)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "Aktiver Roland GS-modus" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "Slår av General MIDI-kopling for spel med Roland MT-32 lydspor" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "Ikkje nytt Roland MT-32 musikk" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Tekst og Tale:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Tale" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Teksting" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Begge" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Undertekstfart:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Tekst og Tale:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Tale" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "Tekst" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "Båe" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Vis teksting og spel av tale" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Undertekstfart:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "Musikkvolum:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "Musikkvolum:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Demp alle" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "Lydeffektvolum:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "Lydeffektvolum:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "Talevolum:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "Talevolum:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "Temasti:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "Temasti:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" -#: gui/options.cpp:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "Pluginsti:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "Pluginsti:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Div" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Div" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "GUI-teiknar:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Autolagre:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Autolagre:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Tastar" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "GUI-språk:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Språk i ScummVM-GUIet" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +msgid "You have to restart ScummVM before your changes will take effect." msgstr "Du må omstarte ScummVM for at endringane skal skje." -#: gui/options.cpp:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Vel mappe for lagra spel" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 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:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "Vel ei mappe for GUI-tema:" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Vel ei mappe for ekstra filer" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "Vel ei mappe for plugins" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -897,782 +925,858 @@ 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." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "Ingen dato lagra" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "Inga tid lagra" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "Inga speletid lagra" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Slett" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "Vil du verkeleg slette det lagra spelet?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Dato: " -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Tid: " -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Speletid: " -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Ikkje navngjeven speltilstand" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Vel eit tema" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "Deaktivert GFX" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "Deaktivert GFX" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Standard Teiknar (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Standard (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Antialiased Teiknar (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "Antialiased (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Motoren støttar ikkje debug-nivå '%s'" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Meny" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Hopp over" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pause" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Hopp over linje" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "Feil under køyring av spel:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "Kunne ikkje finne nokon motor som kunne køyre det velde spelet." -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "Ingen feil" -#: common/error.cpp:44 +#: common/error.cpp:40 #, fuzzy msgid "Game data not found" msgstr "Speldata ikkje funne" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "Spel ID ikkje støtta" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "Ustøtta fargemodus" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "Lesetilgang nekta" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "Skrivetilgang nekta" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "Stien eksisterar ikkje" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "Stien er ikkje ei mappe" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "Stien er ikkje ei fil" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "Kan ikkje lage fil" -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "Lesing av data feila" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Dataskriving feila" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "Kunne ikkje finne ein passande spelmotor-plugin" -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "Spelmotor-plugin støttar ikkje lagra tilstandar." -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "Ukjend feil" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules Grønn" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules Raudgul" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules Grønn" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules Raudgul" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "~F~ortsett" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~Å~pne" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~L~agre" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~V~al" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~H~jelp" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "~O~m" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 #, fuzzy msgid "~R~eturn to Launcher" msgstr "~T~ilbake til oppstarter" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 #, fuzzy msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~T~ilbake til oppstarter" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Lagra spel:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Lagre" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "~A~vbryt" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~T~astar" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "Gjeldende videomodus:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "Veksle aspekt-korrigering" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~F~orrige" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~N~este" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~L~ukk" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "Vanlege tastaturkommandoar:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "Åpne- / Lagre-dialog" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "Hopp over tekstlinje" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "Hopp over cutscene" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Opprom" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "Pause spel" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "Åpne speltilstand 1-10" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "Lagre speltilstand 1-10" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Avslutt" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Enter" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "Veksle fullskjerm" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "Musikkvolum opp / ned" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "Tekstfart saktare / fortare" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "Simuler venstre musknapp" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "Simuler høgre musknapp" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "Spesielle tastaturkommandoar:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "Vis / Skjul konsoll" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "Start debuggaren" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "Vis minneforbruk" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "Køyr i rask modus (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "Køyr i verkeleg rask modus (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "Veksle muslåsing" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "Veksle grafikkfiltre" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "Øk/Minsk skaleringsfaktor" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "Veksle aspekt-korrigering" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* Merk at å bruke ctrl-f og" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " ctrl-g er ikkje anbefalt då" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr " dei kan forårsake kræsj og" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +#, fuzzy +msgid " or incorrect game behavior." msgstr " feilaktig speloppførsel." -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "Spinne drafts på tastaturet:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "Hovedkontrollar for spel:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "Dytt" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "Dra" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "Gi" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "Åpne" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "Gå til" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "Få" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "Nytt" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "Les" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "Bytt unge" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "Slå på" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "Slå av" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "Gå til" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "Plukk opp" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "Kva er" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "Lås opp" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "Ta på (klede)" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "Ta av (klede)" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "Fiks" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "Bytt" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "Kikk" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "Snakk" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "Reis" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "Til Henry / Til Indy" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "spel C moll på distaffen " -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "spel D på distaffen" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "spel E på distaffen" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "spel F på distaffen" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "spel G på distaffen" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "spel A på distaffen" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "spel H på distaffen" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "spel C dur på distaffen" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "Dytt" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "Dra" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "Snakk til" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "Se på" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "Slå på" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "Slå av" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "Opp-tast" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "Merk forrige dialog" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "Ned-tast" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "Merk neste dialog" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "Gå" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "Inventar" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "Objekt" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "Svart-Kvitt / Fargar" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "Auger" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Tunge" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "Slå" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "Spark" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "Undersøk" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "Vanleg peikar" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Comm" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "Åpne / Lagre / Val" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "Andre spelkontrollar:" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "Inventar:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "Bla liste opp" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "Bla liste ned" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "Øvre venstre gjenstand" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "Nedre venstre gjenstand" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "Øvre høgre gjenstand" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "Nedre høgre gjenstand" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "Midtre venstre gjenstand" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "Midtre høgre gjenstand" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "Veksle karakterar:" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "Andre unge" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "Tredje unge" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "Kampkontrollar (taltastatur)" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "Bakoversteg" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "Høg blokk" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "Midt blokk" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "Lav blokk" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "Høgt slag" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "Midtslag" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "Lavt slag" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Gjeld Indy på Venstre side." -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "Med Indy på høgre side," -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "byttast 7, 4, og 1 med" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "9, 6, og 3, henhaldsvis." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "Flykontrollar (taltastatur)" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "Fly til øvre venstre" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "Fly til venstre" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "Fly til nedre venstre" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "Fly oppover" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "Fly rett" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "Fly ned" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "Fly til øvre høgre" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "Fly til høgre" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "Fly til nedre høgre" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1680,7 +1784,7 @@ msgid "" "%s" msgstr "" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1688,7 +1792,7 @@ msgid "" "%s" msgstr "" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1696,7 +1800,7 @@ msgid "" "%s" msgstr "" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " @@ -1706,266 +1810,478 @@ msgstr "" "det enno. For å spele Maniac Mansion, gå til 'Legg til spel' i ScummVM-" "menyen og vel 'Maniac'-undermappa i 'Tentacle'-mappa." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "~Z~ipmodus aktivert" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "~O~vergangar aktivert" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "~V~anneffekt aktivert" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Gjenopprett spel:" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Gjenopprett" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +msgid "Failed to load game state from file." +msgstr "" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +msgid "Failed to save game state to file." +msgstr "" + +#: engines/gob/inter_v5.cpp:107 +msgid "Failed to delete file." +msgstr "" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "Full speltittel:" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "Lagra spel:" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "Åpne spel:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "Lagra spel:" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "MAME OPL emulator" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "DOSBox OPL emulator" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "Ingen musikk" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Amiga Lydemulator" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "AdLib Emulator" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Apple II GS Emulator (IKKJE IMPLEMENTERT)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "C64 Lydemulator" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "Initialiserar MT-32-emulator" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "MT-32 Emulator" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "PC Speaker Emulator" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "IBM PCjr Emulator" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "FM Towns Emulator" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Tastkopling:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr " (Aktivt)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr " (Global)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr " (Spel)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "Windows MIDI" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "ScummVM Hovudmeny" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "~V~enstrehendt modus" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "~I~ndy-kampkontrollar" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Vis muspeikar" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "Hopp til kantar" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Gå til X-posisjon" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Gå til Y-posisjon" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "Tap for venstre-klikk, dobbelt-tap for høgre-klikk" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Sensitivitet" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Hovudskjermsskalering:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Uskalert (du må scrolle til venstre og høgre)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Lysstyrke:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Deaktiver strømsparing" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +msgid "Mouse-click-and-drag mode enabled." +msgstr "" + +#: backends/platform/iphone/osys_events.cpp:340 +msgid "Mouse-click-and-drag mode disabled." +msgstr "" + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "" -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "" -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Normal (inga skalering)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal (inga skalering)" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "Veksle aspekt-korrigering" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "Veksle aspekt-korrigering" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +#, fuzzy +msgid "Active graphics filter:" +msgstr "Veksle grafikkfiltre" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "Teiknemodus:" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL Normal" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "OpenGL Bevar" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL Original" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "Gjeldende videomodus:" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Opp" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "Ned" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "Venstre" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "Høgre" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Venstreklikk" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Høgreklikk" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Sone" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Rask modus" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Debugger" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Globalmeny" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Tastkopler" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "Vil du avslutte?" @@ -2086,132 +2402,191 @@ msgid "Network down" msgstr "Nettverket er nede" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "Initialiserer nettverk" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" -msgstr "" +#, fuzzy +msgid "Timeout while initializing network" +msgstr "Initialiserer nettverk" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "Nettverk ikkje initialisert (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Skjul verktøylinje" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Syn tastatur" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "Lyd av/på" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Høgreklikk" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Vis/Skjul Peikar" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Frikikking" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Zoom opp" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Zoom ned" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Kople tastar" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "Peikar opp" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "Peikar ned" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "Peikar venstre" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "Peikar høgre" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "Vil du åpne eller lagre spelet?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr "Er du sikker på at du vil avslutte?" -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Tastatur" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Roter" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "Nyttar SDL-drivar" -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Skjerm" -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "Vil du utføre eit automatisk søk?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "Kople høgreklikkshandling" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "" "Du må kople ein tast til 'Høgreklikk'-handlinga for å spele dette spelet" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "Kople skjul-verktøylinje-handlinga" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "Du må kople ein tast til 'Skjul verktøylinje' for å spele dette spelet" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "Kople Zoom Opp-handling (valfri)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "Kople Zoom Ned-handling (valfri)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "Ikkje gløym å kople ein tast til 'Skjul verktøylinje' for å se heile " "inventaret" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "Vil du verkeleg slette det lagra spelet?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "Slå" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "Vil du avslutte?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "Volum" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "Volum" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "" + +#~ msgid "Discovered %d new games." +#~ msgstr "Oppdaga %d nye spel." + +#~ msgid "FM Towns Emulator" +#~ msgstr "FM Towns Emulator" + #~ msgid "Invalid Path" #~ msgstr "Ugyldig sti" diff --git a/po/pl_PL.po b/po/pl_PL.po index d6e5b9b5e8..f591d0065a 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: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2011-05-02 12:09+0100\n" "Last-Translator: \n" "Language-Team: Grajpopolsku.pl <grajpopolsku@gmail.com>\n" @@ -20,108 +20,118 @@ msgstr "" "X-Poedit-Language: Polish\n" "X-Poedit-Country: POLAND\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(skompilowany %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "Wkompilowane funkcje:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Dostêpne silniki:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "W górê" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Przejd¼ do poprzedniego katalogu" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "W górê" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Anuluj" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Wybierz" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Zamknij" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Klikniêcie" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Wy¶wietl klawiaturê" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Dostosuj klawisze" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Wybierz akcjê do przypisania" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Przypisz" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Wybierz akcjê i kliknij 'Przypisz'" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Przypisany klawisz : %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Przypisany klawisz: brak" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Wybierz akcjê" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Wci¶nij klawisz do przypisania" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Gra" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -129,514 +139,531 @@ msgstr "" "Krótki identyfikator gry u¿ywany do rozpoznawania zapisów i uruchamiania gry " "z linii komend" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Nazwa:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "Pe³ny tytu³ gry:" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Nazwa:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Jêzyk:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" msgstr "Jêzyk gry. Nie zmieni to hiszpañskiej wersji gry w angielsk±." -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<domy¶lne>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Platforma:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "Platforma, na któr± stworzono grê" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Platforma:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Grafika" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "Grafika" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "U¿yj w³asnych ustawieñ grafiki" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "U¿yj w³asnych ustawieñ grafiki" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "D¼wiêk" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "U¿yj w³asnych ustawieñ d¼wiêku" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "U¿yj w³asnych ustawieñ d¼wiêku" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "G³o¶no¶æ" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "G³o¶no¶æ" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "U¿yj w³asnych ustawieñ g³o¶no¶ci" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "U¿yj w³asnych ustawieñ g³o¶no¶ci" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "U¿yj w³asnych ustawieñ MIDI" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "U¿yj w³asnych ustawieñ MIDI" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "U¿yj w³asnych ustawieñ MT-32" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "U¿yj w³asnych ustawieñ MT-32" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "¦cie¿ki" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "¦cie¿ki" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "¦cie¿ka gry:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "¦cie¿ka gry:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "¦c. dodatków:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "Okre¶la ¶cie¿kê dodatkowych danych gry" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "¦c. dodatków:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "¦cie¿ka zapisów:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "Okre¶la gdzie zapisywaæ stan gry" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "¦cie¿ka zapisów:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "Brak" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Domy¶lnie" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "Wybierz SoundFont" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Wybierz katalog z plikami gry" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "Wybierz dodatkowy katalog gry" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Wybierz katalog dla zapisów" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "Identyfikator jest ju¿ zajêty. Wybierz inny." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~Z~akoñcz" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "Zakoñcz ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "I~n~formacje..." -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "O ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~O~pcje..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Zmieñ ustawienia ScummVM" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "~S~tart" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "Rozpocznij wybran± grê" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~W~czytaj..." -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Wczytaj zapis wybranej gry" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "~D~odaj grê..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "Przytrzymaj Shift, by dodawaæ zbiorowo" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "~E~dytuj grê..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Zmieñ opcje gry" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "~U~suñ grê" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "Usuwa grê z listy. Pliki gry pozostaj± nietkniête" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~D~odaj grê..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~dytuj grê..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~U~suñ grê" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "Wyszukaj grê na li¶cie" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Szukaj" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Wyczy¶æ" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Wczytaj grê:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Wczytaj" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." msgstr "" "Chcesz uruchomiæ masowy detektor gier? Mo¿e dodaæ wiele tytu³ów do listy" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Tak" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "Nie" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM nie mo¿e otworzyæ katalogu!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM nie znalaz³ ¿adnej gry w tym katalogu!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Wybierz grê:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "Na pewno chcesz usun±æ tê grê z konfiguracji?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "Ta gra nie wspiera wczytywania z launchera." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM nie znalaz³ silnika zdolnego uruchomiæ wybran± grê!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Masowe dodawanie..." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Masowe dodawanie..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Dodaj grê..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Dodaj grê..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... postêp ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "Skanowanie zakoñczone!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "Wykryto %d nowych gier." +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "Przeskanowano %d katalogów ..." -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "Wykryto %d nowych gier..." -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Nigdy" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "co 5 min" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "co 10 min" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "co 15 min" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "co 30 min" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "Brak" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "Tryb grafiki:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Renderer:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "Specjalne tryby ditheringu wspierane przez niektóre gry" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Tryb pe³noekranowy" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Korekcja formatu obrazu" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Korekcja formatu obrazu dla gier 320x200" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "anty-dithering EGA" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "W³±cz anty-dithering we wspieranych grach EGA" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Pref. urz±dzenie:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "Urz. muzyczne:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 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:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 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:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Pref. urz±dzenie:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "Urz. muzyczne:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "Emulator AdLib:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib jest u¿ywany do muzyki w wielu grach" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "Czêst. wyj.:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -644,63 +671,63 @@ 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:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "Urz±dzenie GM:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 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:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "Nie u¿ywaj muzyki General MIDI" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "U¿yj pierwszego dostêpnego urz±dzenia" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 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:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "Tryb miksowanego AdLib/MIDI" -#: gui/options.cpp:775 +#: gui/options.cpp:829 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:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "Wzm. MIDI:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "Urz±dzenie MT-32:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 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:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Prawdziwy Roland MT-32 (wy³±cz emulacjê GM)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -708,191 +735,192 @@ msgstr "" "Zaznacz, je¶li chcesz u¿ywaæ swojej prawdziwej karty kompatybilnej z Roland " "pod³±czonej do twojego komputera" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Prawdziwy Roland MT-32 (brak emulacji GM)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "W³±cz tryb Roland GS" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" "Wy³±cza mapowanie General MIDI dla gier ze ¶cie¿k± d¼wiêkow± Roland MT-32" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "Nie u¿ywaj muzyki Roland MT-32" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Tekst i mowa:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Mowa" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Napisy" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Oba" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Prêd. napisów:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Tekst i mowa:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Mowa" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "Napisy" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "Oba" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Wy¶wietlaj napisy i odtwarzaj mowê" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Prêd. napisów:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "G³o¶no¶æ muzyki:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "G³o¶no¶æ muzyki:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Wycisz" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "G³. efekt. d¼w.:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "G³o¶no¶æ efektów d¼w." -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "G³. efekt. d¼w.:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "G³o¶no¶æ mowy:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "G³o¶no¶æ mowy:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "¦cie¿ka stylu:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "¦cie¿ka stylu:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 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:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "¦cie¿ka wtyczek:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "¦cie¿ka wtyczek:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Ró¿ne" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Ró¿ne" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Styl:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "Renderer interf.:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Autozapis:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Autozapis:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Klawisze" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "Jêzyk interfejsu:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Jêzyk interfejsu ScummVM" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +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:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Wybierz katalog zapisów" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 msgid "The chosen directory cannot be written to. Please select another one." msgstr "Ten katalog jest zabezpieczony przed zapisem. Wybierz inny." -#: gui/options.cpp:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "Wybierz katalog dla stylów GUI." -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Wybierz katalog dla dodatkowych plików" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "Wybierz katalog dla wtyczek" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -900,779 +928,855 @@ msgstr "" "Wybrany styl nie obs³uguje obecnego jêzyka. Je¶li chcesz go u¿ywaæ, zmieñ " "najpierw swój jêzyk." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "Brak daty" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "Brak godziny" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "Brak czasu gry" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Skasuj" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "Na pewno chcesz skasowaæ ten zapis?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Data: " -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Czas: " -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Czas gry: " -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Zapis bez nazwy" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Wybierz styl" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "Wy³±czona grafika" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "Wy³±czona grafika" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Standardowy renderer (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Standardowy (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Wyg³adzany renderer (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "Wyg³adzany (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Silnik nie wspiera poziomu debugowania '%s'" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Menu" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Pomiñ" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Wstrzymaj" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Pomiñ liniê" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "B³±d podczas uruchamiania gry:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "Nie uda³o siê znale¼æ silnika zdolnego do uruchomienia zaznaczonej gry" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "Brak b³êdu" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "Nie znaleziono plików gry" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "Identyfikator gry nie jest wspierany" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "Niewspierany tryb kolorów" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "Brak praw do odczytu" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "Brak praw do zapisu" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "¦cie¿ka nie istnieje" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "¦cie¿ka nie jest katalogiem" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "¦cie¿ka nie jest plikiem" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "Nie mo¿na utworzyæ pliku" -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "Odczyt danych nieudany" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Zapisywanie danych nie powiod³o siê" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "Nie uda³o siê znale¼æ odpowiedniej wtyczki silnika" -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "Silnik nie wspiera zapisu stanu gry" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "Argument wiersza poleceñ nie zosta³ przetworzony" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "Nieznany b³±d" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Zielony Hercules" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Bursztynowy Hercules" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Zielony Hercules" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Bursztynowy Hercules" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "~W~znów" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~W~czytaj" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~Z~apisz" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~O~pcje" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~P~omoc" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "~I~nformacje" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "~P~owrót do launchera" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~P~owrót do launchera" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Zapis:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Zapisz" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "~A~nuluj" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~K~lawisze" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "Obecny tryb wideo:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "W³±cz/wy³±cz korekcjê formatu obrazu" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~P~oprzedni" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~N~astêpny" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~Z~amknij" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "Skróty klawiaturowe:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "Okno Zapisz / Wczytaj" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "Pomiñ linijkê tekstu" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "Pomiñ scenkê" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Spacja" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "Wstrzymaj grê" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "Wczytaj stan gry 1-10" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "Zapisz stan gry 1-10" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Zakoñcz" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Enter" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "W³±cz/wy³±cz pe³ny ekran" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "Zwiêksz/zmniejsz g³o¶no¶æ muzyki" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "Zwiêksz/zmniejsz prêdko¶æ tekstu" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "Symuluje lewy przycisk myszy" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "Symuluje prawy przycisk myszy" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "Specjalne skróty klawiaturowe:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "Schowaj / poka¿ konsolê" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "W³±cz debugger" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "Poka¿ zu¿ycie pamiêci" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "W³±cz w trybie szybkim (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "W³±cz w trybie bardzo szybkim (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "W³±cz/wy³±cz przechwytywanie myszy" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "Prze³±czaj pomiêdzy filtrami grafiki" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "Zwiêksz / zmniejsz wspó³czynnik skalowania" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "W³±cz/wy³±cz korekcjê formatu obrazu" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* Miej na uwadze, ¿e u¿ywanie ctrl-f" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " i ctrl-g nie jest wskazane" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr " poniewa¿ mog± one spowodowaæ zawieszenie siê," -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +#, fuzzy +msgid " or incorrect game behavior." msgstr " b±d¼ nieodpowiednie zachowanie gry." -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "Tkanie splotów na klawiaturze:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "G³ówne sterowanie gry:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "Pchnij" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "Poci±gnij" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "Daj" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "Otwórz" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "Id¼ do" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "We¼" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "U¿yj" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "Czytaj" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "Nowy dzieciak" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "W³±cz" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "Wy³±cz" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "Podejd¼ do" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "Podnie¶" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "Czym jest" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "Otwórz" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "Za³ó¿" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "Zdejmij" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "Napraw" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "Prze³±cz" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "Spójrz" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "Rozmawiaj" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "Podró¿uj" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "Do Henry'ego / Do Indy'ego" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "zagraj c-moll na k±dzieli" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "zagraj D na k±dzieli" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "zagraj E na k±dzieli" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "zagraj F na k±dzieli" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "zagraj G na k±dzieli" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "zagraj A na k±dzieli" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "zagraj B na k±dzieli" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "zagraj C-dur na k±dzieli" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "pchnj" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "poci±gnij (Yank)" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "Rozmawiaj z" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "Spójrz na" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "w³±cz" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "wy³±cz" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "Strza³ka do góry" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "Pod¶wietl poprzedni dialog" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "Strza³ka w dó³" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "Pod¶wietl nastêpny dialog" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "Id¼" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "Ekwipunek" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "Przedmiot" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "Czarno-bia³y / Kolorowy" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "Oczy" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Jêzyk" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "Piê¶æ" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "Kopniêcie" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "Zbadaj" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "Zwyk³y kursor" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Comm" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "Zapis / Odczyt / Opcje" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "Reszta sterowania gry:" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "Ekwipunek:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "Przewiñ listê do góry" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "Przewiñ listê w dó³" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "Przedmiot u góry, z lewej" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "Przedmiot na dole, z lewej" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "Przedmiot u góry, z prawej" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "Przedmiot na dole, z prawej" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "Przedmiot na ¶rodku, z lewej" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "Przedmiot na ¶rodku, z prawej" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "Zmiana postaci:" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "Drugi dzieciak" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "Trzeci dzieciak" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "Sterowanie podczas walki (klaw. num.):" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "Odsuñ siê" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "Wysoki blok" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "¦rodkowy blok" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "Dolny blok" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "Wysokie uderzenie" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "¦rodkowe uderzenie" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "Niskie uderzenie" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Te s± dla Indy'ego po lewej." -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "Kiedy Indy jest po prawej," -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "7, 4, i 1 zostaj± zamienione" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "na 9, 6 i 3." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "Sterowanie dwup³atowcem (klaw. num.):" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "Leæ do góry, w lewo" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "Leæ w lewo" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "Leæ na dó³, w lewo" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "Leæ do góry" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "Leæ prosto" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "Leæ w dó³" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "Leæ do góry, w prawo" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "Leæ w prawo" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "Leæ w dó³, w prawo" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1683,7 +1787,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1694,7 +1798,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1705,7 +1809,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " @@ -1715,266 +1819,495 @@ msgstr "" "tego nie obs³uguje. Aby zagraæ, u¿yj \"Dodaj grê...\" z menu startowego " "ScummVM i wybierz podkatalog \"Maniac\" z katalogu gry Tentacle." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "~T~ryb zip aktywny" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "~P~rzej¶cia w³±czone" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "~E~fekty wody w³±czone" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Wznów grê:" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Wznów" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"Nie uda³o siê wczytaæ stanu gry z pliku:\n" +"\n" +"%s" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"Nie uda³o siê zapisaæ stanu gry do pliku:\n" +"\n" +"%s" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"Nie uda³o siê zapisaæ stanu gry do pliku:\n" +"\n" +"%s" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"Nie uda³o siê zapisaæ stanu gry do pliku:\n" +"\n" +"%s" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "Zapis:" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "Wczytaj grê:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "Zapis:" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "Emulator OPL MAME" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "Emulator OPL DOSBox" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "Brak muzyki" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Emulator d¼wiêku Amigi" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "Emulator AdLib" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Emulator Apple II GS (NIE ZAIMPLEMENTOWANY)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "Emulator d¼wiêku C64" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "Inicjalizacja emulatora MT-32" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "Emulator MT-32" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "Emulator brzêczyka" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "Emulator IBM PCjr" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "Emulator FM Towns" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Klawisze:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr " (Aktywny)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr " (Globalny)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr " (Gra)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "Windows MIDI" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "G³ówne menu ScummVM" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "~T~ryb dla leworêcznych" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "~S~terowanie walcz±cym Indym" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Wy¶wietl kursor myszy" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "Przyci±ganie do krawêdzi" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Przesuniêcie X ekranu do dotykania" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Przesuniêcie Y ekranu do dotykania" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "U¿yj kursora w stylu trackpada z laptopa do sterowania" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "Puknij raz, aby klikn±æ LPM; dwa razy, aby klikn±æ PPM" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Czu³o¶æ" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "Wstêpna skala górnego ekranu:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Skalowanie g³ównego ekranu:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "Skalowanie sprzêtowe (szybsze, ale ni¿szej jako¶ci)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "Skalowanie programowe (wy¿szej jako¶ci, ale wolniejsze)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Nieskalowany (musisz przewijaæ w lewo i prawo)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Jasno¶æ:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "D¼wiêk wysokiej jako¶ci (wolniejszy) (restart)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Nie wy³±czaj zasilania" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "Tryb touchpada w³±czony." + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "Tryb touchpada wy³±czony." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "Tryb touchpada w³±czony." -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "Tryb touchpada wy³±czony." -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Zwyk³y (bez skalowania)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Zwyk³y (bez skalowania)" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "W³±cz/wy³±cz korekcjê formatu obrazu" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "W³±cz/wy³±cz korekcjê formatu obrazu" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +#, fuzzy +msgid "Active graphics filter:" +msgstr "Prze³±czaj pomiêdzy filtrami grafiki" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "Renderer:" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL - normalny" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "OpenGL - zachow." -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL - pierw." -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "Obecny tryb wideo:" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Do góry" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "W dó³" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "W lewo" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "W prawo" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Klikniêcie LPM" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Klikniêcie PPM" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Strefa" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "Wielozadaniowy" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "Zmieñ postaæ" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "Pomiñ tekst" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Tryb szybki" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Debugger" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Menu globalne" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "Wirtualna klawiatura" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Mapper klawiszy" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "Chcesz wyj¶æ?" @@ -2095,131 +2428,193 @@ msgid "Network down" msgstr "Sieæ nie dzia³a" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "Inicjalizacja sieci" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +#, fuzzy +msgid "Timeout while initializing network" msgstr "Przekroczono limit czasu inicjalizacji sieci" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "Sieæ nie zosta³a zainicjalizowana (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Schowaj pasek narzêdzi" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Poka¿ klawiaturê" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "W³±cz/wy³±cz d¼wiêk" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Klikniêcie PPM" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Poka¿/ukryj kursor" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Swobodne rozgl±danie siê" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Przybli¿" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Oddal" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Przypisz klawisze" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "Kursor do góry" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "Kursor w dó³" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "Kursor w lewo" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "Kursor w prawo" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "Chcesz wczytaæ b±d¼ zapisaæ grê?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr " Na pewno chcesz wyj¶æ? " -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Klawiatura" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Obrót" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "U¿yj sterownika SDL " -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Obraz " -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "Wykonaæ automatyczne skanowanie?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "Przypisz dzia³anie PPM" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "Musisz przypisaæ klawisz do 'PPM', by zagraæ w tê grê" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "Przypisz chowanie paska narzêdzi" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "Musisz przypisaæ przycisk 'Schowaj pasek narzêdzi', by zagraæ w tê grê" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "Przypisz Przybli¿anie (opcjonalne)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "Przypisz Oddalenie (opcjonalne)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "Nie zapomnij przypisaæ klawisza 'Ukryj pasek narzêdzi', by widzieæ ca³y " "ekwipunek" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "Na pewno chcesz skasowaæ ten zapis?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "Piê¶æ" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "Chcesz wyj¶æ?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "G³o¶no¶æ" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "G³o¶no¶æ" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "" + +#~ msgid "Discovered %d new games." +#~ msgstr "Wykryto %d nowych gier." + +#~ msgid "Command line argument not processed" +#~ msgstr "Argument wiersza poleceñ nie zosta³ przetworzony" + +#~ msgid "FM Towns Emulator" +#~ msgstr "Emulator FM Towns" + #~ msgid "Invalid Path" #~ msgstr "Niew³a¶ciwa ¶cie¿ka" diff --git a/po/pt_BR.po b/po/pt_BR.po index 3379123cc4..a9a0d1412d 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: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2011-05-03 19:11-0300\n" "Last-Translator: Saulo Benigno <saulobenigno@gmail.com>\n" "Language-Team: ScummBR (www.scummbr.com) <scummbr@yahoo.com.br>\n" @@ -20,108 +20,118 @@ msgstr "" "X-Poedit-Country: BRAZIL\n" "X-Poedit-SourceCharset: iso-8859-1\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(desenvolvido em %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "Funções compiladas em:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Programas disponíveis:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "Acima" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Ir para o diretório anterior" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "Acima" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Cancelar" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Escolher" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Fechar" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Clique do mouse" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Mostrar teclado" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Remapear teclas" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Selecione uma ação para mapear" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Mapear" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Selecione uma ação e clique 'Mapear'" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Tecla associada: %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Tecla associada: nenhuma" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Por favor selecione uma ação" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Pressione a tecla para associar" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Jogo" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "Código:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -129,311 +139,311 @@ msgstr "" "Código identificador usado para se referir a jogos salvos e execução do jogo " "a partir da linha de comando" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "Código:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Nome:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "Título completo do jogo" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Nome:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Idioma:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" msgstr "Idioma do jogo. Isto não irá passar seu jogo Inglês para Português" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<padrão>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Sistema:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "Sistema que o jogo foi desenvolvido originalmente" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Sistema:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Gráficos" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "GFX" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "Sobrepor configuração global de gráficos" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "Sobrepor configuração global de gráficos" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "Áudio" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "Sobrepor configuração global de áudio" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "Sobrepor configuração global de áudio" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "Volume" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "Volume" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "Sobrepor configuração global de volume" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "Sobrepor configuração global de volume" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "Sobrepor configuração global de MIDI" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Sobrepor configuração global de MIDI" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "Sobrepor configuração global de MT-32" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Sobrepor configuração global de MT-32" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "Pastas" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "Pastas" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "Pasta do Jogo:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "Pasta do Jogo:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "Pasta de Extras" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "Especifique a pasta para dados utilizados no jogo" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "Pasta de Extras" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "Pasta para Salvar" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "Especifique onde guardar seus jogos salvos" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "Pasta para Salvar" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "Nenhum(a)" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Padrão" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "Selecione o SoundFont" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Selecione a pasta com os arquivos do jogo" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "Selecione a pasta adicional do jogo" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Selecione a pasta para os jogos salvos" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "Este código já esta sendo utilizado. Por favor, escolha outro." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~S~air" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "Sair do ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "So~b~re..." -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "Sobre o ScumnmVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~O~pções" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Alterar opções globais do ScummVM" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "~I~niciar" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "Iniciar jogo selecionado" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~C~arregar" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Carregar jogo salvo do jogo selecionado" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "~A~dicionar Jogo..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "Segure Shift para Multi-Adição" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "~E~ditar Jogo..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Alterar opções do jogo" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "~R~emover Jogo" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "" "Remover jogo da lista. Os arquivos de dados do jogo permanecem intactos" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~A~dicionar Jogo..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "~E~ditar Jogo..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~R~emover Jogo" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "Pesquisar na lista de jogos" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Pesquisar:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Limpar valor" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Carregar jogo:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Carregar" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -441,206 +451,223 @@ msgstr "" "Você realmente deseja adicionar vários jogos ao mesmo tempo? Isso poderá " "resultar em uma adição gigantesca de jogos." -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Sim" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "Não" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM não conseguiu abrir a pasta especificada!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM não encontrou nenhum jogo na pasta especificada!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Escolha o jogo:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "Você deseja realmente remover a configuração deste jogo?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "Este jogo não suporta abrir jogos a partir do menu principal." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM não conseguiu encontrar qualquer programa capaz de rodar o jogo " "selecionado!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Multi-Adição..." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Multi-Adição..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Adicionar Jogo..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Adicionar Jogo..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... progresso ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "Busca completa!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "Encontrado(s) %d novo(s) jogo(s)" +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "%d pasta(s) pesquisada(s)" -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "Encontrado(s) %d novo(s) jogo(s)" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Nunca" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "a cada 5 mins" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "a cada 10 mins" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "a cada 15 mins" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "a cada 30 mins" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "Nenhum(a)" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "Modo gráfico:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Renderização" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "Modos especiais de dithering suportados por alguns jogos" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Modo Tela Cheia" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Correção de proporção" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Correção de proporção para jogos 320x200" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "EGA sem dithering" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "Habilita EGA sem dithering em jogos com suporte" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Dispositivo pref.:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "Disp. de música:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 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:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 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:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Dispositivo pref.:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "Dispositivo de música:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "Emulador AdLib:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib é utilizado para música em vários jogos" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "Taxa de saída:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -648,62 +675,62 @@ msgstr "" "Maior valor especifica melhor qualidade de som, mas pode não ser suportado " "por sua placa de som" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "Dispositivo GM:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 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:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "Não usar música General MIDI" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "Usar o primeiro dispositivo disponível" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 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:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "Mixar AdLib/MIDI" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "Usar MIDI e AdLib juntos na geração de som" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "Ganho MIDI:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "Dispositivo MT-32:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 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:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Roland MT-32 real (desligar emulação GM)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -711,193 +738,194 @@ msgstr "" "Verifique se você quer usar o seu dispositivo de hardware de som compatível " "com Roland" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Roland MT-32 real (sem emulação GM)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "Ligar modo Roland GS" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" "Desliga o mapeamento General MIDI para jogos com trilha sonora Roland MT-32" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "Não usar música Roland MT-32" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Texto e Voz:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Voz" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Legendas" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Ambos" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Rapidez legendas:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Texto e Voz:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Voz" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "Legs" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "Ambos" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Mostrar legenda e vozes (dublagem)" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Velocidade das legendas:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "Volume da Música:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "Volume da Música:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Mudo" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "Volume dos Sons:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "Volume dos efeitos sonoros especiais" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "Volume dos Sons:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "Volume da Voz:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "Volume da Voz:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "Pasta do Tema" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "Pasta do Tema" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 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:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "Pasta de Plugins:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "Pasta de Plugins:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Outros" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Outros" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "Renderizador GUI:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Auto-Salvar:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Auto-Salvar:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Teclas" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "Idioma do GUI:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Linguagem do ScummVM GUI" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +msgid "You have to restart ScummVM before your changes will take effect." msgstr "Você tem que reiniciar o ScummVM para funcionar." -#: gui/options.cpp:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Selecione a pasta para o jogos salvos" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 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:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "Selecione a pasta para os temas da Interface de Uso Gráfico" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Selecione a pasta para os arquivos extras" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "Selecione a pasta para os plugins" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -905,781 +933,857 @@ msgstr "" "O tema que você selecionou não suporta seu idioma atual. Se você quiser usar " "este tema você precisa mudar para outro idioma." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "Sem data salva" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "Sem hora salva" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "Sem tempo de jogo salvo" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Excluir" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "Você realmente quer excluir este jogo salvo?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Data:" -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Hora:" -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Tempo de jogo:" -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Não-titulado arquivo de save" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Selecione um Tema" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "GFX desabilitado" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "GFX desabilitado" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Renderizador padrão (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Padrão (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Renderizador Anti-Serrilhamento (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "Anti-Serrilhamento (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Essa engine não suporta o nível de debug '%s'" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Menu" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Pular" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Pausar" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Pula linha" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "Erro ao executar o jogo:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "" "Não foi possível encontrar qualquer programa capaz de rodar o jogo " "selecionado" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "Nenhum erro" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "Dados do jogo não encontrado" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "ID de jogo não suportado" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "Modo de cores não suportado" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "Permissão para \"ler\" negada" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "Permissão para \"gravar\" negada" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "Caminho não existe" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "Caminho não é uma pasta" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "Caminho nao é um arquivo" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "Caminho não é um arquivo" -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "Falha na leitura" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Falha na gravação" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "Não foi possível encontrar engine adequada" -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "A engine atual não suporta salvar o progresso do jogo" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "Linha de comando não processada" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "Erro desconhecido" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules Green" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules Amber" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules Green" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules Amber" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "~V~oltar ao jogo" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~C~arregar" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~S~alvar" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~O~pções" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~A~juda" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "So~b~re" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "~V~oltar ao menu" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~V~oltar ao menu" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Salvar jogo:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Salvar" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "~C~ancelar" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~T~eclas" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "Modo de vídeo atual:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "Habilita correção de proporção" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~A~nterior" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~P~róximo" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~F~echar" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "Comandos de teclado comuns:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "Menu Salvar / Carregar" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "Pula linha de texto" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "Pula cena" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Espaço" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "Pausar jogo:" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "Carregar estado do jogo 1-10" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "Salvar estado do jogo 1-10" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Sair" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Enter" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "Habilita Tela Cheia" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "Volume da música" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "Velocidade do texto devagar / rápido" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "Simula botão esquerdo do mouse" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "Simula botão direito do mouse" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "Comandos de teclado especiais:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "Mostrar / Ocultar console" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "Inicia o depurador" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "Exibe o consumo de memória" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "Joga em modo rápido (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "Joga em modo super rápido (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "Habilita captura do mouse" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "Alterna entre os filtros gráficos" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "Aumenta / Diminui o fator de escala" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "Habilita correção de proporção" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* A utilização de ctrl-f ou" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " ctrl-g não é recomendada" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr " visto que poderá causar travas" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +#, fuzzy +msgid " or incorrect game behavior." msgstr " ou procedimentos estranhos nos jogos." -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "Tecer feitiços no teclado:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "Controles principais do jogo:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "Empurar" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "Puxar" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "Dar" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "Abrir" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "Ir para" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "Pegar" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "Usar" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "Ler" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "Nova criança" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "Ligar" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "Desligar" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "Andar até" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "Pegar" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "O que é" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "Destravar" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "Vestir" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "Decolar" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "Consertar" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "Trocar" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "Olhar" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "Falar" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "Viajar" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "Para Henry / Para Indy" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "toca dó menor no fio" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "toca D no fio" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "toca E no fio" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "toca F no fio" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "toca G no fio" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "toca A no fio" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "toca B no fio" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "toca dó maior no fio" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "Empurrar" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "Puxar" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "Falar" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "Olhar para" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "Ligar" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "Desligar" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "TeclaCima" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "Destacar diálogo anterior" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "TeclaBaixo" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "Destacar próximo diálogo" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "Andar" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "Inventário" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "Objeto" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "Preto e Branco / Cor" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "Olhos" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Língua" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "Soco" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "Chute" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "Examinar" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "Cursor normal" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Comunicador" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "Salvar / Carregar / Opções" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "Outros controles do jogo:" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "Inventário:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "Subir na lista" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "Descer na lista" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "Item da esquerda superior" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "Item da esquerda inferior" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "Item da direita superior" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "Item da direita inferior" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "Item do meio na esquerda" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "Item do meio na direita" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "Trocando personagens:" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "Segunda criança" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "Terceira criança" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "Controle de luta (teclado numérico):" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "Passo para trás" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "Defender em cima" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "Defender no meio" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "Defender embaixo" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "Soco em cima" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "Soco no meio" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "Soco embaixo" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Estes são para o Indy na esquerda." -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "Quando Indy estiver na direita," -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "7, 4 e 1 são trocados por" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "9, 6 e 3, respectivamente." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "Controles do avião (teclado numérico)" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "Voar para esquerda superior" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "Voar para esquerda" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "Voar para esquerda inferior" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "Voar para cima" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "Voar reto" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "Voar para baixo" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "Voar para direita superior" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "Voar para direita" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "Voar para direita inferior" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1690,7 +1794,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1701,7 +1805,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1712,7 +1816,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " @@ -1723,266 +1827,495 @@ msgstr "" "adicione o jogo normalmente no ScummVM. Ele se encontra em um diretório " "dentro da pasta do jogo Day of the Tentacle." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "Modo ~Z~ip ativado" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "Modo ~T~ransições ativado" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "Modo ~E~feitos de água ativado" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Restaurar jogo:" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Restaurar" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"Falha ao carregar o estado do jogo a partir do arquivo:\n" +"\n" +"%s" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"Falha ao salvar o estado do jogo para o arquivo:\n" +"\n" +"%s" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"Falha ao salvar o estado do jogo para o arquivo:\n" +"\n" +"%s" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"Falha ao salvar o estado do jogo para o arquivo:\n" +"\n" +"%s" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "Salvar jogo:" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "Carregar jogo:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "Salvar jogo:" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "Emulador MAME OPL" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "Emulador DOSBox OPL" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "Sem música" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Emulador Som Amiga" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "Emulador AdLib" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Emulador Apple II GS (NÃO IMPLEMENTADO)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "Emulador Som C64" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "Inicializando Emulador MT-32" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "Emulador MT-32" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "Emulador PC Speaker" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "Emulador IBM PCjr" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "Emulador FM Towns" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Mapa de Teclas:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr "(Ativo)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr "(Global)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr "(Jogo)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "MIDI Windows" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "Menu Principal ScummVM" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "Modo ~M~ão esquerda" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "Controles de luta ~I~ndy" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Mostrar o cursor do mouse" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "Ajustar às extremidades" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Equivalência do Toque X" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Equivalência do Toque Y" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "Usar controle de curso do touchpad" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "Um toque para o clique esquerdo, e toque duplo para o clique direito" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Sensibilidade" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "Topo inicial para a escala de tela:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Escala de tela principal:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "Escala pelo Hardware (rápido, mas com baixa qualidade)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "Escala pelo Software (qualidade boa, mas com lentidão)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Sem escala (você precisa rolar para a esquerda e para a direita)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Brilho:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "Som de alta qualidade (mais lento) (reiniciar)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Desativar desligamento" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "Modo Touchpad ligado." + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "Modo Touchpad desligado." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "Modo Touchpad ligado." -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "Modo Touchpad desligado." -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Normal (sem escala)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normal (sem escala)" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "Habilita correção de proporção" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "Habilita correção de proporção" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +#, fuzzy +msgid "Active graphics filter:" +msgstr "Alterna entre os filtros gráficos" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "Renderização" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL Normal" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "OpenGL Conserve" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL Original" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "Modo de vídeo atual:" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Cima" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "Baixo" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "Esquerda" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "Direita" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Clique com o botão esquerdo" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Clique com o botão direito" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Zona" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "Multi-função" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "Trocador de caracteres" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "Pular texto" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Modo rápido" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Depurador" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Menu global" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "Teclado virtual" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Mapeador de Teclas" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "Você deseja sair ?" @@ -2103,134 +2436,196 @@ msgid "Network down" msgstr "Conexão caiu" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "Inicialização de rede" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +#, fuzzy +msgid "Timeout while initializing network" msgstr "Tempo limite para iniciar a conexão de rede" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "Rede não inicializada (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Ocultar a barra de ferramentas" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Mostrar Teclado" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "Som on/off" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Clique com o botão direito" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Mostrar/Ocultar seu cursor" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Olhar livre" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Zoom para cima" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Zoom para baixo" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Botão de ligadura" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "Cursor para cima" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "Cursor para baixo" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "Cursor para a esquerda" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "Cursor para a direita" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "Você deseja carregar ou salvar o jogo?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr " Tem certeza de que deseja sair? " -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Teclado" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Rotacionar" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "Usando driver SDL" -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Tela" -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "Você quer executar uma busca automática?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "Mapear ação \"Clique da Direita\"" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "" "Você precisa mapear uma tecla para ação do \"Clique da Direita\" nesse jogo" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "Mapear \"Ocultar barra de ferramentas\"" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" "Você precisa mapear uma tecla para ação do \"Ocultar barra de ferramentas\" " "nesse jogo" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "Mapear Zoom para Cima (opcional)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "Mapear Zoom para Baixo (opcional)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "Não se esqueça de mapear uma tecla para \"Ocultar a barra de ferramentas\" " "para ver todo o seu inventário" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "Você realmente quer excluir este jogo salvo?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "Soco" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "Você deseja sair ?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "Volume" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "Volume" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "" + +#~ msgid "Discovered %d new games." +#~ msgstr "Encontrado(s) %d novo(s) jogo(s)" + +#~ msgid "Command line argument not processed" +#~ msgstr "Linha de comando não processada" + +#~ msgid "FM Towns Emulator" +#~ msgstr "Emulador FM Towns" + #~ msgid "Invalid Path" #~ msgstr "Pasta inválida" diff --git a/po/ru_RU.po b/po/ru_RU.po index fdc7bd8fa2..9600a810ea 100755..100644 --- a/po/ru_RU.po +++ b/po/ru_RU.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: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2010-06-13 20:55+0300\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Russian\n" @@ -18,108 +18,118 @@ msgstr "" "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:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(áÞÑàÐÝ %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "²ÚÛîçÕÝÝëÕ Ò ÑØÛÔ ÞßæØØ:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "´ÞáâãßÝëÕ ÔÒØÖÚØ:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "²ÒÕàå" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "¿ÕàÕÙâØ ÝÐ ÔØàÕÚâÞàØî ãàÞÒÝÕÜ ÒëèÕ" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "²ÒÕàå" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "¾âÜÕÝÐ" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "²ëÑàÐâì" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "·ÐÚàëâì" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "ºÛØÚ Üëèìî" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "¿ÞÚÐ×Ðâì ÚÛÐÒØÐâãàã" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "¿ÕàÕÝÐ×ÝÐçØâì ÚÛÐÒØèØ" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "²ëÑÕàØâÕ ÔÕÙáâÒØÕ ÔÛï ÝÐ×ÝÐçÕÝØï" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "½Ð×ÝÐçØâì" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "²ëÑÕàØâÕ ÔÕÙáâÒØÕ Ø ÚÛØÚÝØâÕ '½Ð×ÝÐçØâì'" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "½Ð×ÝÐçÕÝÝÐï ÚÛÐÒØèÐ : %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "½Ð×ÝÐçÕÝÝÐï ÚÛÐÒØèÐ : ÝÕâ" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "¿ÞÖÐÛãÙáâÐ, ÒëÑÕàØâÕ ÔÕÙáâÒØÕ" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "½ÐÖÜØâÕ ÚÛÐÒØèã ÔÛï ÝÐ×ÝÐçÕÝØï" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "¸ÓàÐ" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -127,29 +137,29 @@ msgstr "" "ºÞàÞâÚØÙ ØÔÕÝâØäØÚÐâÞà, ØáßÞÛì×ãÕÜëÙ ÔÛï ØÜÕÝ áÞåàÐÝÕÝØÙ ØÓà Ø ÔÛï ×ÐßãáÚÐ " "Ø× ÚÞÜÐÝÔÝÞÙ áâàÞÚØ" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "½Ð×ÒÐÝØÕ:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "¿ÞÛÝÞÕ ÝÐ×ÒÐÝØÕ ØÓàë" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "½Ð×Ò:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Ï×ëÚ:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" @@ -157,282 +167,282 @@ msgstr "" "Ï×ëÚ ØÓàë. ¸×ÜÕÝÕÝØÕ íâÞÓÞ ßÐàÐÜÕâàÐ ÝÕ ßàÕÒàÐâØâ ØÓàã ÝÐ ÐÝÓÛØÙáÚÞÜ Ò " "àãááÚãî" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<ßÞ ãÜÞÛçÐÝØî>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "¿ÛÐâäÞàÜÐ:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "¿ÛÐâäÞàÜÐ, ÔÛï ÚÞâÞàÞÙ ØÓàÐ ÑëÛÐ Ø×ÝÐçÐÛìÝÞ àÐ×àÐÑÞâÐÝÐ" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "¿ÛÐâäÞàÜÐ:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "³àÐäØÚÐ" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "³àä" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "¿ÕàÕÚàëâì ÓÛÞÑÐÛìÝëÕ ãáâÐÝÞÒÚØ ÓàÐäØÚØ" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "¿ÕàÕÚàëâì ÓÛÞÑÐÛìÝëÕ ãáâÐÝÞÒÚØ ÓàÐäØÚØ" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "°ãÔØÞ" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "¿ÕàÕÚàëâì ÓÛÞÑÐÛìÝëÕ ãáâÐÝÞÒÚØ ÐãÔØÞ" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "¿ÕàÕÚàëâì ÓÛÞÑÐÛìÝëÕ ãáâÐÝÞÒÚØ ÐãÔØÞ" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "³àÞÜÚÞáâì" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "³àÞÜÚ" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "¿ÕàÕÚàëâì ÓÛÞÑÐÛìÝëÕ ãáâÐÝÞÒÚØ ÓàÞÜÚÞáâØ" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "¿ÕàÕÚàëâì ÓÛÞÑÐÛìÝëÕ ãáâÐÝÞÒÚØ ÓàÞÜÚÞáâØ" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "¿ÕàÕÚàëâì ÓÛÞÑÐÛìÝëÕ ãáâÐÝÞÒÚØ MIDI" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "¿ÕàÕÚàëâì ÓÛÞÑÐÛìÝëÕ ãáâÐÝÞÒÚØ MIDI" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "¿ÕàÕÚàëâì ÓÛÞÑÐÛìÝëÕ ãáâÐÝÞÒÚØ MT-32" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "¿ÕàÕÚàëâì ÓÛÞÑÐÛìÝëÕ ãáâÐÝÞÒÚØ MT-32" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "¿ãâØ" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "¿ãâØ" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "¿ãâì Ú ØÓàÕ:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "³ÔÕ ØÓàÐ:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "´Þß. ßãâì:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "ÃÚÐ×ëÒÐÕâ ßãâì Ú ÔÞßÞÛÝØâÕÛìÝëÜ äÐÙÛÐÜ ÔÐÝÝëå ÔÛï ØÓàë" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "´Þß. ßãâì:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "ÁÞåàÐÝÕÝØï ØÓà:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "ÃÚÐ×ëÒÐÕâ ßãâì Ú áÞåàÐÝÕÝØïÜ ØÓàë" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "¿ãâì áÞåà:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "½Õ ×ÐÔÐÝ" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "¿Þ ãÜÞÛçÐÝØî" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "²ëÑÕàØâÕ SoundFont" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "²ëÑÕàØâÕ ÔØàÕÚâÞàØî á äÐÙÛÐÜØ ØÓàë" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "²ëÑÕàØâÕ ÔÞßÞÛÝØâÕÛìÝãî ÔØàÕÚâÞàØî ØÓàë" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "²ëÑÕàØâÕ ÔØàÕÚâÞàØî ÔÛï áÞåàÐÝÕÝØÙ" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "ÍâÞâ ID ØÓàë ãÖÕ ØáßÞÛì×ãÕâáï. ¿ÞÖÐÛãÙáâÐ, ÒëÑÕàØâÕ ÔàãÓÞÙ." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~²~ëåÞÔ" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "²ëåÞÔ Ø× ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "¾ ß~à~ÞÓàÐÜÜÕ..." -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "¾ ßàÞÓàÐÜÜÕ ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~¾~ßæØØ..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "¸×ÜÕÝØâì ÓÛÞÑÐÛìÝëÕ ÞßæØØ ScummVM" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "¿~ã~áÚ" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "·ÐßãáâØâì ÒëÑàÐÝÝãî ØÓàã" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~·~ÐÓàãרâì..." -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "·ÐÓàãרâì áÞåàÝÕÝØÕ ÔÛï ÒëÑàÐÝÝÞÙ ØÓàë" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "~´~ÞÑ. ØÓàã..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "ÃÔÕàÖØÒÐÙâÕ ÚÛÐÒØèã Shift ÔÛï âÞÓÞ, çâÞÑë ÔÞÑÐÒØâì ÝÕáÚÞÛìÚÞ ØÓà" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "¾~ß~æØØ ØÓàë..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "¸×ÜÕÝØâì ÞßæØØ ØÓàë" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "~Ã~ÔÐÛØâì ØÓàã" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "ÃÔÐÛØâì ØÓàã Ø× áߨáÚÐ. ½Õ ãÔÐÛïÕâ ØÓàã á ÖÕáâÚÞÓÞ ÔØáÚÐ" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~´~ÞÑ. ØÓàã..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "¾~ß~æØØ ØÓàë..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~Ã~ÔÐÛØâì ØÓàã" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "¿ÞØáÚ Ò áߨáÚÕ ØÓà" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "¿ÞØáÚ:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "¾çØáâØâì ×ÝÐçÕÝØÕ" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "·ÐÓàãרâì ØÓàã:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "·ÐÓàãרâì" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -440,206 +450,224 @@ msgstr "" "²ë ÔÕÙáâÒØâÕÛìÝÞ åÞâØâÕ ×ÐßãáâØâì ÔÕâÕÚâÞà ÒáÕå ØÓà? ÍâÞ ßÞâÕÝæØÐÛìÝÞ ÜÞÖÕâ " "ÔÞÑÐÒØâì ÑÞÛìèÞÕ ÚÞÛØçÕáâÒÞ ØÓà." -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "´Ð" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "½Õâ" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM ÝÕ ÜÞÖÕâ ÞâÚàëâì ãÚÐ×ÐÝÝãî ÔØàÕÚâÞàØî!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM ÝÕ ÜÞÖÕâ ÝÐÙâØ ØÓàã Ò ãÚÐ×ÐÝÝÞÙ ÔØàÕÚâÞàØØ!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "²ëÑÕàØâÕ ØÓàã:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "²ë ÔÕÙáâÒØâÕÛìÝÞ åÞâØâÕ ãÔÐÛØâì ÝÐáâàÞÙÚØ ÔÛï íâÞÙ ØÓàë?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "ÍâÐ ØÓàÐ ÝÕ ßÞÔÔÕàÖØÒÐÕâ ×ÐÓàã×Úã áÞåàÐÝÕÝØÙ çÕàÕ× ÓÛÐÒÝÞÕ ÜÕÝî." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM ÝÕ áÜÞÓ ÝÐÙâØ ÔÒØÖÞÚ ÔÛï ×ÐßãáÚÐ ÒëÑàÐÝÝÞÙ ØÓàë!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "¼ÝÞÓÞ ØÓà..." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "¼ÝÞÓÞ ØÓà..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "½ÞÒÐï ØÓàÐ" -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "½ÞÒÐï ØÓàÐ..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... Øéã ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "¿ÞØáÚ ×ÐÚÞÝçÕÝ!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "½ÐÙÔÕÝÞ %d ÝÞÒëå ØÓà." +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "¿àÞáÜÞâàÕÝÞ %d ÔØàÕÚâÞàØÙ ..." -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "½ÐÙÔÕÝÞ %d ÝÞÒëå ØÓà ..." -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "½ØÚÞÓÔÐ" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "ÚÐÖÔëÕ 5 ÜØÝãâ" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "ÚÐÖÔëÕ 10 ÜØÝãâ" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "ÚÐÖÔëÕ 15 ÜØÝãâ" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "ÚÐÖÔëÕ 30 ÜØÝãâ" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 Ú³æ" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11 Ú³æ" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 Ú³æ" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 Ú³æ" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 Ú³æ" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "½Õ ×ÐÔÐÝ" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "³àÐä. àÕÖØÜ:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "ÀÕÖØÜ àÐáâàÐ:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "ÁßÕæØÐÛìÝëÕ àÕÖØÜë àÕÝÔÕàØÝÓÐ, ßÞÔÔÕàÖØÒÐÕÜëÕ ÝÕÚÞâÞàëÜØ ØÓàÐÜØ" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "¿ÞÛÝÞíÚàÐÝÝëÙ àÕÖØÜ" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "ºÞààÕÚæØï áÞÞâÝÞèÕÝØï áâÞàÞÝ" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "ºÞààÕÚâØàÞÒÐâì áÞÞâÝÞèÕÝØÕ áâÞàÞÝ ÔÛï ØÓà á àÐ×àÕèÕÝØÕÜ 320x200" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "EGA ÑÕ× àÐáâàÐ" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "" -"²ÚÛîçÐÕâ àÕÖØÜ ÑÕ× àÐáâàØàÞÒÐÝØï Ò EGA ØÓàÐå, ÚÞâÞàëÕ ßÞÔÔÕàÖØÒÐîâ âÐÚÞÙ àÕÖØÜ" +"²ÚÛîçÐÕâ àÕÖØÜ ÑÕ× àÐáâàØàÞÒÐÝØï Ò EGA ØÓàÐå, ÚÞâÞàëÕ ßÞÔÔÕàÖØÒÐîâ âÐÚÞÙ " +"àÕÖØÜ" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "¿àÕÔßÞçØâÐÕÜÞÕ:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "·ÒãÚÞÒÞÕ ãáâ-ÒÞ:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 msgid "Specifies preferred sound device or sound card emulator" msgstr "" "ÃÚÐ×ëÒÐÕâ ßàÕÔßÞçØâÐÕÜÞÕ ×ÒãÚÞÒÞÕ ãáâàÞÙáâÒÞ ØÛØ íÜãÛïâÞà ×ÒãÚÞÒÞÙ ÚÐàâë" -#: gui/options.cpp:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 msgid "Specifies output sound device or sound card emulator" msgstr "ÃÚÐ×ëÒÐÕâ ÒëåÞÔÝÞÕ ×ÒãÚÞÒÞÕ ãáâàÞÙáâÒÞ ØÛØ íÜãÛïâÞà ×ÒãÚÞÒÞÙ ÚÐàâë" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "¿àÕÔßÞçØâÐÕÜÞÕ:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "·ÒãÚÞÒÞÕ ãáâ-ÒÞ:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "ÍÜãÛïâÞà AdLib:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "·ÒãÚÞÒÐï ÚÐàâÐ AdLib ØáßÞÛì×ãÕâáï ÜÝÞÓØÜØ ØÓàÐÜØ" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "ÇÐáâÞâÐ ×ÒãÚÐ:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -647,64 +675,64 @@ msgstr "" "±¾ÛìèØÕ ×ÝÐçÕÝØï ×ÐÔÐîâ ÛãçèÕÕ ÚÐçÕáâÒÞ ×ÒãÚÐ, ÞÔÝÐÚÞ ÞÝØ ÜÞÓãâ ÝÕ " "ßÞÔÔÕàÖØÒÐâìáï ÒÐèÕÙ ×ÒãÚÞÒÞÙ ÚÐàâÞÙ" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "ÃáâàÞÙáâÒÞ GM:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "Specifies default sound device for General MIDI output" msgstr "ÃÚÐ×ëÒÐÕâ ÒëåÞÔÝÞÕ ×ÒãÚÞÒÞÕ ãáâàÞÙáâÒÞ ÔÛï MIDI" -#: gui/options.cpp:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "½Õ ØáßÞÛì×ÞÒÐâì Üã×ëÚã ÔÛï General MIDI" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "¸áßÞÛì×ÞÒÐâì ßÕàÒÞÕ ÔÞáâãßÝÞÕ ãáâàÞÙáâÒÞ" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "" "SoundFontë ßÞÔÔÕàÔÖØÒÐîâáï ÝÕÚÞâÞàëÜØ ×ÒãÚÞÒëÜØ ÚÐàâÐÜØ, Fluidsynth Ø " "Timidity" -#: gui/options.cpp:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "ÁÜÕèÐÝÝëÙ àÕÖØÜ AdLib/MIDI" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "¸áßÞÛì×ÞÒÐâì Ø MIDI Ø AdLib ÔÛï ÓÕÝÕàÐæØØ ×ÒãÚÐ" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "ÃáØÛÕÝØÕ MIDI:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "Ãáâà. MT-32:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" msgstr "" "ÃÚÐ×ëÒÐÕâ ×ÒãÚÞÒÞÕ ãáâàÞÙáâÒÞ ßÞ ãÜÞÛçÐÝØï ÔÛï ÒëÒÞÔÐ ÝÐ Roland MT-32/LAPC1/" "CM32l/CM64" -#: gui/options.cpp:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "½ÐáâÞïéØÙ Roland MT-32 (×ÐßàÕâØâì íÜãÛïæØî GM)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -712,193 +740,194 @@ msgstr "" "¾âÜÕâìâÕ, ÕáÛØ ã ÒÐá ßÞÔÚÛîçÕÝÞ Roland-áÞÒÜÕáâØÜÞÕ ×ÒãÚÞÒÞÕ ãáâàÞÙáâÒÞ Ø Òë " "åÞâØâÕ ÕÓÞ ØáßÞÛì×ÞÒÐâì" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "½ÐáâÞïéØÙ Roland MT-32 (×ÐßàÕâØâì GM)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "²ÚÛîçØâì àÕÖØÜ Roland GS" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" "²ëÚÛîçÐÕâ ÜÐßߨÝÓ General MIDI ÔÛï ØÓà á ×ÒãÚÞÒÞÙ ÔÞàÞÖÚÞÙ ÔÛï Roland MT-32" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "½Õ ØáßÞÛì×ÞÒÐâì Üã×ëÚã ÔÛï MT-32" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "ÂÕÚáâ Ø Þ×ÒãçÚÐ:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "¾×ÒãçÚÐ" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "ÁãÑâØâàë" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "¾ÑÐ" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "ÁÚÞàÞáâì âØâàÞÒ:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "ÂÕÚáâ Ø Þ×ÒãçÚÐ:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "¾×Ò" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "ÁãÑ" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "¾ÑÐ" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "¿ÞÚÐ×ëÒÐâì áãÑâØâàë Ø ÒÞáßàÞØ×ÒÞÔØâì àÕçì" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "ÁÚÞàÞáâì âØâàÞÒ:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "³àÞÜÚ. Üã×ëÚØ:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "³àÞÜÚ. Üã×ëÚØ:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "²ëÚÛ. Òáñ" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "³àÞÜÚÞáâì SFX:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "³àÞÜÚÞáâì áßÕæØÐÛìÝëå ×ÒãÚÞÒëå íääÕÚâÞÒ" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "³àÞÜÚ. SFX:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "³àÞÜÚ. Þ×ÒãçÚØ:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "³àÞÜÚ. Þ×ÒãçÚØ:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "¿ãâì Ú âÕÜÐÜ:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "³ÔÕ âÕÜë:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "ÃÚÐ×ëÒÐÕâ ßãâì Ú ÔÞßÞÛÝØâÕÛìÝëÜ äÐÙÛÐÜ ÔÐÝÝëå, ØáßÞÛì×ãÕÜëå ÒáÕÜØ ØÓàÐÜØ, " "ÛØÑÞ ScummVM" -#: gui/options.cpp:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "¿ãâì Ú ßÛÐÓØÝÐÜ:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "¿ãâì Ú ßÛÐÓØÝÐÜ:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "ÀÐ×ÝÞÕ" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "ÀÐ×ÝÞÕ" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "ÂÕÜÐ:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "ÀØáÞÒÐÛÚÐ GUI:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "°ÒâÞáÞåàÐÝÕÝØÕ:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "°ÒâÞáÞåà.:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "ºÛÐÒØèØ" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "Ï×ëÚ GUI:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Ï×ëÚ ÓàÐäØçÕáÚÞÓÞ ØÝâÕàäÕÙáÐ ScummVM" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +msgid "You have to restart ScummVM before your changes will take effect." msgstr "²ë ÔÞÛÖÝë ßÕàÕ×ÐßãáâØâì ScummVM çâÞÑë ßàØÜÕÝØâì Ø×ÜÕÝÕÝØï." -#: gui/options.cpp:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "²ëÑÕàØâÕ ÔØàÕÚâÞàØî ÔÛï áÞåàÐÝÕÝØÙ" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 msgid "The chosen directory cannot be written to. Please select another one." msgstr "½Õ ÜÞÓã ߨáÐâì Ò ÒëÑàÐÝÝãî ÔØàÕÚâÞàØî. ¿ÞÖÐÛãÙáâÐ, ãÚÐÖØâÕ ÔàãÓãî." -#: gui/options.cpp:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "²ëÑÕàØâÕ ÔØàÕÚâÞàØî ÔÛï âÕÜ GUI" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "²ëÑÕàØâÕ ÔØàÕÚâÞàØî á ÔÞßÞÛÝØâÕÛìÝëÜØ äÐÙÛÐÜØ" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "²ëÑÕàØâÕ ÔØàÕÚâÞàØî á ßÛÐÓØÝÐÜØ" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -906,779 +935,855 @@ msgstr "" "ÂÕÜÐ, ÒëÑàÐÝÝÐï ÒÐÜØ, ÝÕ ßÞÔÔÕàÖØÒÐÕâ ÒëÑàÐÝÝëÙ ï×ëÚ. µáÛØ Òë åÞâØâÕ " "ØáßÞÛì×ÞÒÐâì íâã âÕÜã, ÒÐÜ ÝÕÞÑåÞÔØÜÞ áÝÐçÐÛÐ ßÕàÕÚÛîçØâìáï ÝÐ ÔàãÓÞÙ ï×ëÚ." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "´ÐâÐ ÝÕ ×ÐߨáÐÝÐ" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "²àÕÜï ÝÕ ×ÐߨáÐÝÞ" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "²àÕÜï ØÓàë ÝÕ ×ÐߨáÐÝÞ" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "ÃÔÐÛØâì" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "²ë ÔÕÙáâÒØâÕÛìÝÞ åÞâØâÕ ãÔÐÛØâì íâÞ áÞåàÐÝÕÝØÕ?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "´ÐâÐ: " -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "²àÕÜï: " -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "²àÕÜï ØÓàë: " -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "ÁÞåàÐÝÕÝØÕ ÑÕ× ØÜÕÝØ" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "²ëÑÕàØâÕ âÕÜã" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "±Õ× ÓàÐäØÚØ" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "±Õ× ÓàÐäØÚØ" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "ÁâÐÝÔÐàâÝëÙ àÐáâÕàØ×ÐâÞà (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "ÁâÐÝÔÐàâÝëÙ àÐáâÕàØ×ÐâÞà (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "ÀÐáâÕàØ×ÐâÞà áÞ áÓÛÐÖØÒÐÝØÕÜ (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "ÀÐáâÕàØ×ÐâÞà áÞ áÓÛÐÖØÒÐÝØÕÜ (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "´ÒØÖÞÚ ÝÕ ßÞÔÔÕàÖØÒÐÕâ ãàÞÒÕÝì ÞâÛÐÔÚØ '%s'" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "¼ÕÝî" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "¿àÞßãáâØâì" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "¿Ðã×Ð" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "¿àÞßãáâØâì áâàÞÚã" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "¾èØÑÚÐ ×ÐßãáÚÐ ØÓàë:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "½Õ ÜÞÓã ÝÐÙâØ ÔÒØÖÞÚ ÔÛï ×ÐßãáÚÐ ÒëÑàÐÝÝÞÙ ØÓàë" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "½Õâ ÞèØÑÚØ" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "½Õâ äÐÙÛÞÒ ØÓàë" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "Game id ÝÕ ßÞÔÔÕàÖØÒÐÕâáï" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "½ÕßÞÔÔÕàÖØÒÐÕÜëÙ àÕÖØÜ æÒÕâÐ" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "½ÕÔÞáâÐâÞçÝÞ ßàÐÒ ÔÛï çâÕÝØï" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "½ÕÔÞáâÐâÞçÝÞ ßàÐÒ ÔÛï ×ÐߨáØ" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "¿ãâì ÝÕ ÝÐÙÔÕÝ" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "¿ãâì ÝÕ ïÒÛïÕâáï ÔØàÕÚâÞàØÕÙ" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "¿ãâì ÝÕ ïÒÛïÕâáï äÐÙÛÞÜ" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "½Õ ÜÞÓã áÞ×ÔÐâì äÐÙÛ" -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "¾èØÑÚÐ çâÕÝØï ÔÐÝÝëå" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "¾èØÑÚÐ ×ÐßØáØ ÔÐÝÝëå" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "½Õ ÜÞÓã ÝÐÙâØ ßÞÔåÞÔïéØÙ ßÛÐÓØÝ ÔÛï ÔÒØÖÚÐ" -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "´ÒØÖÞÚ ÝÕ ßÞÔÔÕàÖØÒÐÕâ áÞåàÐÝÕÝØï" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "¿ÐàÐÜÕâàë ÚÞÜÐÝÔÝÞÙ áâàÞÚØ ÝÕ ÞÑàÐÑÞâÐÝë" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "½ÕØ×ÒÕáâÝÐï ÞèØÑÚÐ" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules ·ÕÛñÝëÙ" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules ÏÝâÐàÝëÙ" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules ·ÕÛñÝëÙ" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules ÏÝâÐàÝëÙ" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "¿àÞÔÞÛ~Ö~Øâì" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~·~ÐÓàãרâì" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~·~ÐߨáÐâì" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~¾~ßæØØ" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~¿~ÞÜÞéì" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "¾ ßàÞ~Ó~àÐÜÜÕ" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "~²~ëÙâØ Ò ÓÛÐÒÝÞÕ ÜÕÝî" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~²~ ÓÛÐÒÝÞÕ ÜÕÝî" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "ÁÞåàÐÝØâì ØÓàã:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "ÁÞåàÐÝØâì" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "¾~â~ÜÕÝÐ" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~º~ÛÐÒØèØ" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "ÂÕÚãéØÙ ÒØÔÕÞàÕÖØÜ:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "¿ÕàÕÚÛîçÕÝØÕ ÚÞààÕ򾯯 áÞÞâÝÞèÕÝØï áâÞàÞÝ" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~¿~àÕÔ" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~Á~ÛÕÔ" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~·~ÐÚàëâì" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "¾ÑéØÕ ÚÛÐÒØÐâãàÝëÕ ÚÞÜÐÝÔë:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "´ØÐÛÞÓ ×ÐßØáØ / çâÕÝØï" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "¿àÞßãáâØâì áâàÞÚã" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "¿àÞßãáâØâì ×ÐáâÐÒÚã" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "¿àÞÑÕÛ" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "¿Ðã×Ð ØÓàë" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "·ÐÓàãרâì ØÓàã 1-10" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "ÁÞåàÐÝØâì ØÓàã 1-10" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "²ëåÞÔ" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "²ÒÞÔ" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" -msgstr "¿ÕàÕÚÛîçØâì ÝÐ ÒÕáì íÚàÐÝ" +msgstr "¿ÕàÕÚÛîçØâì ÝÐ ÒÕáì íÚàÐÝ" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "³àÞÜÚÞáâì Üã×ëÚØ ãÒÕÛØçØâì/ãÜÕÝìèØâì" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "ÁÚÞàÞáâì âÕÚáâÐ ÑëáâàÕÕ/ÜÕÔÛÕÝÝÕÕ" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "ÍÜãÛïæØï ÝÐÖÐâØï ÛÕÒÞÙ ÚÛÐ񯏯 ÜëèØ" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "ÍÜãÛïæØï ßàÐÒÞÙ ÚÛÐ񯏯 ÜëèØ" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "ÁßÕæØÐÛìÝÒÕ ÚÛÐÒØÐâãàÝëÕ ÚÞÜÐÝÔë:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "¿ÞÚÐ×Ðâì/ÃÑàÐâì ÚÞÝáÞÛì" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "·ÐßãáÚ ÞâÛÐÔçØÚÐ" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "¿ÞÚÐ×Ðâì ßÞâàÕÑÛÕÝØÕ ßÐÜïâØ" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "·ÐßãáâØâì ÑëáâàëÙ àÕÖØÜ (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "·ÐßãáâØâì ÞçÕÝì ÑëáâàëÙ àÕÖØÜ (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "¿ÕàÕÚÛîçÕÝØÕ ßÕàÕåÒÐâÐ ÜëèØ" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "¿ÕàÕÚÛîçÕÝØÕ ÜÕÖÔã ÓàÐäØçÕáÚØÜØ äØÛìâàÐÜØ" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "ÃÒÕÛØçØâì/ãÜÕÝìèØâì ÜÐáèâÐÑ" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "¿ÕàÕÚÛîçÕÝØÕ ÚÞààÕ򾯯 áÞÞâÝÞèÕÝØï áâÞàÞÝ" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* ¸áßÞÛì×ÞÒÐÝØÕ ctrl-f Ø" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " ctrl-g ÝÕ àÕÚÞÜÕÝÔãÕâáï" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr " âÐÚ ÚÐÚ ÞÝØ ÜÞÓãâ ßàØÒÕáâØ Ú" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +#, fuzzy +msgid " or incorrect game behavior." msgstr " ÝÕÒÕàÝÞÙ àÐÑÞâÕ ØÓàë." -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "¸×ÜÕÝïÕÜëÕ çÕàÝÞÒØÚØ ÝÐ ÚÛÐÒØÐâãàÕ:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "¾áÝÞÒÝÞÕ ãßàÐÒÛÕÝØÕ ØÓàÞÙ:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "ÂÞÛÚÐâì" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "ÂïÝãâì" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "´Ðâì" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "¾âÚàëâì" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "¸ÔâØ" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "²×ïâì" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "¸áßÞÛì×ÞÒÐâì" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "ÇØâÐâì" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "½ÞÒëÙ ßÕàá" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "²ÚÛîçØâì" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "²ëÚÛîçØâì" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "¸ÔâØ Ú" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "¿ÞÔÝïâì" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "ÇâÞ âÐÚÞÕ" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "¾âÚàëâì" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "¿ÞÛÞÖØâì" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "¿ÞÔÝïâì" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "¸áßàÐÒØâì" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "¿ÕàÕÚÛîçØâì" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "ÁÜÞâàÕâì" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "³ÞÒÞàØâì" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "¿ãâÕèÕáâÒÞÒÐâì" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "³ÕÝàØ/¸ÝÔØ" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "ØÓàÐâì ÔÞ ÜØÝÞà ÝÐ ßàïÛÚÕ" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "ØÓàÐâì àÕ ÝÐ ßàïÛÚÕ" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "ØÓàÐâì ÜØ ÝÐ ßàïÛÚÕ" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "ØÓàÐâì äÐ ÝÐ ßàïÛÚÕ" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "ØÓàÐâì áÞÛì ÝÐ ßàïÛÚÕ" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "ØÓàÐâì Ûï ÝÐ ßàïÛÚÕ" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "ØÓàÐâì áØ ÝÐ ßàïÛÚÕ" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "ØÓàÐâì ÔÞ ÜÐÖÞà ÝÐ ßàïÛÚÕ" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "âÞÛÚÐâì" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "âïÝãâì (æÕßÛïâì)" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "³ÞÒÞàØâì á" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "ÁÜÞâàÕâì ÝÐ" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "ÒÚÛîçØâì" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "ÒëÚÛîçØâì" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "²ÒÕàå" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "¿ÞÔáÒÕâØâì ßàÕÔëÔãéØÙ ÔØÐÛÞÓ" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "²ÝØ×" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "¿ÞÔáÒÕâØâì áÛÕÔãîéØÙ ÔØÐÛÞÓ" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "¸ÔâØ" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "¸ÝÒÕÝâÐàì" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "¾ÑêÕÚâ" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "ÇÕàÝÞ-ÑÕÛëÙ/ÆÒÕâÝÞÙ" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "³ÛÐ×Ð" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Ï×ëÚ" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "ÃÔÐà" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "½ÞÓÞÙ" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "¿àÞÒÕàØâì" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "¾ÑëçÝëÙ ÚãàáÞà" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "ºÞÜÜ" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "·ÐÓàãרâì/ÁÞåàÐÝØâì/½ÐáâàÞÙÚØ" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "¾áâÐÛìÝÞÕ ãßàÐÒÛÕÝØÕ ØÓàÞÙ:" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "¸ÝÒÕÝâÐàì:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "¿àÞÚàãâØâì áߨáÞÚ ÒÒÕàå" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "¿àÞÚàãâØâì áߨáÞÚ ÒÝØ×" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "²ÕàåÝØÙ ÛÕÒëÙ ßàÕÔÜÕâ" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "½ØÖÝØÙ ÛÕÒëÙ ßàÕÔÜÕâ" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "²ÕàåÝØÙ ßàÐÒëÙ ßàÕÔÜÕâ" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "½ØÖÝØÙ ßàÐÒëÙ ßàÕÔÜÕâ" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "ÁàÕÔÝØÙ ÛÕÒëÙ ßàÕÔÜÕâ" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "ÁàÕÔÝØÙ ßàÐÒëÙ ßàÕÔÜÕâ" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "ÁÜÕÝÐ ÓÕàÞï:" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "²âÞàÞÙ ÓÕàÞÙ" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "ÂàÕâØÙ ÓÕàÞÙ" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "ÃßàÐÒÛÕÝØÕ ÑÞÕÜ (æØäàÞÒëÕ ÚÛÐÒØèØ)" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "ÈÐÓ ÝÐ×ÐÔ" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "·ÐéØâÐ áÒÕàåã" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "·ÐéØâÐ ßÞáÕàÕÔØÝÕ" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "·ÐéØâÐ áÝØ×ã" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "ÃÔÐà áÒÕàåã" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "ÃÔÐà ßÞáÕàÕÔØÝÕ" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "ÃÔÐà áÝØ×ã" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "ÍâÞ ÚÞÓÔÐ ¸ÝÔØ áÛÕÒÐ." -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "ºÞÓÔÐ ¸ÝÔØ áßàÐÒÐ," -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "7, 4 Ø 1 ÜÕÝïîâáï á" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "9, 6 Ø 3 áÞÞâÒÕâáâÒÕÝÝÞ." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "ÃßàÐÒÛÕÝØÕ áÐÜÞÛñâÞÜ (æØäàÞÒëÕ ÚÛÐÒØèØ)" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "»ÕâÕâì ÒÛÕÒÞ-ÒÒÕàå" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "»ÕâÕâì ÒÛÕÒÞ" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "»ÕâÕâì ÒÛÕÒÞ-ÒÝØ×" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "»ÕâÕâì ÒÒÕàå" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "»ÕâÕâì ßàïÜÞ" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "»ÕâÕâì ÒÝØ×" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "»ÕâÕâì ÒßàÐÒÞ-ÒÒÕàå" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "»ÕâÕâì ÒßàÐÒÞ" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "»ÕâÕâì ÒßàÐÒÞ-ÒÝØ×" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1689,7 +1794,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1700,7 +1805,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1711,276 +1816,505 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " "directory inside the Tentacle game directory." msgstr "" "ÁÕÙçÐá ÔÞÛÖÝÐ ×ÐßãáâØâìáï ØÓàÐ Maniax Mansion. ½Þ ScummVM ßÞÚÐ íâÞ ÝÕ ãÜÕÕâ. " -"ÇâÞÑë áëÓàÐâì, ÝÐÖÜØâÕ '½ÞÒÐï ØÓàÐ' Ò áâÐàâÞÒÞÜ ÜÕÝî ScummVM, Ð ×ÐâÕÜ ÒëÑÕàØâÕ " -"ÔØàÕÚâÞàØî Maniac ÒÝãâàØ ÔØàÕÚâÞàØØ á ØÓàÞÙ Tentacle." +"ÇâÞÑë áëÓàÐâì, ÝÐÖÜØâÕ '½ÞÒÐï ØÓàÐ' Ò áâÐàâÞÒÞÜ ÜÕÝî ScummVM, Ð ×ÐâÕÜ " +"ÒëÑÕàØâÕ ÔØàÕÚâÞàØî Maniac ÒÝãâàØ ÔØàÕÚâÞàØØ á ØÓàÞÙ Tentacle." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "ÀÕÖØÜ ÑëáâàÞÓÞ ßÕàÕåÞÔÐ ÐÚâØÒØàÞÒÐÝ" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "¿ÕàÕåÞÔë ÐÚâØÒØàÞÒÐÝë" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "ÍääÕÚâë ÒÞÔë ÒÚÛîçÕÝë" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "²ÞááâÐÝÞÒØâì ØÓàã: " -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "²ÞááâÒÝÞÒØâì" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"½Õ ãÔÐÛÞáì ×ÐÓàãרâì ØÓàã Ø× äÐÙÛÐ:\n" +"\n" +"%s" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"½Õ ãÔÐÛÞáì ×ÐߨáÐâì ØÓàã Ò äÐÙÛ:\n" +"\n" +"%s" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"½Õ ãÔÐÛÞáì ×ÐߨáÐâì ØÓàã Ò äÐÙÛ:\n" +"\n" +"%s" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"½Õ ãÔÐÛÞáì ×ÐߨáÐâì ØÓàã Ò äÐÙÛ:\n" +"\n" +"%s" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "ÁÞåàÐÝØâì ØÓàã:" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "·ÐÓàãרâì ØÓàã:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "ÁÞåàÐÝØâì ØÓàã:" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "ÍÜãÛïâÞà MAME OPL" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "ÍÜãÛïâÞà DOSBox OPL" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "±Õ× Üã×ëÚØ" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "ÍÜãÛïâÞà ×ÒãÚÐ Amiga" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "ÍÜãÛïâÞà AdLib" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "ÍÜãÛïâÞà Apple II GS (ÞâáãâáâÒãÕâ)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "ÍÜãÛïâÞà ×ÒãÚÐ C64" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "½ÐáâàÐØÒÐî íÜãÛïâÞà MT-32" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "ÍÜãÛïâÞà MT-32" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "ÍÜãÛïâÞà PC áߨÚÕàÐ" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "ÍÜãÛïâÞà IBM PCjr" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "ÍÜãÛïâÞà FM Towns" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "ÂÐÑÛØæÐ ÚÛÐÒØè:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr " (°ÚâØÒÝÐï)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr " (³ÛÞÑÐÛìÝÐï)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr " (¸Óàë)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "Windows MIDI" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "³ÛÐÒÝÞÕ ÜÕÝî ScummVM" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "»ÕÒÞàãÚØÙ àÕÖØÜ" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "ÃßàÐÒÛÕÝØÕ ÑÞïÜØ Ò Indy" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "¿ÞÚÐ×ëÒÐâì ÚãàáÞà ÜëèØ" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "¿àØÚàÕߨâì Ú ÓàÐÝØæÐÜ" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "ÁÜÕéÕÝØÕ ÚÐáÐÝØÙ ßÞ ÞáØ X" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "ÁÜÕéÕÝØÕ ÚÐáÐÝØÙ ßÞ ÞáØ Y" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "¸áßÞÛì×ÞÒÐâì ãßàÐÒÛÕÝØÕ ÚãàáÞàÞÜ ÚÐÚ ÝÐ âàÕÚßÐÔÕ ÛÕßâÞßÞÒ" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "ÂÐß ÔÛï ÛÕÒÞÓÞ éÕÛçÚÐ, ÔÒÞÙÝÞÙ âÐß ÔÛï ßàÐÒÞÓÞ éÕÛçÚÐ" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "ÇãÒáâÒØâÕÛìÝÞáâì" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "½ÐçÐÛìÝëÙ ÜÐáèâÐÑ ÒÕàåÝÕÓÞ íÚàÐÝÐ:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "¼ÐáèâÐÑ ÓÛÐÒÝÞÓÞ íÚàÐÝÐ:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "ÅÐàÔÒÐàÝÞÕ ÜÐáèâÐÑØàÞÒÐÝØÕ (ÑëáâàÞ, ÝÞ ÝØ×ÚÞÓÞ ÚÐçÕáâÒÐ)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "¿àÞÓàÐÜÜÝÞÕ ÜÐáèâÐÑØàÞÒÐÝØÕ (åÞàÞèÕÕ ÚÐçÕáâÒÞ, ÝÞ ÜÕÔÛÕÝÝÕÕ)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "±Õ× ÜÐáèâÐÑØàÞÒÐÝØï (ÝãÖÝÞ ÑãÔÕâ ßàÞÚàãçØÒÐâì ÒÛÕÒÞ Ø ÒßàÐÒÞ)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "ÏàÚÞáâì:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "²ëáÞÚÞÕ ÚÐçÕáâÒÞ ×ÒãÚÐ (ÜÕÔÛÕÝÝÕÕ) (àÕÑãâ)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "·ÐßàÕâØâì ÒëÚÛîçÕÝØÕ" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "ÀÕÖØÜ âÐçßÐÔÐ ÒÚÛîçÕÝ." + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "ÀÕÖØÜ âÐçßÐÔÐ ÒëÚÛîçÕÝ." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "ÀÕÖØÜ âÐçßÐÔÐ ÒÚÛîçÕÝ." -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "ÀÕÖØÜ âÐçßÐÔÐ ÒëÚÛîçÕÝ." -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "±Õ× ãÒÕÛØçÕÝØï" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "±Õ× ãÒÕÛØçÕÝØï" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "¿ÕàÕÚÛîçÕÝØÕ ÚÞààÕ򾯯 áÞÞâÝÞèÕÝØï áâÞàÞÝ" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "¿ÕàÕÚÛîçÕÝØÕ ÚÞààÕ򾯯 áÞÞâÝÞèÕÝØï áâÞàÞÝ" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +#, fuzzy +msgid "Active graphics filter:" +msgstr "¿ÕàÕÚÛîçÕÝØÕ ÜÕÖÔã ÓàÐäØçÕáÚØÜØ äØÛìâàÐÜØ" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "ÀÕÖØÜ àÐáâàÐ:" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL ÑÕ× ãÒÕÛØçÕÝØï" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "OpenGL á áÞåàÐÝÕÝØÕÜ" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL Ø×ÝÐçÐÛìÝëÙ" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "ÂÕÚãéØÙ ÒØÔÕÞàÕÖØÜ:" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "²ÒÕàå" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "²ÝØ×" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "²ÛÕÒÞ" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "²ßàÐÒÞ" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "»ÕÒëÙ éÕÛçÞÚ" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "¿àÐÒëÙ éÕÛçÞÚ" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "·ÞÝÐ" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "¼ãÛìâØäãÝÚæØï" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "ÁÜÕÝØâì ÓÕàÞï" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "¿àÞßãáâØâì âÕÚáâ" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "±ëáâàëÙ àÕÖØÜ" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "¾âÛÐÔçØÚ" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "³ÛÞÑÐÛìÝÞÕ ÜÕÝî" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "²ØàâãÐÛìÝÐï ÚÛÐÒØÐâãàÐ" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "½Ð×ÝÐçÕÝØÕ ÚÛÐÒØè" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "²ë åÞâØâÕ ÒëÙâØ?" @@ -2101,131 +2435,193 @@ msgid "Network down" msgstr "ÁÕâì ÒëÚÛîçÕÝÐ" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "½ÐáâàÐØÒÐî áÕâì" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +#, fuzzy +msgid "Timeout while initializing network" msgstr "²àÕÜï ßÞÔÚÛîçÕÝØï Ú áÕâØ ØáâÕÚÛÞ" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "ÁÕâì ÝÕ ÝÐáâàÞØÛÐáì (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "ÁßàïâÐâì ßÐÝÕÛì ØÝáâàãÜÕÝâÞÒ" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "¿ÞÚÐ×Ðâì ÚÛÐÒØÐâãàã" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "·ÒãÚ ÒÚÛ/ÒëÚÛ" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "¿àÐÒëÙ éÕÛçÞÚ" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "¿ÞÚÐ×Ðâì/ÃÑàÐâì ÚãàáÞà" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "ÁÒÞÑÞÔÝëÙ ÞÑ×Þà" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "ÃÒÕÛ. ÜÐáèâÐÑ" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "ÃÜÕÝìè. ÜÐáèâÐÑ" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "½Ð×ÝÐçØâì ÚÛÐÒØèØ" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "ºãàáÞà ÒÒÕàå" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "ºãàáÞà ÒÝØ×" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "ºãàáÞà ÒÛÕÒÞ" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "ºãàáÞà ÒßàÐÒÞ" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "²ë åÞâØâÕ ×ÐÓàãרâì ÛØÑÞ áÞåàÐÝØâì ØÓàã?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr " ²ë ãÒÕàÕÝë, çâÞ åÞâØâÕ ÒëÙâØ? " -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "ºÛÐÒØÐâãàÐ" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "¿ÞÒÕàÝãâì" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "¸áßÞÛì×ãî ÔàÐÙÒÕà SDL " -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "¿ÞÚÐ×Ðâì " -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "²ë åÞâØâÕ ßàÞØ×ÒÕáâØ ÐÒâÞÜÐâØçÕáÚØÙ ßÞØáÚ?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "½Ð×ÝÐçØâì ÔÕÙáâÒØÕ ßÞ ßàÐÒÞÜã éÕÛçÚã" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "²ë ÔÞÛÖÝë ÝÐ×ÝÐçØâì ÚÛÐÒØèã ÝÐ ÔÕÙáâÒØÕ 'Right Click' ÔÛï íâÞÙ ØÓàë" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "½Ð×ÝÐçØâì ÔÕÙáâÒØÕ 'áßàïâÐâì ßÐÝÕÛì ØÝáâàãÜÕÝâÞÒ'" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "²ë ÔÞÛÖÝë ÝÐ×ÝÐçØâì ÚÛÐÒØèã ÝÐ ÔÕÙâáâÒØÕ 'Hide toolbar' ÔÛï íâÞÙ ØÓàë" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "½Ð×ÝÐçØâì ÔÕÙáâÒØÕ ÃÒÕÛØçØâì ¼ÐáèâÐÑ (ÝÕÞÑï×ÐâÕÛìÝÞ)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "½Ð×ÝÐçØâì ÔÕÙáâÒØÕ ÃÜÕÝìèØâì ¼ÐáèâÐÑ (ÝÕÞÑï×ÐâÕÛìÝÞ)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "½Õ ×ÐÑãÔìâÕ ÝÐ×ÝÐçØâì ÚÛÐÒØèã ÔÛï ÔÕÙáâÒØï 'Hide Toolbar' çâÞÑë ãÒØÔÕâì ÒÕáì " "ØÝÒÕÝâÐàì Ò ØÓàÕ" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "²ë ÔÕÙáâÒØâÕÛìÝÞ åÞâØâÕ ãÔÐÛØâì íâÞ áÞåàÐÝÕÝØÕ?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "ÃÔÐà" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "²ë åÞâØâÕ ÒëÙâØ?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "³àÞÜÚÞáâì" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "³àÞÜÚÞáâì" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +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 "½ÕÒÕàÝëÙ ßãâì" diff --git a/po/scummvm.pot b/po/scummvm.pot index 8522a89ede..39c80538d8 100644 --- a/po/scummvm.pot +++ b/po/scummvm.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: ScummVM 1.3.0git\n" +"Project-Id-Version: ScummVM 1.4.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.sf.net\n" -"POT-Creation-Date: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+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" @@ -16,1646 +16,1746 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" msgstr "" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" msgstr "" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "" -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "" -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "" -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "" -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "" -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." msgstr "" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "" -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "" -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "" -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "" -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "" -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." +msgid "Discovered %d new games, ignored %d previously added games." msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "" -#: gui/massadd.cpp:254 +#: gui/massadd.cpp:253 #, c-format -msgid "Discovered %d new games ..." +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 msgid "Specifies preferred sound device or sound card emulator" msgstr "" -#: gui/options.cpp:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 msgid "Specifies output sound device or sound card emulator" msgstr "" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" msgstr "" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "Specifies default sound device for General MIDI output" msgstr "" -#: gui/options.cpp:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "" -#: gui/options.cpp:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" msgstr "" -#: gui/options.cpp:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" msgstr "" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" -#: gui/options.cpp:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +msgid "You have to restart ScummVM before your changes will take effect." msgstr "" -#: gui/options.cpp:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 msgid "The chosen directory cannot be written to. Please select another one." msgstr "" -#: gui/options.cpp:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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 "" -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "" -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "" -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "" -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "" -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "" -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +msgid "Could not switch to video mode: '" +msgstr "" + +#: engines/engine.cpp:237 +msgid "Could not apply aspect ratio setting." +msgstr "" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr "" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr "" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +msgid " or incorrect game behavior." msgstr "" -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "" -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "" -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "" -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1663,7 +1763,7 @@ msgid "" "%s" msgstr "" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1671,7 +1771,7 @@ msgid "" "%s" msgstr "" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1679,273 +1779,475 @@ msgid "" "%s" msgstr "" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " "directory inside the Tentacle game directory." msgstr "" -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +msgid "Failed to load game state from file." +msgstr "" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +msgid "Failed to save game state to file." +msgstr "" + +#: engines/gob/inter_v5.cpp:107 +msgid "Failed to delete file." +msgstr "" + +#: engines/groovie/script.cpp:417 +msgid "Failed to save game" +msgstr "" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +msgid "Save game failed!" +msgstr "" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +msgid "Loading game..." +msgstr "" + +#: engines/parallaction/saveload.cpp:226 +msgid "Saving game..." +msgstr "" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +msgid "Initializing MT-32 Emulator" msgstr "" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr "" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr "" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr "" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +msgid "Mouse-click-and-drag mode enabled." +msgstr "" + +#: backends/platform/iphone/osys_events.cpp:340 +msgid "Mouse-click-and-drag mode disabled." +msgstr "" + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "" -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "" -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +msgid "Enabled aspect ratio correction" +msgstr "" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +msgid "Disabled aspect ratio correction" +msgstr "" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +msgid "Active graphics filter:" +msgstr "" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +msgid "Windowed mode" +msgstr "" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +msgid "Current display mode" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "" @@ -2066,126 +2368,172 @@ msgid "Network down" msgstr "" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +msgid "Initializing network" msgstr "" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +msgid "Timeout while initializing network" msgstr "" #: backends/platform/wii/options.cpp:186 #, c-format -msgid "Network not initialised (%d)" +msgid "Network not initialized (%d)" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr "" -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "" -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "" -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" + +#: backends/events/default/default-events.cpp:222 +msgid "Do you really want to return to the Launcher?" +msgstr "" + +#: backends/events/default/default-events.cpp:222 +msgid "Launcher" +msgstr "" + +#: backends/events/default/default-events.cpp:244 +msgid "Do you really want to quit?" +msgstr "" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +msgid "Maximum Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +msgid "Minimal Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "" diff --git a/po/se_SE.po b/po/se_SE.po index 0bf6f3ac8b..ccb12b159f 100644 --- a/po/se_SE.po +++ b/po/se_SE.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: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2011-05-02 13:07+0100\n" "Last-Translator: Hampus Flink <hampus.flink@gmail.com>\n" "Language-Team: \n" @@ -20,109 +20,119 @@ msgstr "" "X-Poedit-Country: SWEDEN\n" "X-Poedit-SourceCharset: iso-8859-1\n" -#: gui/about.cpp:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(byggt på %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 #, fuzzy msgid "Features compiled in:" msgstr "Funktioner kompilerade i:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "Tillgängliga motorer" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "Uppåt" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "Gå till föregående katalognivå" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "Uppåt" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "Avbryt" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "Välj" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "Stäng" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "Musklick" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "Visa tangentbord" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "Ställ in tangenter" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "Välj en handling att ställa in" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "Ställ in" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "Välj en handling och klicka på \"Ställ in\"" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "Inställd tangent: %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "Inställd tangent: Ingen" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "Var god välj en handling" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "Tryck på en tangent för att ställa in" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "Spel" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -130,29 +140,29 @@ msgstr "" "Kortnamn för spel. Används för att hänvisa till spardata och att starta " "spelet från kommandoraden" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "Namn:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "Spelets fullständiga titel" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "Namn:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "Språk:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" @@ -160,282 +170,282 @@ msgstr "" "Spelets språk. Den här inställningen omvandlar inte din spanska spelversion " "till en engelsk" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<standard>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "Plattform:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "Plattformen spelet ursprungligen tillverkades för" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "Plattform:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "Grafik" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "GFX" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "Överskrid globala grafikinställningar" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "Överskrid globala grafikinställningar" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "Ljud" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "Överskrid globala ljudinställningar" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "Överskrid globala ljudinställningar" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "Volym" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "Volym" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "Överskrid globala volyminställningar" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "Överskrid globala volyminställningar" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "Överskrid globala MIDI-inställningar" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "Överskrid globala MIDI-inställningar" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "Överskrid globala MT-32 inställningar" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "Överskrid globala MT-32 inställningar" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "Sökvägar" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "Sökvägar" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "Sökv. spel:" -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "Sökv. spel:" -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "Sökv. extra:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "Bestämmer sökvägen till ytterligare data som spelet använder" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "Sökv. extra:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "Sökv. sparat:" -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "Bestämmer var dina spardata lagras" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "Sökv. sparat:" -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "Ingen" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "Standard" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "Välj SoundFont" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "Välj katalog med speldata" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "Välj en ytterligare spelkatalog" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "Välj katalog för spardata" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "Detta ID-namn är upptaget. Var god välj ett annat." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~A~vsluta" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "Avsluta ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "O~m~..." -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "Om ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~I~nställningar..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "Redigera globala ScummVM-inställningar" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "~S~tarta" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "Starta det valda spelet" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~L~adda..." -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "Ladda spardata för det valda spelet" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "Lä~g~g till spel..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "Håll ned Skift för masstillägg" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "R~e~digera spel..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "Redigera spelinställningarna" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "~R~adera spel" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "Radera spelet från listan. Spelets datafiler påverkas inte." -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "Lä~g~g till spel..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "R~e~digera spel..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~R~adera spel" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "Sök i spellistan" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "Sök:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "Töm sökfältet" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "Ladda spel:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "Ladda" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -443,205 +453,222 @@ msgstr "" "Vill du verkligen använda mass-speldetektorn? Processen kan potentiellt " "lägga till ett enormt antal spel." -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "Ja" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "Nej" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM kunde inte öppna den valda katalogen!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM kunde inte hitta några spel i den valda katalogen!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "Välj spel:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "Vill du verkligen radera den här spelkonfigurationen?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "Det här spelet stöder inte laddning av spardata från launchern." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "" "ScummVM kunde inte hitta en motor kapabel till att köra det valda spelet!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "Masstillägg..." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "Masstillägg..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "Lägg till spel..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "Lägg till spel..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... progression ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "Scanning färdig!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "Nya spel upptäckta: %d." +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "Kataloger scannade: %d ..." -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "Nya spel upptäckta: %d ..." -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "Aldrig" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "var 5:e minut" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "var 10:e minut" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "var 15:e minut" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "var 30:e minut" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 kHz" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 kHz" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "Ingen" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "Grafikläge:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "Renderingsläge:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "Speciella gitterlägen stödda av vissa spel" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "Fullskärmsläge" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "Korrektion av bildförhållande" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "Korrigerar bildförhållanden för 320x200-spel" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "EGA anti-gitter" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "Aktiverar anti-gitter i EGA spel som stöder det" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "Föredragen enhet:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "Musikenhet:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 msgid "Specifies preferred sound device or sound card emulator" msgstr "Bestämmer din föredragna emulator för ljudenhet eller ljudkort" -#: gui/options.cpp:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 msgid "Specifies output sound device or sound card emulator" msgstr "Bestämmer emulator för ljudenhet eller ljudkort" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "Föredr. enhet:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "Musikenhet:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "AdLib-emulator:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "AdLib används för musik i många spel" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "Ljudfrekvens:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -649,61 +676,61 @@ msgstr "" "Ett högre värde betecknar bättre ljudkvalitet men stöds kanske inte av ditt " "ljudkort" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "GM-enhet:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "Specifies default sound device for General MIDI output" msgstr "Bestämmer standardenheten för General MIDI-uppspelning" -#: gui/options.cpp:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "Använd inte General MIDI-musik" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "Använd första tillgängliga enhet" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 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:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "Blandat AdLib/MIDI-läge" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "Använd både MIDI och AdLib för ljudgeneration" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "MIDI gain:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "MT-32 enhet:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 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:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "Äkta Roland MT-32 (inaktivera GM-emulation)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -711,193 +738,194 @@ msgstr "" "Aktivera om du vill använda din verkliga Roland-kompatibla och dator-" "anslutna ljudenhet" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "Äkta Roland MT-32 (ingen GM-emulation)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "Aktivera Roland GS-läge" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" "Stänger av General MIDI-kartläggning för spel med Roland MT-32 soundtrack" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "Använd inte Roland MT-32 musik" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "Undertext och tal:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "Tal" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "Undertexter" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "Båda" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "Texthastighet:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "Text och tal:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "Tal" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "Text" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "Båda" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "Visa undertexter och spela upp tal" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "Texthastighet:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "Musikvolym:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "Musikvolym:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "Ljud av" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "SFX-volym:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "Volym för specialeffekter" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "SFX-volym:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "Talvolym:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "Talvolym:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "Sökv. tema:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "Sökv. tema:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 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:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "Sökv. tillägg:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "Sökv. tillägg:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Diverse" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Diverse" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "Tema:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "GUI-rendering:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "Autospara:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "Autospara:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "Tangenter" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "GUI-språk:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "Språk för ScummVM:s användargränssnitt" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +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:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "Välj katalog för spardata" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 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:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "Välj katalog för GUI-teman" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "Välj katalog för extra filer" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "Välj katalog för tillägg" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -905,783 +933,858 @@ 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." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "Inget datum sparat" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "Ingen tid sparad" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "Ingen speltid sparad" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "Radera" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "Vill du verkligen radera den här spardatan?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "Datum:" -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "Tid:" -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "Speltid:" -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "Namnlös spardata" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "Välj ett tema" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "Inaktiverad GFX" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "Inaktiverad GFX" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "Standard rendering (16 bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "Standard (16 bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "Antialiserad rendering (16 bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "Antialiserad (16 bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "Motorn stöder inte debug-nivå '%s'" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "Meny" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "Skippa" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "Paus" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "Skippa rad" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "Fel under körning av spel:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "Kunde inte hitta en motor kapabel till att köra det valda spelet" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "Inget fel" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "Kunde inte hitta speldata" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "Spel-ID stöds inte" -#: common/error.cpp:48 +#: common/error.cpp:44 #, fuzzy msgid "Unsupported color mode" msgstr "Ej stött färgläge" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "Lästillbehörighet nekad" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "Skrivtillbehörighet nekad" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "Sökvägen existerar inte" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "Sökvägen är inte en katalog" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "Sökvägen är inte en fil" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "Kan inte skapa fil" -#: common/error.cpp:65 +#: common/error.cpp:61 #, fuzzy msgid "Reading data failed" msgstr "Inläsning misslyckades" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "Skriva data misslyckades" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "Kunde inte hitta lämpligt motortillägg" -#: common/error.cpp:72 +#: common/error.cpp:68 #, fuzzy msgid "Engine plugin does not support save states" msgstr "Motorn stöder inte debug-nivå '%s'" -#: common/error.cpp:75 -#, fuzzy -msgid "Command line argument not processed" -msgstr "Argument i kommandoraden ej verkställt" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "Okänt fel" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Herkules grön" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Herkules bärnsten" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Herkules grön" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Herkules bärnsten" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "~F~ortsätt" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~L~adda" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~S~para" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~I~nställningar" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~H~jälp" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "O~m~..." -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "Åte~r~vänd till launcher" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "Åte~r~vänd till launcher" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "Spara spelet:" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "Spara" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "A~v~bryt" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~T~angenter" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "Aktivt videoläge:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "Korrektion av bildförhållande på/av" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~F~öregående" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~N~ästa" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~S~täng" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "Vanliga kortkommandon:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "Spara / Ladda-fönster" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "Skippa textrad" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "Skippa scen" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Mellanslag" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "Pausa spelet" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "Ladda spardata 1-10" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "Spara speldata 1-10" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "Avsluta" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Enter" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "Fullskärmsläge" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "Musikvolym höj / sänk" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "Texthastighet sänk / öka" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "Simulera vänster musknapp" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "Simulera höger musknapp" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "Specialkortkommandon:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "Visa / göm konsol" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "Öppna debug-konsolen" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "Visa minnesförbrukning" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "Kör i snabbläge (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "Kör i extra snabbt läge (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "Musrestriktion av/på" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "Växla grafikfilter" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "Öka / sänk skalningsfaktor" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "Korrektion av bildförhållande på/av" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* Observera att användning av ctrl-f" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr "och ctrl-g inte rekommenderas" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr "då detta kan orsaka krascher" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +#, fuzzy +msgid " or incorrect game behavior." msgstr "eller felaktigt spelbeteende." -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "Väva melodier med tangentbordet:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "Huvudkontroller:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "Tryck" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "Dra" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "Ge" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "Öppna" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "Gå till" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "Ta emot" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "Använd" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "Läs" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "Ny unge" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "Sätt på" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "Stäng av" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "Gå till" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "Ta" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "Vad är" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "Lås upp" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "Ta på" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "Ta av" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "Laga" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "Byt" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "Titta" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "Tala" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "Res" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "Till Henry / Till Indy" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "spela C-moll på staven" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "spela D på staven" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "spela E på staven" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "spela F på staven" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "spela G på staven" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "spela A på staven" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "spela H på staven" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "spela C-dur på staven" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "Tryck" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "Dra" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "Tala med" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "Titta på" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "Sätt på" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "Stäng av" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "Piltangent upp" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "Markera föreg. dialog" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "Piltangent ned" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "Markera nästa dialog" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "Gå" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "Inventarie" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "Objekt" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "Svartvitt / Färg" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "Ögon" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "Tunga" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "Slå" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "Sparka" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "Undersök" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "Vanlig pekare" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Comm" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "Spara / Ladda / Inst." -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "Övriga spelkontroller:" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "Inventarie:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "Bläddra listan uppåt" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "Bläddra listan nedåt" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "Övre vänstra föremålet" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "Nedre vänstra föremålet" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "Övre högra föremålet" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "Nedre högra föremålet" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "Mellersta vänstra föremålet" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "Mellersta högra föremålet" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "Byta karaktärer:" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "Andra ungen" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "Tredje ungen" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "Slagsmålskontroller (nr. tangenter)" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "Steg bakåt" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "Blockera högt" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "Blockera midjehöjd" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "Blockera lågt" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "Slå högt" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "Slå midjehöjd" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "Slå lågt" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Gäller när Indy står till vänster." -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "När Indy står till höger byter" -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "7, 4 och 1 plats med" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "9, 6 och 3." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "Biplanskontroller (nr. tangenter)" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "Flyg åt övre vänster" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "Flyg åt vänster" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "Flyg åt nedre vänster" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "Flyg uppåt" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "Flyg rakt fram" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "Flyg nedåt" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "Flyg åt övre höger" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "Flyg åt höger" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "Flyg åt nedre höger" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1692,7 +1795,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1703,7 +1806,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1714,7 +1817,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " @@ -1724,266 +1827,495 @@ msgstr "" "än. För att spela spelet, gå till \"Lägg till spel\" i ScummVM:s huvudmeny " "och välj \"Maniac\"-katalogen inuti \"Tentacle\" katalogen." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "~Z~ipläge aktiverat" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "Öv~e~rgångar aktiverade" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "~V~atteneffekt aktiverad" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "Återställ spel:" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "Återställ" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"Kunde inte läsa spardata från file:\n" +"\n" +"%s" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"Kunde inte skriva spardata till file:\n" +"\n" +"%s" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"Kunde inte skriva spardata till file:\n" +"\n" +"%s" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"Kunde inte skriva spardata till file:\n" +"\n" +"%s" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "Spara spelet:" + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "Ladda spel:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "Spara spelet:" + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "MAME OPL-emulator" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "DOSBox OPL-emulator" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "Ingen musik" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "Amiga ljudemulator" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "AdLib-emulator" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Apple II GS-emulator (INTE IMPLEMENTERAD)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "C64 ljudemulator" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "Initialiserar MT-32 emulator" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "MT-32 emulator" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "PC Speaker-emulator" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "IBM PCjr-emulator" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "FM Towns-emulator" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "Tangenter:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr "(Aktiv)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr "(Global)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr "(Spel)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "Windows MIDI" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "ScummVM huvudmeny" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "~V~änsterhänt läge" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "~I~ndy slagsmålskontroller" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "Visa muspekare" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "Lägg till kant" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "Gå till X-position" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "Gå till Y-position" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "Använd bärbar trackpad-stil för pekarkontroll" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "Tappa för vänsterklick, dubbel-tappa för högerklick" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "Känslighet" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "Standardskala för övre skärm:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "Skalning huvudskärm:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "Hårdvaruskalning (snabbt, men låg kvalitet)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "Mjukvaruskalning (bra kvalitet, men långsamt)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "Oskalat (du måste bläddra till vänster och höger)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "Ljusstyrka:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "Hög ljudkvalitet (långsammare) (omstart)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "Inaktivera strömsparning" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "Touchpad-läge aktiverat." + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "Touchpad-läge inaktiverat." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "Touchpad-läge aktiverat." -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "Touchpad-läge inaktiverat." -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "Normalt (ingen skalning)" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "Normalt (ingen skalning)" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "Korrektion av bildförhållande på/av" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "Korrektion av bildförhållande på/av" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +#, fuzzy +msgid "Active graphics filter:" +msgstr "Växla grafikfilter" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "Renderingsläge:" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL normal" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" msgstr "OpenGL konservation" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL original" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "Aktivt videoläge:" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "Upp" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "Ned" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "Vänster" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "Höger" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "Vänsterklick" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "Högerklick" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "Zon" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "Multifunktion" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "Byt karaktär" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "Skippa text" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "Snabbläge" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "Debug-konsol" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "Global meny" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "Virtuellt tangentbord" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "Tangentinst." -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "Vill du avsluta?" @@ -2104,134 +2436,197 @@ msgid "Network down" msgstr "Nätverk inaktivt" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "Initialiserar nätverk" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +#, fuzzy +msgid "Timeout while initializing network" msgstr "Timeout under initialisering av nätverk" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "Nätverk ej initialiserat (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "Göm verktygsrad" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "Visa tangentbord" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "Ljud av/på" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "Högerklick" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "Göm/visa pekare" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "Frititt" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "Zooma upp" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "Zooma ned" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "Förbind tangenter" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "Pekare upp" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "Pekare ned" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "Pekare vänster" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "Pekare höger" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "Vill du ladda eller spara spelet?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr "Är du säker på att du vill avsluta?" -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "Tangentbord" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "Rotera" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "Använd SDL-driver" -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "Skärm" -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "Vill du utföra en automatisk scan?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "Ställ in högerklick" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "" "Du måste välja en tangent för \"Högerklick\" för att spela det här spelet" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "Ställ in göm verktygsrad" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" "Du måste välja en tangent för \"Göm verktygsrad\" för att spela det här " "spelet" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "Ställ in Zooma up (valfritt)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "Ställ in Zooma ned (valfritt)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "Glöm inte att välja en tangent för \"Göm verktygsrad\" för att se hela " "inventariet" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "Vill du verkligen radera den här spardatan?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "Slå" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "Vill du avsluta?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "Volym" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "Volym" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +msgstr "" + +#~ msgid "Discovered %d new games." +#~ msgstr "Nya spel upptäckta: %d." + +#, fuzzy +#~ msgid "Command line argument not processed" +#~ msgstr "Argument i kommandoraden ej verkställt" + +#~ msgid "FM Towns Emulator" +#~ msgstr "FM Towns-emulator" + #~ msgid "Invalid Path" #~ msgstr "Ogiltig sökväg" diff --git a/po/uk_UA.po b/po/uk_UA.po index 8903d18541..dfacf84fa7 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.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: 2011-04-22 19:33+0100\n" +"POT-Creation-Date: 2011-06-13 22:20+0100\n" "PO-Revision-Date: 2011-03-26 22:38+0200\n" "Last-Translator: Lubomyr Lisen\n" "Language-Team: Ukrainian\n" @@ -18,108 +18,118 @@ msgstr "" "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:96 +#: gui/about.cpp:91 #, c-format msgid "(built on %s)" msgstr "(×öÑàÐÝØÙ %s)" -#: gui/about.cpp:103 +#: gui/about.cpp:98 msgid "Features compiled in:" msgstr "²ÚÛîçÕÝö Ò ÑöÛÔ Þßæö÷:" -#: gui/about.cpp:112 +#: gui/about.cpp:107 msgid "Available engines:" msgstr "´ÞáâãßÝö ÔÒØÖÚØ:" -#: gui/browser.cpp:70 +#: gui/browser.cpp:66 msgid "Go up" msgstr "²ÒÕàå" -#: gui/browser.cpp:70 gui/browser.cpp:72 +#: gui/browser.cpp:66 gui/browser.cpp:68 msgid "Go to previous directory level" msgstr "¿ÕàÕÙâØ ÝÐ ßÐßÚã àöÒÝÕÜ ÒØéÕ" -#: gui/browser.cpp:72 +#: gui/browser.cpp:68 msgctxt "lowres" msgid "Go up" msgstr "²ÒÕàå" -#: gui/browser.cpp:73 gui/chooser.cpp:49 gui/KeysDialog.cpp:46 -#: gui/launcher.cpp:319 gui/massadd.cpp:95 gui/options.cpp:1124 -#: gui/saveload.cpp:66 gui/saveload.cpp:158 gui/themebrowser.cpp:57 +#: gui/browser.cpp:69 gui/chooser.cpp:45 gui/KeysDialog.cpp:43 +#: gui/launcher.cpp:312 gui/massadd.cpp:92 gui/options.cpp:1178 +#: gui/saveload.cpp:63 gui/saveload.cpp:155 gui/themebrowser.cpp:54 +#: engines/sword1/control.cpp:865 engines/parallaction/saveload.cpp:281 #: backends/platform/wii/options.cpp:48 +#: backends/events/default/default-events.cpp:222 +#: backends/events/default/default-events.cpp:244 msgid "Cancel" msgstr "²öÔÜöÝÐ" -#: gui/browser.cpp:74 gui/chooser.cpp:50 gui/themebrowser.cpp:58 +#: gui/browser.cpp:70 gui/chooser.cpp:46 gui/themebrowser.cpp:55 msgid "Choose" msgstr "²ØÑàÐâØ" -#: gui/gui-manager.cpp:106 engines/scumm/help.cpp:128 -#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 -#: engines/scumm/help.cpp:193 engines/scumm/help.cpp:211 -#: backends/keymapper/remap-dialog.cpp:54 +#: gui/gui-manager.cpp:114 engines/scumm/help.cpp:125 +#: engines/scumm/help.cpp:140 engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:190 engines/scumm/help.cpp:208 +#: backends/keymapper/remap-dialog.cpp:52 msgid "Close" msgstr "·ÐÚàØâØ" -#: gui/gui-manager.cpp:109 +#: gui/gui-manager.cpp:117 msgid "Mouse click" msgstr "ºÛöÚ ÜØèÚÞî" -#: gui/gui-manager.cpp:112 base/main.cpp:281 +#: gui/gui-manager.cpp:120 base/main.cpp:280 msgid "Display keyboard" msgstr "¿ÞÚÐ×ÐâØ ÚÛÐÒöÐâãàã" -#: gui/gui-manager.cpp:115 base/main.cpp:284 +#: gui/gui-manager.cpp:123 base/main.cpp:283 msgid "Remap keys" msgstr "¿ÕàÕßàØ×ÝÐçØâØ ÚÛÐÒöèö" -#: gui/KeysDialog.h:39 gui/KeysDialog.cpp:148 +#: gui/KeysDialog.h:36 gui/KeysDialog.cpp:145 msgid "Choose an action to map" msgstr "²ØÑÕàöâì Ôöî ÔÛï ßàØ×ÝÐçÕÝÝï" -#: gui/KeysDialog.cpp:44 +#: gui/KeysDialog.cpp:41 msgid "Map" msgstr "¿àØ×ÝÐçØâØ" -#: gui/KeysDialog.cpp:45 gui/launcher.cpp:320 gui/launcher.cpp:945 -#: gui/launcher.cpp:949 gui/massadd.cpp:92 gui/options.cpp:1125 -#: backends/platform/wii/options.cpp:47 -#: backends/platform/wince/CELauncherDialog.cpp:58 +#: gui/KeysDialog.cpp:42 gui/launcher.cpp:313 gui/launcher.cpp:936 +#: gui/launcher.cpp:940 gui/massadd.cpp:89 gui/options.cpp:1179 +#: engines/engine.cpp:346 engines/engine.cpp:357 engines/scumm/scumm.cpp:1772 +#: engines/agos/animation.cpp:545 engines/groovie/script.cpp:417 +#: engines/sky/compact.cpp:131 engines/sky/compact.cpp:141 +#: engines/sword1/animation.cpp:344 engines/sword1/animation.cpp:354 +#: engines/sword1/animation.cpp:360 engines/sword1/control.cpp:865 +#: engines/sword1/logic.cpp:1633 engines/sword2/animation.cpp:379 +#: engines/sword2/animation.cpp:389 engines/sword2/animation.cpp:398 +#: engines/parallaction/saveload.cpp:281 backends/platform/wii/options.cpp:47 +#: backends/platform/wince/CELauncherDialog.cpp:52 msgid "OK" msgstr "OK" -#: gui/KeysDialog.cpp:52 +#: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" msgstr "²ØÑÕàöâì Ôöî ö ÚÛöÚÝöâì '¿àØ×ÝÐçØâØ'" -#: gui/KeysDialog.cpp:83 gui/KeysDialog.cpp:105 gui/KeysDialog.cpp:144 +#: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format msgid "Associated key : %s" msgstr "¿àØ×ÝÐçÕÝÐ ÚÛÐÒöèÐ : %s" -#: gui/KeysDialog.cpp:85 gui/KeysDialog.cpp:107 gui/KeysDialog.cpp:146 +#: gui/KeysDialog.cpp:82 gui/KeysDialog.cpp:104 gui/KeysDialog.cpp:143 #, c-format msgid "Associated key : none" msgstr "¿àØ×ÝÐçÕÝÐ ÚÛÐÒöèÐ : ÝÕÜÐô" -#: gui/KeysDialog.cpp:93 +#: gui/KeysDialog.cpp:90 msgid "Please select an action" msgstr "±ãÔì ÛÐáÚÐ, ÒØÑÕàöâì Ôöî" -#: gui/KeysDialog.cpp:109 +#: gui/KeysDialog.cpp:106 msgid "Press the key to associate" msgstr "½ÐâØáÝöâì ÚÛÐÒöèã ÔÛï ßàØ×ÝÐçÕÝÝï" -#: gui/launcher.cpp:172 +#: gui/launcher.cpp:165 msgid "Game" msgstr "³àÐ" -#: gui/launcher.cpp:176 +#: gui/launcher.cpp:169 msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 +#: gui/launcher.cpp:169 gui/launcher.cpp:171 gui/launcher.cpp:172 msgid "" "Short game identifier used for referring to savegames and running the game " "from the command line" @@ -127,312 +137,311 @@ msgstr "" "ºÞàÞâÚØÙ öÔÕÝâØäöÚÐâÞà, ïÚØÙ ÒØÚÞàØáâÞÒãôâìáï ÔÛï ÝÐ×Ò ×ÑÕàÕÖÕÝØå öÓÞà ö ÔÛï " "×ÐßãáÚã × ÚÞÜÐÝÔÝÞ÷ áâàöçÚØ" -#: gui/launcher.cpp:178 +#: gui/launcher.cpp:171 msgctxt "lowres" msgid "ID:" msgstr "ID:" -#: gui/launcher.cpp:183 +#: gui/launcher.cpp:176 msgid "Name:" msgstr "½Ð×ÒÐ:" -#: gui/launcher.cpp:183 gui/launcher.cpp:185 gui/launcher.cpp:186 +#: gui/launcher.cpp:176 gui/launcher.cpp:178 gui/launcher.cpp:179 msgid "Full title of the game" msgstr "¿ÞÒÝÐ ÝÐ×ÒÐ ÓàØ" -#: gui/launcher.cpp:185 +#: gui/launcher.cpp:178 msgctxt "lowres" msgid "Name:" msgstr "½Ð×ÒÐ:" -#: gui/launcher.cpp:189 +#: gui/launcher.cpp:182 msgid "Language:" msgstr "¼ÞÒÐ:" -#: gui/launcher.cpp:189 gui/launcher.cpp:190 +#: gui/launcher.cpp:182 gui/launcher.cpp:183 msgid "" "Language of the game. This will not turn your Spanish game version into " "English" msgstr "" -"¼ÞÒÐ ÓàØ. ·ÜöÝÐ æìÞÓÞ ßÐàÐÜÕâàã ÝÕ ßÕàÕâÒÞàØâì Óàã ÐÝÓÛöÙáìÚÞî Ò " -"ãÚàÐ÷ÝáìÚã" +"¼ÞÒÐ ÓàØ. ·ÜöÝÐ æìÞÓÞ ßÐàÐÜÕâàã ÝÕ ßÕàÕâÒÞàØâì Óàã ÐÝÓÛöÙáìÚÞî Ò ãÚàÐ÷ÝáìÚã" -#: gui/launcher.cpp:191 gui/launcher.cpp:205 gui/options.cpp:80 -#: gui/options.cpp:654 gui/options.cpp:664 gui/options.cpp:1095 -#: audio/null.cpp:42 +#: gui/launcher.cpp:184 gui/launcher.cpp:198 gui/options.cpp:74 +#: gui/options.cpp:708 gui/options.cpp:718 gui/options.cpp:1149 +#: audio/null.cpp:40 msgid "<default>" msgstr "<×Ð ãÜÞÒçÐÝÝïÜ>" -#: gui/launcher.cpp:201 +#: gui/launcher.cpp:194 msgid "Platform:" msgstr "¿ÛÐâäÞàÜÐ:" -#: gui/launcher.cpp:201 gui/launcher.cpp:203 gui/launcher.cpp:204 +#: gui/launcher.cpp:194 gui/launcher.cpp:196 gui/launcher.cpp:197 msgid "Platform the game was originally designed for" msgstr "¿ÛÐâäÞàÜÐ, ÔÛï ïÚÞ÷ ÓàÐ ÑãÛÐ áßÞçÐâÚã àÞ×àÞÑÛÕÝÐ" -#: gui/launcher.cpp:203 +#: gui/launcher.cpp:196 msgctxt "lowres" msgid "Platform:" msgstr "¿ÛÐâäÞàÜÐ:" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "Graphics" msgstr "³àÐäöÚÐ" -#: gui/launcher.cpp:215 gui/options.cpp:964 gui/options.cpp:981 +#: gui/launcher.cpp:208 gui/options.cpp:1018 gui/options.cpp:1035 msgid "GFX" msgstr "³àä" -#: gui/launcher.cpp:218 +#: gui/launcher.cpp:211 msgid "Override global graphic settings" msgstr "¿ÕàÕÚàØâØ ÓÛÞÑÐÛìÝö ãáâÐÝÞÒÚØ ÓàÐäöÚØ" -#: gui/launcher.cpp:220 +#: gui/launcher.cpp:213 msgctxt "lowres" msgid "Override global graphic settings" msgstr "¿ÕàÕÚàØâØ ÓÛÞÑÐÛìÝö ãáâÐÝÞÒÚØ ÓàÐäöÚØ" -#: gui/launcher.cpp:227 gui/options.cpp:987 +#: gui/launcher.cpp:220 gui/options.cpp:1041 msgid "Audio" msgstr "°ãÔöÞ" -#: gui/launcher.cpp:230 +#: gui/launcher.cpp:223 msgid "Override global audio settings" msgstr "¿ÕàÕÚàØâØ ÓÛÞÑÐÛìÝö ãáâÐÝÞÒÚØ ÐãÔöÞ" -#: gui/launcher.cpp:232 +#: gui/launcher.cpp:225 msgctxt "lowres" msgid "Override global audio settings" msgstr "¿ÕàÕÚàØâØ ÓÛÞÑÐÛìÝö ãáâÐÝÞÒÚØ ÐãÔöÞ" -#: gui/launcher.cpp:241 gui/options.cpp:992 +#: gui/launcher.cpp:234 gui/options.cpp:1046 msgid "Volume" msgstr "³ãçÝöáâì" -#: gui/launcher.cpp:243 gui/options.cpp:994 +#: gui/launcher.cpp:236 gui/options.cpp:1048 msgctxt "lowres" msgid "Volume" msgstr "³ãçÝ-âì" -#: gui/launcher.cpp:246 +#: gui/launcher.cpp:239 msgid "Override global volume settings" msgstr "¿ÕàÕÚàØâØ ÓÛÞÑÐÛìÝö ãáâÐÝÞÒÚØ ÓãçÝÞáâö" -#: gui/launcher.cpp:248 +#: gui/launcher.cpp:241 msgctxt "lowres" msgid "Override global volume settings" msgstr "¿ÕàÕÚàØâØ ÓÛÞÑÐÛìÝö ãáâÐÝÞÒÚØ ÓãçÝÞáâö" -#: gui/launcher.cpp:255 gui/options.cpp:1002 +#: gui/launcher.cpp:248 gui/options.cpp:1056 msgid "MIDI" msgstr "MIDI" -#: gui/launcher.cpp:258 +#: gui/launcher.cpp:251 msgid "Override global MIDI settings" msgstr "¿ÕàÕÚàØâØ ÓÛÞÑÐÛìÝö ãáâÐÝÞÒÚØ MIDI" -#: gui/launcher.cpp:260 +#: gui/launcher.cpp:253 msgctxt "lowres" msgid "Override global MIDI settings" msgstr "¿ÕàÕÚàØâØ ÓÛÞÑÐÛìÝö ãáâÐÝÞÒÚØ MIDI" -#: gui/launcher.cpp:270 gui/options.cpp:1008 +#: gui/launcher.cpp:263 gui/options.cpp:1062 msgid "MT-32" msgstr "MT-32" -#: gui/launcher.cpp:273 +#: gui/launcher.cpp:266 msgid "Override global MT-32 settings" msgstr "¿ÕàÕÚàØâØ ÓÛÞÑÐÛìÝö ãáâÐÝÞÒÚØ MT-32" -#: gui/launcher.cpp:275 +#: gui/launcher.cpp:268 msgctxt "lowres" msgid "Override global MT-32 settings" msgstr "¿ÕàÕÚàØâØ ÓÛÞÑÐÛìÝö ãáâÐÝÞÒÚØ MT-32" -#: gui/launcher.cpp:286 gui/options.cpp:1015 +#: gui/launcher.cpp:279 gui/options.cpp:1069 msgid "Paths" msgstr "ÈÛïåØ" -#: gui/launcher.cpp:288 gui/options.cpp:1017 +#: gui/launcher.cpp:281 gui/options.cpp:1071 msgctxt "lowres" msgid "Paths" msgstr "ÈÛïåØ" -#: gui/launcher.cpp:295 +#: gui/launcher.cpp:288 msgid "Game Path:" msgstr "ÈÛïå ÔÞ ÓàØ: " -#: gui/launcher.cpp:297 +#: gui/launcher.cpp:290 msgctxt "lowres" msgid "Game Path:" msgstr "ÈÛïå ÔÞ ÓàØ: " -#: gui/launcher.cpp:302 gui/options.cpp:1037 +#: gui/launcher.cpp:295 gui/options.cpp:1091 msgid "Extra Path:" msgstr "´ÞÔÐâÚ. èÛïå:" -#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/launcher.cpp:295 gui/launcher.cpp:297 gui/launcher.cpp:298 msgid "Specifies path to additional data used the game" msgstr "²ÚÐ×ãô èÛïå ÔÞ ÔÞÔÐâÚÞÒØå äÐÙÛöÒ ÔÐÝØå ÔÛï ÓàØ" -#: gui/launcher.cpp:304 gui/options.cpp:1039 +#: gui/launcher.cpp:297 gui/options.cpp:1093 msgctxt "lowres" msgid "Extra Path:" msgstr "´ÞÔ. èÛïå:" -#: gui/launcher.cpp:309 gui/options.cpp:1025 +#: gui/launcher.cpp:302 gui/options.cpp:1079 msgid "Save Path:" msgstr "ÈÛïå ×ÑÕà.: " -#: gui/launcher.cpp:309 gui/launcher.cpp:311 gui/launcher.cpp:312 -#: gui/options.cpp:1025 gui/options.cpp:1027 gui/options.cpp:1028 +#: gui/launcher.cpp:302 gui/launcher.cpp:304 gui/launcher.cpp:305 +#: gui/options.cpp:1079 gui/options.cpp:1081 gui/options.cpp:1082 msgid "Specifies where your savegames are put" msgstr "²ÚÐ×ãô èÛïå ÔÞ ×ÑÕàÕÖÕÝì ÓàØ" -#: gui/launcher.cpp:311 gui/options.cpp:1027 +#: gui/launcher.cpp:304 gui/options.cpp:1081 msgctxt "lowres" msgid "Save Path:" msgstr "ÈÛïå ×ÑÕà.: " -#: gui/launcher.cpp:328 gui/launcher.cpp:411 gui/launcher.cpp:460 -#: gui/options.cpp:1034 gui/options.cpp:1040 gui/options.cpp:1047 -#: gui/options.cpp:1148 gui/options.cpp:1154 gui/options.cpp:1160 -#: gui/options.cpp:1168 gui/options.cpp:1192 gui/options.cpp:1196 -#: gui/options.cpp:1202 gui/options.cpp:1209 gui/options.cpp:1308 +#: gui/launcher.cpp:321 gui/launcher.cpp:404 gui/launcher.cpp:453 +#: gui/options.cpp:1088 gui/options.cpp:1094 gui/options.cpp:1101 +#: gui/options.cpp:1202 gui/options.cpp:1208 gui/options.cpp:1214 +#: gui/options.cpp:1222 gui/options.cpp:1246 gui/options.cpp:1250 +#: gui/options.cpp:1256 gui/options.cpp:1263 gui/options.cpp:1362 msgctxt "path" msgid "None" msgstr "½Õ ×ÐÒÔÐÝØÙ" -#: gui/launcher.cpp:333 gui/launcher.cpp:415 +#: gui/launcher.cpp:326 gui/launcher.cpp:408 #: backends/platform/wii/options.cpp:56 msgid "Default" msgstr "·Ð ãÜÞÒçÐÝÝïÜ" -#: gui/launcher.cpp:453 gui/options.cpp:1302 +#: gui/launcher.cpp:446 gui/options.cpp:1356 msgid "Select SoundFont" msgstr "²ØÑÕàöâì SoundFont" -#: gui/launcher.cpp:472 gui/launcher.cpp:619 +#: gui/launcher.cpp:465 gui/launcher.cpp:612 msgid "Select directory with game data" msgstr "²ØÑÕàöâì ßÐßÚã × äÐÙÛÐÜØ ÓàØ" -#: gui/launcher.cpp:490 +#: gui/launcher.cpp:483 msgid "Select additional game directory" msgstr "²ØÑÕàöâì ÔÞÔÐâÚÞÒã ßÐßÚã ÓàØ" -#: gui/launcher.cpp:502 +#: gui/launcher.cpp:495 msgid "Select directory for saved games" msgstr "²ØÑÕàöâì ßÐßÚã ÔÛï ×ÑÕàÕÖÕÝì" -#: gui/launcher.cpp:521 +#: gui/launcher.cpp:514 msgid "This game ID is already taken. Please choose another one." msgstr "ÆÕÙ ID ÓàØ ÒÖÕ ÒØÚÞàØáâÞÒãôâìáï. ±ãÔì ÛÐáÚÐ, ÒØÑÕàöâì öÝèØÙ." -#: gui/launcher.cpp:562 engines/dialogs.cpp:113 +#: gui/launcher.cpp:555 engines/dialogs.cpp:110 msgid "~Q~uit" msgstr "~²~ØåöÔ" -#: gui/launcher.cpp:562 +#: gui/launcher.cpp:555 msgid "Quit ScummVM" msgstr "²ØåöÔ × ScummVM" -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "A~b~out..." msgstr "¿àÞ ß~à~ÞÓàÐÜã..." -#: gui/launcher.cpp:563 +#: gui/launcher.cpp:556 msgid "About ScummVM" msgstr "¿àÞ ScummVM" -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "~O~ptions..." msgstr "~¾~ßæö÷..." -#: gui/launcher.cpp:564 +#: gui/launcher.cpp:557 msgid "Change global ScummVM options" msgstr "·ÜöÝØâØ ÓÛÞÑÐÛìÝö Þßæö÷ ScummVM" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "~S~tart" msgstr "·~Ð~ßãáÚ" -#: gui/launcher.cpp:566 +#: gui/launcher.cpp:559 msgid "Start selected game" msgstr "·ÐßãáâØâØ ÒØÑàÐÝã Óàã" -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "~L~oad..." msgstr "~·~ÐÒÐÝ..." -#: gui/launcher.cpp:569 +#: gui/launcher.cpp:562 msgid "Load savegame for selected game" msgstr "·ÐÒÐÝâÐÖØâØ ×ÑÕàÕÖÕÝÝï ÔÛï ÒØÑàÐÝÞ÷ ÓàØ" -#: gui/launcher.cpp:574 +#: gui/launcher.cpp:567 msgid "~A~dd Game..." msgstr "~´~ÞÔ. Óàã..." -#: gui/launcher.cpp:574 gui/launcher.cpp:581 +#: gui/launcher.cpp:567 gui/launcher.cpp:574 msgid "Hold Shift for Mass Add" msgstr "ÃâàØÜãÙâÕ ÚÛÐÒöèã Shift ÔÛï âÞÓÞ, éÞÑ ÔÞÔÐâØ ÔÕÚöÛìÚÐ öÓÞà" -#: gui/launcher.cpp:576 +#: gui/launcher.cpp:569 msgid "~E~dit Game..." msgstr "ÀÕÔÐ~Ó~. Óàã..." -#: gui/launcher.cpp:576 gui/launcher.cpp:583 +#: gui/launcher.cpp:569 gui/launcher.cpp:576 msgid "Change game options" msgstr "·ÜöÝØâØ Þßæö÷ ÓàØ" -#: gui/launcher.cpp:578 +#: gui/launcher.cpp:571 msgid "~R~emove Game" msgstr "~²~ØÔÐ󯉯 Óàã" -#: gui/launcher.cpp:578 gui/launcher.cpp:585 +#: gui/launcher.cpp:571 gui/launcher.cpp:578 msgid "Remove game from the list. The game data files stay intact" msgstr "²ØÔÐ󯉯 Óàã ×ö áߨáÚã. ½Õ ÒØÔÐÛïô Óàã × ÖÞàáâÚÞÓÞ ÔØáÚã" -#: gui/launcher.cpp:581 +#: gui/launcher.cpp:574 msgctxt "lowres" msgid "~A~dd Game..." msgstr "~´~ÞÔÐâØ Óàã..." -#: gui/launcher.cpp:583 +#: gui/launcher.cpp:576 msgctxt "lowres" msgid "~E~dit Game..." msgstr "ÀÕÔÐ~Ó~. Óàã..." -#: gui/launcher.cpp:585 +#: gui/launcher.cpp:578 msgctxt "lowres" msgid "~R~emove Game" msgstr "~²~ØÔÐ󯉯 Óàã" -#: gui/launcher.cpp:593 +#: gui/launcher.cpp:586 msgid "Search in game list" msgstr "¿ÞèãÚ ã áߨáÚã öÓÞà" -#: gui/launcher.cpp:597 gui/launcher.cpp:1111 +#: gui/launcher.cpp:590 gui/launcher.cpp:1102 msgid "Search:" msgstr "¿ÞèãÚ:" -#: gui/launcher.cpp:600 gui/options.cpp:772 +#: gui/launcher.cpp:593 gui/options.cpp:826 msgid "Clear value" msgstr "¾çØáâØâØ ×ÝÐçÕÝÝï" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 msgid "Load game:" msgstr "·ÐÒÐÝâÐÖØâØ Óàã:" -#: gui/launcher.cpp:622 engines/dialogs.cpp:117 engines/mohawk/myst.cpp:255 -#: engines/mohawk/riven.cpp:715 engines/cruise/menu.cpp:218 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: gui/launcher.cpp:615 engines/dialogs.cpp:114 engines/mohawk/myst.cpp:255 +#: engines/mohawk/riven.cpp:711 engines/cruise/menu.cpp:216 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Load" msgstr "·ÐÒÐÝâÐÖØâØ" -#: gui/launcher.cpp:731 +#: gui/launcher.cpp:723 msgid "" "Do you really want to run the mass game detector? This could potentially add " "a huge number of games." @@ -440,204 +449,221 @@ msgstr "" "ÇØ ÒØ ÔöÙáÝÞ åÞçÕâÕ ×ÐßãáâØâØ ÔÕâÕÚâÞà ãáöå öÓÞà? ÆÕ ßÞâÕÝæöÙÝÞ ÜÞÖÕ ÔÞÔÐâØ " "ÒÕÛØÚã ÚöÛìÚöáâì öÓÞà." -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Yes" msgstr "ÂÐÚ" -#: gui/launcher.cpp:732 gui/launcher.cpp:881 -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: gui/launcher.cpp:724 gui/launcher.cpp:872 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "No" msgstr "½ö" -#: gui/launcher.cpp:779 +#: gui/launcher.cpp:772 msgid "ScummVM couldn't open the specified directory!" msgstr "ScummVM ÝÕ ÜÞÖÕ ÒöÔÚàØâØ ÒÚÐ×ÐÝã ßÐßÚã!" -#: gui/launcher.cpp:791 +#: gui/launcher.cpp:784 msgid "ScummVM could not find any game in the specified directory!" msgstr "ScummVM ÝÕ ÜÞÖÕ ×ÝÐÙâØ Óàã ã ÒÚÐ×ÐÝöÙ ßÐßæö!" -#: gui/launcher.cpp:805 +#: gui/launcher.cpp:798 msgid "Pick the game:" msgstr "²ØÑÕàöâì Óàã:" -#: gui/launcher.cpp:881 +#: gui/launcher.cpp:872 msgid "Do you really want to remove this game configuration?" msgstr "²Ø ÔöÙáÝÞ åÞçÕâÕ ÒØÔÐ󯉯 ãáâÐÝÞÒÚØ ÔÛï æöô÷ ÓàØ?" -#: gui/launcher.cpp:945 +#: gui/launcher.cpp:936 msgid "This game does not support loading games from the launcher." msgstr "Æï ÓàÐ ÝÕ ßöÔâàØÜãô ×ÐÒÐÝâÐÖÕÝÝï ×ÑÕàÕÖÕÝì çÕàÕ× ÓÞÛÞÒÝÕ ÜÕÝî." -#: gui/launcher.cpp:949 +#: gui/launcher.cpp:940 msgid "ScummVM could not find any engine capable of running the selected game!" msgstr "ScummVM ÝÕ ×ÜöÓ ×ÝÐÙâØ ÔÒØÖÞÚ ÔÛï ×ÐßãáÚã ÒØÑàÐÝÞ÷ ÓàØ!" -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgctxt "lowres" msgid "Mass Add..." msgstr "´ÞÔ. ÑÐÓÐâÞ..." -#: gui/launcher.cpp:1063 +#: gui/launcher.cpp:1054 msgid "Mass Add..." msgstr "´ÞÔ. ÑÐÓÐâÞ..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgctxt "lowres" msgid "Add Game..." msgstr "´ÞÔÐâØ Óàã..." -#: gui/launcher.cpp:1064 +#: gui/launcher.cpp:1055 msgid "Add Game..." msgstr "´ÞÔÐâØ Óàã..." -#: gui/massadd.cpp:79 gui/massadd.cpp:82 +#: gui/massadd.cpp:76 gui/massadd.cpp:79 msgid "... progress ..." msgstr "... ßÞèãÚ ..." -#: gui/massadd.cpp:244 +#: gui/massadd.cpp:243 msgid "Scan complete!" msgstr "¿ÞèãÚ ×ÐÚöÝçÕÝÞ!" -#: gui/massadd.cpp:247 +#: gui/massadd.cpp:246 #, c-format -msgid "Discovered %d new games." -msgstr "·ÝÐÙÔÕÝÞ %d ÝÞÒØå öÓÞà." +msgid "Discovered %d new games, ignored %d previously added games." +msgstr "" -#: gui/massadd.cpp:251 +#: gui/massadd.cpp:250 #, c-format msgid "Scanned %d directories ..." msgstr "¿àÞÓÛïÝãâÞ %d ßÐßÞÚ ..." -#: gui/massadd.cpp:254 -#, c-format -msgid "Discovered %d new games ..." +#: gui/massadd.cpp:253 +#, fuzzy, c-format +msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "·ÝÐÙÔÕÝÞ %d ÝÞÒØå öÓÞà ..." -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "Never" msgstr "½öÚÞÛØ" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 5 mins" msgstr "ÚÞÖÝö 5 åÒ" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 10 mins" msgstr "ÚÞÖÝö 10 åÒ" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 15 mins" msgstr "ÚÞÖÝö 15 åÒ" -#: gui/options.cpp:78 +#: gui/options.cpp:72 msgid "every 30 mins" msgstr "ÚÞÖÝö 30 åÒ" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "8 kHz" msgstr "8 Ú³æ" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "11kHz" msgstr "11 Ú³æ" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "22 kHz" msgstr "22 Ú³æ" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "44 kHz" msgstr "44 Ú³æ" -#: gui/options.cpp:80 +#: gui/options.cpp:74 msgid "48 kHz" msgstr "48 Ú³æ" -#: gui/options.cpp:242 gui/options.cpp:407 gui/options.cpp:505 -#: gui/options.cpp:571 gui/options.cpp:771 +#: gui/options.cpp:236 gui/options.cpp:464 gui/options.cpp:559 +#: gui/options.cpp:625 gui/options.cpp:825 msgctxt "soundfont" msgid "None" msgstr "½Õ ×ÐÔÐÝØÙ" -#: gui/options.cpp:651 +#: gui/options.cpp:372 +msgid "Failed to apply some of the graphic options changes:" +msgstr "" + +#: gui/options.cpp:384 +msgid "the video mode could not be changed." +msgstr "" + +#: gui/options.cpp:390 +msgid "the fullscreen setting could not be changed" +msgstr "" + +#: gui/options.cpp:396 +msgid "the aspect ratio setting could not be changed" +msgstr "" + +#: gui/options.cpp:705 msgid "Graphics mode:" msgstr "³àÐäöçÝ. àÕÖØÜ:" -#: gui/options.cpp:662 +#: gui/options.cpp:716 msgid "Render mode:" msgstr "ÀÕÖØÜ àÐáâàãÒ.:" -#: gui/options.cpp:662 gui/options.cpp:663 +#: gui/options.cpp:716 gui/options.cpp:717 msgid "Special dithering modes supported by some games" msgstr "ÁßÕæöÐÛìÝö àÕÖØÜØ àÐáâàãÒÐÝÝï, ïÚö ßöÔâàØÜãîâì ÔÕïÚö öÓàØ" -#: gui/options.cpp:672 +#: gui/options.cpp:726 backends/graphics/sdl/sdl-graphics.cpp:2252 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:456 msgid "Fullscreen mode" msgstr "¿ÞÒÝÞÕÚàÐÝÝØÙ àÕÖØÜ" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Aspect ratio correction" msgstr "ºÞàÕÚæöï áßöÒÒöÔÝÞèÕÝÝï áâÞàöÝ" -#: gui/options.cpp:675 +#: gui/options.cpp:729 msgid "Correct aspect ratio for 320x200 games" msgstr "ºÞàØÓãÒÐâØ áßöÒÒöÔÝÞèÕÝÝï áâÞàöÝ ÔÛï öÓÞà × ÓàÐäöÚÞî 320x200" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "EGA undithering" msgstr "EGA ÑÕ× àÐáâàãÒÐÝÝï" -#: gui/options.cpp:676 +#: gui/options.cpp:730 msgid "Enable undithering in EGA games that support it" msgstr "²öÜÚÝãâØ ÑÕ× àÐáâàãÒÐÝÝï Ò EGA öÓàÐå ïÚö ßöÔâàØÜãîâì æÕ" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Preferred Device:" msgstr "³ÞÛÞÒÝ. ßàØáâàöÙ:" -#: gui/options.cpp:684 +#: gui/options.cpp:738 msgid "Music Device:" msgstr "¼ãרç. ßàØáâàöÙ:" -#: gui/options.cpp:684 gui/options.cpp:686 +#: gui/options.cpp:738 gui/options.cpp:740 msgid "Specifies preferred sound device or sound card emulator" msgstr "²ÚÐ×ãô ÒØåöÔÝØÙ ×ÒãÚÞÒØÙ ßàØáâàöÙ ÐÑÞ ÕÜãÛïâÞà ×ÒãÚÞÒÞ÷ ÚÐàâØ" -#: gui/options.cpp:684 gui/options.cpp:686 gui/options.cpp:687 +#: gui/options.cpp:738 gui/options.cpp:740 gui/options.cpp:741 msgid "Specifies output sound device or sound card emulator" msgstr "²ÚÐ×ãô ÒØåöÔÝØÙ ×ÒãÚÞÒØÙ ßàØáâàöÙ ÐÑÞ ÕÜãÛïâÞà ×ÒãÚÞÒÞ÷ ÚÐàâØ" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Preferred Dev.:" msgstr "ÀÕÚÞÜ. ßàØáâàöÙ:" -#: gui/options.cpp:686 +#: gui/options.cpp:740 msgctxt "lowres" msgid "Music Device:" msgstr "¼ãרçÝØÙ ßàØáâàöÙ:" -#: gui/options.cpp:712 +#: gui/options.cpp:766 msgid "AdLib emulator:" msgstr "µÜãÛïâÞà AdLib:" -#: gui/options.cpp:712 gui/options.cpp:713 +#: gui/options.cpp:766 gui/options.cpp:767 msgid "AdLib is used for music in many games" msgstr "·ÒãÚÞÒÐ ÚÐàâÐ AdLib ÒØÚÞàØáâÞÒãôâìáï ÑÐÓÐâìÜÐ öÓàÐÜØ" -#: gui/options.cpp:723 +#: gui/options.cpp:777 msgid "Output rate:" msgstr "²ØåöÔÝÐ çÐáâÞâÐ:" -#: gui/options.cpp:723 gui/options.cpp:724 +#: gui/options.cpp:777 gui/options.cpp:778 msgid "" "Higher value specifies better sound quality but may be not supported by your " "soundcard" @@ -645,63 +671,63 @@ msgstr "" "²ÕÛØÚö ×ÝÐçÕÝÝï ×ÐÔÐîâì ÚàÐéã ïÚöáâì ×ÒãÚã, ßàÞâÕ ÒÞÝØ ÜÞÖãâì ÝÕ " "ßöÔâàØÜãÒÐâØáï ÒÐèÞî ×ÒãÚÞÒÞî ÚÐàâÞî" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "GM Device:" msgstr "¿àØáâàöÙ GM:" -#: gui/options.cpp:734 +#: gui/options.cpp:788 msgid "Specifies default sound device for General MIDI output" msgstr "²ÚÐ×ãô ÒØåöÔÝØÙ ×ÒãÚÞÒØÙ ßàØáâàöÙ ÔÛï MIDI" -#: gui/options.cpp:745 +#: gui/options.cpp:799 msgid "Don't use General MIDI music" msgstr "½Õ ÒØÚÞàØáâÞÒãÒÐâØ General MIDI ÜãרÚã" -#: gui/options.cpp:756 gui/options.cpp:817 +#: gui/options.cpp:810 gui/options.cpp:871 msgid "Use first available device" msgstr "²ØÚÞàØáâÞÒãÒÐâØ ßÕàèØÙ ÝÐïÒÝØÙ ßàØáâàöÙ" -#: gui/options.cpp:768 +#: gui/options.cpp:822 msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:768 gui/options.cpp:770 gui/options.cpp:771 +#: gui/options.cpp:822 gui/options.cpp:824 gui/options.cpp:825 msgid "SoundFont is supported by some audio cards, Fluidsynth and Timidity" msgstr "" "SoundFont ßöÔâàØÜãôâìáï ÔÕïÚØÜØ ×ÒãÚÞÒØÜØ ÚÐàâÐÜØ, Fluidsynth ö Timidity" -#: gui/options.cpp:770 +#: gui/options.cpp:824 msgctxt "lowres" msgid "SoundFont:" msgstr "SoundFont:" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Mixed AdLib/MIDI mode" msgstr "·ÜöèÐÝØÙ àÕÖØÜ AdLib/MIDI" -#: gui/options.cpp:775 +#: gui/options.cpp:829 msgid "Use both MIDI and AdLib sound generation" msgstr "²ØÚÞàØáâÞÒãÒÐâØ ö MIDI ö AdLib ÔÛï ÓÕÝÕàÐæö÷ ×ÒãÚã" -#: gui/options.cpp:778 +#: gui/options.cpp:832 msgid "MIDI gain:" msgstr "¿ÞáØÛÕÝÝï MIDI:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "MT-32 Device:" msgstr "¿àØáâàöÙ MT-32:" -#: gui/options.cpp:788 +#: gui/options.cpp:842 msgid "Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output" msgstr "" "²ÚÐ×ãô ×ÒãÚÞÒØÙ ßàØáâàöÙ ßÞ ãÜÞÒçÐÝÝî ÔÛï ÒØÒÞÔã ÝÐ Roland MT-32/LAPC1/CM32l/" "CM64" -#: gui/options.cpp:793 +#: gui/options.cpp:847 msgid "True Roland MT-32 (disable GM emulation)" msgstr "ÁßàÐÒÖÝöÙ Roland MT-32 (ÒØÜÚÝãâØ ÕÜãÛïæØî GM)" -#: gui/options.cpp:793 gui/options.cpp:795 +#: gui/options.cpp:847 gui/options.cpp:849 msgid "" "Check if you want to use your real hardware Roland-compatible sound device " "connected to your computer" @@ -709,193 +735,194 @@ msgstr "" "²öÔÜöâìâÕ, ïÚéÞ ã ÒÐá ßöÔÚÛîçÕÝØÙ Roland-áãÜöáÝØÙ ×ÒãÚÞÒØÙ ßàØáâàöÙ ö ÒØ " "åÞçÕâÕ ÙÞÓÞ ÒØÚÞàØáâÐâØ" -#: gui/options.cpp:795 +#: gui/options.cpp:849 msgctxt "lowres" msgid "True Roland MT-32 (no GM emulation)" msgstr "ÁßàÐÒÖÝöÙ Roland MT-32 (ÒØÜÚÝãâØ ÕÜãÛïæØî GM)" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Enable Roland GS Mode" msgstr "ÃÒöÜÚÝãâØ àÕÖØÜ Roland GS" -#: gui/options.cpp:798 +#: gui/options.cpp:852 msgid "Turns off General MIDI mapping for games with Roland MT-32 soundtrack" msgstr "" "²ØÜØÚÐô ÜÐßöÝÓ General MIDI ÔÛï öÓÞà ö× ×ÒãÚÞÒÞî ÔÞàöÖÚÞî ÔÛï Roland MT-32" -#: gui/options.cpp:807 +#: gui/options.cpp:861 msgid "Don't use Roland MT-32 music" msgstr "½Õ ÒØÚÞàØáâÞÒãÒÐâØ Roland MT-32" -#: gui/options.cpp:834 +#: gui/options.cpp:888 msgid "Text and Speech:" msgstr "ÂÕÚáâ ö Þ×ÒãçÚÐ:" -#: gui/options.cpp:838 gui/options.cpp:848 +#: gui/options.cpp:892 gui/options.cpp:902 msgid "Speech" msgstr "¾×ÒãçÚÐ" -#: gui/options.cpp:839 gui/options.cpp:849 +#: gui/options.cpp:893 gui/options.cpp:903 msgid "Subtitles" msgstr "ÁãÑâØâàØ" -#: gui/options.cpp:840 +#: gui/options.cpp:894 msgid "Both" msgstr "²áÕ" -#: gui/options.cpp:842 +#: gui/options.cpp:896 msgid "Subtitle speed:" msgstr "ÈÒØÔ. áãÑâØâàöÒ:" -#: gui/options.cpp:844 +#: gui/options.cpp:898 msgctxt "lowres" msgid "Text and Speech:" msgstr "ÂÕÚáâ ö Þ×ÒãçÚÐ:" -#: gui/options.cpp:848 +#: gui/options.cpp:902 msgid "Spch" msgstr "¾×Ò" -#: gui/options.cpp:849 +#: gui/options.cpp:903 msgid "Subs" msgstr "ÁãÑ" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgctxt "lowres" msgid "Both" msgstr "²áÕ" -#: gui/options.cpp:850 +#: gui/options.cpp:904 msgid "Show subtitles and play speech" msgstr "¿ÞÚÐ×ãÒÐâØ áãÑâØâàØ ö ÒöÔâÒÞàîÒÐâØ ÜÞÒã" -#: gui/options.cpp:852 +#: gui/options.cpp:906 msgctxt "lowres" msgid "Subtitle speed:" msgstr "ÈÒØÔ. áãÑâØâàöÒ:" -#: gui/options.cpp:868 +#: gui/options.cpp:922 msgid "Music volume:" msgstr "³ãçÝöáâì Üã×ØÚØ:" -#: gui/options.cpp:870 +#: gui/options.cpp:924 msgctxt "lowres" msgid "Music volume:" msgstr "³ãçÝöáâì Üã×ØÚØ:" -#: gui/options.cpp:877 +#: gui/options.cpp:931 msgid "Mute All" msgstr "²ØÜÚÝãâØ ÒáÕ" -#: gui/options.cpp:880 +#: gui/options.cpp:934 msgid "SFX volume:" msgstr "³ãçÝöáâì ÕäÕÚâöÒ:" -#: gui/options.cpp:880 gui/options.cpp:882 gui/options.cpp:883 +#: gui/options.cpp:934 gui/options.cpp:936 gui/options.cpp:937 msgid "Special sound effects volume" msgstr "³ãçÝöáâì áßÕæöÐÛìÝØå ×ÒãÚÞÒØå ÕäÕÚâöÒ" -#: gui/options.cpp:882 +#: gui/options.cpp:936 msgctxt "lowres" msgid "SFX volume:" msgstr "³ãçÝöá. ÕäÕÚâöÒ:" -#: gui/options.cpp:890 +#: gui/options.cpp:944 msgid "Speech volume:" msgstr "³ãçÝöáâì Þ×ÒãçÚØ:" -#: gui/options.cpp:892 +#: gui/options.cpp:946 msgctxt "lowres" msgid "Speech volume:" msgstr "³ãçÝöá. Þ×ÒãçÚØ:" -#: gui/options.cpp:1031 +#: gui/options.cpp:1085 msgid "Theme Path:" msgstr "ÈÛïå ÔÞ âÕÜ:" -#: gui/options.cpp:1033 +#: gui/options.cpp:1087 msgctxt "lowres" msgid "Theme Path:" msgstr "ÈÛïå ÔÞ âÕÜ:" -#: gui/options.cpp:1037 gui/options.cpp:1039 gui/options.cpp:1040 +#: gui/options.cpp:1091 gui/options.cpp:1093 gui/options.cpp:1094 msgid "Specifies path to additional data used by all games or ScummVM" msgstr "" "²ÚÐ×ãô èÛïå ÔÞ ÔÞÔÐâÚÞÒØå äÐÙÛöÒ ÔÐÝØå, ÒØÚÞàØáâÞÒãÒÐÝØå ãáöÜÐ öÓàÐÜØ ÐÑÞ " "ScummVM" -#: gui/options.cpp:1044 +#: gui/options.cpp:1098 msgid "Plugins Path:" msgstr "ÈÛïå ÔÞ ÒâãÛÚöÒ:" -#: gui/options.cpp:1046 +#: gui/options.cpp:1100 msgctxt "lowres" msgid "Plugins Path:" msgstr "ÈÛïå ÔÞ ÒâãÛÚöÒ:" -#: gui/options.cpp:1055 +#: gui/options.cpp:1109 msgid "Misc" msgstr "Àö×ÝÕ" -#: gui/options.cpp:1057 +#: gui/options.cpp:1111 msgctxt "lowres" msgid "Misc" msgstr "Àö×ÝÕ" -#: gui/options.cpp:1059 +#: gui/options.cpp:1113 msgid "Theme:" msgstr "ÂÕÜÐ:" -#: gui/options.cpp:1063 +#: gui/options.cpp:1117 msgid "GUI Renderer:" msgstr "ÀÐáâÕà. GUI:" -#: gui/options.cpp:1075 +#: gui/options.cpp:1129 msgid "Autosave:" msgstr "°ÒâÞ×ÑÕàÕÖÕÝÝï:" -#: gui/options.cpp:1077 +#: gui/options.cpp:1131 msgctxt "lowres" msgid "Autosave:" msgstr "°ÒâÞ×ÑÕàÕÖ.:" -#: gui/options.cpp:1085 +#: gui/options.cpp:1139 msgid "Keys" msgstr "ºÛÐÒöèö" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "GUI Language:" msgstr "¼ÞÒÐ öÝâÕàä.:" -#: gui/options.cpp:1092 +#: gui/options.cpp:1146 msgid "Language of ScummVM GUI" msgstr "¼ÞÒÐ ÓàÐäöçÝÞÓÞ öÝâÕàäÕÙáã ScummVM" -#: gui/options.cpp:1241 -msgid "You have to restart ScummVM to take the effect." +#: gui/options.cpp:1295 +#, fuzzy +msgid "You have to restart ScummVM before your changes will take effect." msgstr "²Ø ßÞÒØÝÝö ßÕàÕ×ÐßãáâØâØ ScummVM éÞÑ ×ÐáâÞáãÒÐâØ ×ÜöÝØ." -#: gui/options.cpp:1254 +#: gui/options.cpp:1308 msgid "Select directory for savegames" msgstr "²ØÑÕàöâì ßÐßÚã ÔÛï ×ÑÕàÕÖÕÝì" -#: gui/options.cpp:1261 +#: gui/options.cpp:1315 msgid "The chosen directory cannot be written to. Please select another one." msgstr "½Õ ÜÞÖã ߨáÐâØ ã ÒØÑàÐÝã ßÐßÚã. ±ãÔì ÛÐáÚÐ, ÒÚÐÖöâì öÝèã." -#: gui/options.cpp:1270 +#: gui/options.cpp:1324 msgid "Select directory for GUI themes" msgstr "²ØÑÕàöâì ßÐßÚã ÔÛï âÕÜ GUI" -#: gui/options.cpp:1280 +#: gui/options.cpp:1334 msgid "Select directory for extra files" msgstr "²ØÑÕàöâì ßÐßÚã × ÔÞÔÐâÚÞÒØÜØ äÐÙÛÐÜØ" -#: gui/options.cpp:1291 +#: gui/options.cpp:1345 msgid "Select directory for plugins" msgstr "²ØÑÕàöâì ßÐßÚã ×ö ÒâãÛÚÐÜØ" -#: gui/options.cpp:1335 +#: gui/options.cpp:1389 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." @@ -903,779 +930,855 @@ msgstr "" "²ØÑàÐÝÐ âÕÜÐ ÝÕ ßöÔâàØÜãô ßÞâÞçÝã ÜÞÒã. ÏÚéÞ ÒØ åÞçÕâÕ ÒØÚÞàØáâÞÒãÒÐâØ æî " "âÕÜã, ßÞâàöÑÝÞ Ò ßÕàèã çÕàÓã ×ÜöÝØâØ ÜÞÒã." -#: gui/saveload.cpp:61 gui/saveload.cpp:242 +#: gui/saveload.cpp:58 gui/saveload.cpp:239 msgid "No date saved" msgstr "´ÐâÐ ÝÕ ×ÐߨáÐÝÐ" -#: gui/saveload.cpp:62 gui/saveload.cpp:243 +#: gui/saveload.cpp:59 gui/saveload.cpp:240 msgid "No time saved" msgstr "ÇÐá ÝÕ ×ÐߨáÐÝØÙ" -#: gui/saveload.cpp:63 gui/saveload.cpp:244 +#: gui/saveload.cpp:60 gui/saveload.cpp:241 msgid "No playtime saved" msgstr "ÇÐá ÓàØ ÝÕ ×ÐߨáÐÝÞ" -#: gui/saveload.cpp:70 gui/saveload.cpp:158 +#: gui/saveload.cpp:67 gui/saveload.cpp:155 msgid "Delete" msgstr "²ØÔÐÛØâØ" -#: gui/saveload.cpp:157 +#: gui/saveload.cpp:154 msgid "Do you really want to delete this savegame?" msgstr "²Ø ÔöÙáÝÞ åÞçÕâÕ ÒØÔÐ󯉯 æÕ ×ÑÕàÕÖÕÝÝï?" -#: gui/saveload.cpp:266 +#: gui/saveload.cpp:263 msgid "Date: " msgstr "´ÐâÐ: " -#: gui/saveload.cpp:269 +#: gui/saveload.cpp:266 msgid "Time: " msgstr "ÇÐá: " -#: gui/saveload.cpp:274 +#: gui/saveload.cpp:271 msgid "Playtime: " msgstr "ÇÐá ÓàØ: " -#: gui/saveload.cpp:287 gui/saveload.cpp:354 +#: gui/saveload.cpp:284 gui/saveload.cpp:351 msgid "Untitled savestate" msgstr "·ÑÕàÕÖÕÝÝï ÑÕ× öÜÕÝö" -#: gui/themebrowser.cpp:47 +#: gui/themebrowser.cpp:44 msgid "Select a Theme" msgstr "²ØÑÕàöâì âÕÜã" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgid "Disabled GFX" msgstr "±Õ× ÓàÐäöÚØ" -#: gui/ThemeEngine.cpp:332 +#: gui/ThemeEngine.cpp:327 msgctxt "lowres" msgid "Disabled GFX" msgstr "±Õ× ÓàÐäöÚØ" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard Renderer (16bpp)" msgstr "ÁâÐÝÔÐàâÝØÙ àÐáâÕàØ×ÐâÞà (16bpp)" -#: gui/ThemeEngine.cpp:333 +#: gui/ThemeEngine.cpp:328 msgid "Standard (16bpp)" msgstr "ÁâÐÝÔÐàâÝØÙ àÐáâÕàØ×ÐâÞà (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased Renderer (16bpp)" msgstr "ÀÐáâÕàØ×ÐâÞà ×ö ×ÓÛÐÔÖãÒÐÝÝïÜ (16bpp)" -#: gui/ThemeEngine.cpp:335 +#: gui/ThemeEngine.cpp:330 msgid "Antialiased (16bpp)" msgstr "ÀÐáâÕàØ×ÐâÞà ×ö ×ÓÛÐÔÖãÒÐÝÝïÜ (16bpp)" -#: base/main.cpp:201 +#: base/main.cpp:200 #, c-format msgid "Engine does not support debug level '%s'" msgstr "´ÒØÖÞÚ ÝÕ ßöÔâàØÜãô àöÒÕÝì ÒöÔÛÐÔÚØ '%s'" -#: base/main.cpp:269 +#: base/main.cpp:268 msgid "Menu" msgstr "¼ÕÝî" -#: base/main.cpp:272 backends/platform/symbian/src/SymbianActions.cpp:48 -#: backends/platform/wince/CEActionsPocket.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:49 +#: base/main.cpp:271 backends/platform/symbian/src/SymbianActions.cpp:45 +#: backends/platform/wince/CEActionsPocket.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:46 msgid "Skip" msgstr "¿àÞßãáâØâØ" -#: base/main.cpp:275 backends/platform/symbian/src/SymbianActions.cpp:53 -#: backends/platform/wince/CEActionsPocket.cpp:45 +#: base/main.cpp:274 backends/platform/symbian/src/SymbianActions.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:42 msgid "Pause" msgstr "¿Ðã×Ð" -#: base/main.cpp:278 +#: base/main.cpp:277 msgid "Skip line" msgstr "¿àÞßãáâØâØ àïÔÞÚ" -#: base/main.cpp:433 +#: base/main.cpp:432 msgid "Error running game:" msgstr "¿ÞÜØÛÚÐ ×ÐßãáÚã ÓàØ:" -#: base/main.cpp:457 +#: base/main.cpp:456 msgid "Could not find any engine capable of running the selected game" msgstr "½Õ ÜÞÖã ×ÝÐÙâØ ÔÒØÖÞÚ ÔÛï ×ÐßãáÚã ÒØÑàÐÝÞ÷ ÓàØ" -#: common/error.cpp:42 +#: common/error.cpp:38 msgid "No error" msgstr "½ÕÜÐô ßÞÜØÛÚØ" -#: common/error.cpp:44 +#: common/error.cpp:40 msgid "Game data not found" msgstr "½ÕÜÐô äÐÙÛöÒ ÓàØ" -#: common/error.cpp:46 +#: common/error.cpp:42 msgid "Game id not supported" msgstr "Game Id ÝÕ ßöÔâàØÜãôâìáï" -#: common/error.cpp:48 +#: common/error.cpp:44 msgid "Unsupported color mode" msgstr "ÀÕÖØÜ ÚÞÛìÞàã ÝÕ ßöÔâàØÜãôâìáï" -#: common/error.cpp:51 +#: common/error.cpp:47 msgid "Read permission denied" msgstr "½ÕÔÞáâÐâÝìÞ ßàÐÒ ÔÛï çØâÐÝÝï" -#: common/error.cpp:53 +#: common/error.cpp:49 msgid "Write permission denied" msgstr "½ÕÔÞáâÐâÝìÞ ßàÐÒ ÔÛï ×Ðߨáã" -#: common/error.cpp:56 +#: common/error.cpp:52 msgid "Path does not exist" msgstr "ÈÛïå ÝÕ ×ÝÐÙÔÕÝÞ" -#: common/error.cpp:58 +#: common/error.cpp:54 msgid "Path not a directory" msgstr "ÈÛïå ÝÕ ô ßÐßÚÞî" -#: common/error.cpp:60 +#: common/error.cpp:56 msgid "Path not a file" msgstr "ÈÛïå ÝÕ ô äÐÙÛÞÜ" -#: common/error.cpp:63 +#: common/error.cpp:59 msgid "Cannot create file" msgstr "½Õ ÜÞÖã áâÒÞàØâØ äÐÙÛ" -#: common/error.cpp:65 +#: common/error.cpp:61 msgid "Reading data failed" msgstr "¿ÞÜØÛÚÐ çØâÐÝÝï" -#: common/error.cpp:67 +#: common/error.cpp:63 msgid "Writing data failed" msgstr "¿ÞÜØÛÚÐ ×Ðߨáã ÔÐÝØå" -#: common/error.cpp:70 +#: common/error.cpp:66 msgid "Could not find suitable engine plugin" msgstr "½Õ ÜÞÖã ×ÝÐÙâØ ÝÕÞÑåöÔÕÞÓÞ ÒâãÛÚÐ ÔÛï ÔÒØÖÚÐ." -#: common/error.cpp:72 +#: common/error.cpp:68 msgid "Engine plugin does not support save states" msgstr "´ÒØÖÞÚ ÝÕ ßöÔâàØÜãô àöÒÕÝì ÒöÔÛÐÔÚØ '%s'" -#: common/error.cpp:75 -msgid "Command line argument not processed" -msgstr "°àÓãÜÕÝâØ ÚÞÜÐÝÔÝÞÓÞ àïÔÚã ÝÕ ÞÑàÞÑÛÕÝö" - -#: common/error.cpp:79 +#: common/error.cpp:72 msgid "Unknown error" msgstr "½ÕÒöÔÞÜÐ ßÞÜØÛÚÐ" -#: common/util.cpp:276 +#: common/util.cpp:274 msgid "Hercules Green" msgstr "Hercules ·ÕÛÕÝØÙ" -#: common/util.cpp:277 +#: common/util.cpp:275 msgid "Hercules Amber" msgstr "Hercules ÏÝâÐàÝØÙ" -#: common/util.cpp:284 +#: common/util.cpp:282 msgctxt "lowres" msgid "Hercules Green" msgstr "Hercules ·ÕÛÕÝØÙ" -#: common/util.cpp:285 +#: common/util.cpp:283 msgctxt "lowres" msgid "Hercules Amber" msgstr "Hercules ÏÝâÐàÝØÙ" -#: engines/dialogs.cpp:87 +#: engines/advancedDetector.cpp:323 +#, c-format +msgid "The game in '%s' seems to be unknown." +msgstr "" + +#: engines/advancedDetector.cpp:324 +msgid "Please, report the following data to the ScummVM team along with name" +msgstr "" + +#: engines/advancedDetector.cpp:326 +msgid "of the game you tried to add and its version/language/etc.:" +msgstr "" + +#: engines/advancedDetector.cpp:574 +#, c-format +msgid "" +"Your game version has been detected using filename matching as a variant of %" +"s." +msgstr "" + +#: engines/advancedDetector.cpp:577 +msgid "If this is an original and unmodified version, please report any" +msgstr "" + +#: engines/advancedDetector.cpp:579 +msgid "information previously printed by ScummVM to the team." +msgstr "" + +#: engines/dialogs.cpp:84 msgid "~R~esume" msgstr "¿àÞÔÞÒ~Ö~ØâØ" -#: engines/dialogs.cpp:89 +#: engines/dialogs.cpp:86 msgid "~L~oad" msgstr "~·~ÐÒÐÝâÐÖØâØ" -#: engines/dialogs.cpp:93 +#: engines/dialogs.cpp:90 msgid "~S~ave" msgstr "~·~ÐߨáÐâØ" -#: engines/dialogs.cpp:97 +#: engines/dialogs.cpp:94 msgid "~O~ptions" msgstr "~¾~ßæö÷" -#: engines/dialogs.cpp:102 +#: engines/dialogs.cpp:99 msgid "~H~elp" msgstr "~´~ÞßÞÜÞÓÐ" -#: engines/dialogs.cpp:104 +#: engines/dialogs.cpp:101 msgid "~A~bout" msgstr "¿àÞ ßàÞ~Ó~àÐÜã" -#: engines/dialogs.cpp:107 engines/dialogs.cpp:185 +#: engines/dialogs.cpp:104 engines/dialogs.cpp:182 msgid "~R~eturn to Launcher" msgstr "~¿~ÞÒÕà. Ò ÓÞÛÞÒÝÕ ÜÕÝî" -#: engines/dialogs.cpp:109 engines/dialogs.cpp:187 +#: engines/dialogs.cpp:106 engines/dialogs.cpp:184 msgctxt "lowres" msgid "~R~eturn to Launcher" msgstr "~¿~ÞÒÕà.Ò ÓÞÛÞÒÝÕ ÜÕÝî" -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 msgid "Save game:" msgstr "·ÑÕàÕÓâØ Óàã: " -#: engines/dialogs.cpp:119 engines/cruise/menu.cpp:216 -#: engines/sci/engine/kfile.cpp:577 -#: backends/platform/symbian/src/SymbianActions.cpp:47 -#: backends/platform/wince/CEActionsPocket.cpp:46 -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:48 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: engines/dialogs.cpp:116 engines/cruise/menu.cpp:214 +#: engines/sci/engine/kfile.cpp:575 +#: backends/platform/symbian/src/SymbianActions.cpp:44 +#: backends/platform/wince/CEActionsPocket.cpp:43 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Save" msgstr "·ÐߨáÐâØ" -#: engines/dialogs.cpp:315 engines/mohawk/dialogs.cpp:92 -#: engines/mohawk/dialogs.cpp:130 +#: engines/dialogs.cpp:146 +msgid "" +"Sorry, this engine does not currently provide in-game help. Please consult " +"the README for basic information, and for instructions on how to obtain " +"further assistance." +msgstr "" + +#: engines/dialogs.cpp:312 engines/mohawk/dialogs.cpp:100 +#: engines/mohawk/dialogs.cpp:152 msgid "~O~K" msgstr "~O~K" -#: engines/dialogs.cpp:316 engines/mohawk/dialogs.cpp:93 -#: engines/mohawk/dialogs.cpp:131 +#: engines/dialogs.cpp:313 engines/mohawk/dialogs.cpp:101 +#: engines/mohawk/dialogs.cpp:153 msgid "~C~ancel" msgstr "²ö~Ô~ÜöÝÐ" -#: engines/dialogs.cpp:319 +#: engines/dialogs.cpp:316 msgid "~K~eys" msgstr "~º~ÛÐÒöèö" -#: engines/scumm/dialogs.cpp:284 +#: engines/engine.cpp:220 +msgid "Could not initialize color format." +msgstr "" + +#: engines/engine.cpp:228 +#, fuzzy +msgid "Could not switch to video mode: '" +msgstr "¿ÞâÞçÝØÙ ÒöÔÕÞàÕÖØÜ:" + +#: engines/engine.cpp:237 +#, fuzzy +msgid "Could not apply aspect ratio setting." +msgstr "ºÞàÕÚæöï áßöÒÒöÔÝÞèÕÝÝï áâÞàöÝ" + +#: engines/engine.cpp:242 +msgid "Could not apply fullscreen setting." +msgstr "" + +#: engines/engine.cpp:342 +msgid "" +"You appear to be playing this game directly\n" +"from the CD. This is known to cause problems,\n" +"and it is therefore recommended that you copy\n" +"the data files to your hard disk instead.\n" +"See the README file for details." +msgstr "" + +#: engines/engine.cpp:353 +msgid "" +"This game has audio tracks in its disk. These\n" +"tracks need to be ripped from the disk using\n" +"an appropriate CD audio extracting tool in\n" +"order to listen to the game's music.\n" +"See the README file for details." +msgstr "" + +#: engines/scumm/dialogs.cpp:281 msgid "~P~revious" msgstr "~¿~ÞßÕà" -#: engines/scumm/dialogs.cpp:285 +#: engines/scumm/dialogs.cpp:282 msgid "~N~ext" msgstr "~½~Ðáâ" -#: engines/scumm/dialogs.cpp:286 -#: backends/platform/ds/arm9/source/dsoptions.cpp:59 +#: engines/scumm/dialogs.cpp:283 +#: backends/platform/ds/arm9/source/dsoptions.cpp:56 msgid "~C~lose" msgstr "~·~ÐÚàØâØ" -#: engines/scumm/help.cpp:76 +#: engines/scumm/help.cpp:73 msgid "Common keyboard commands:" msgstr "¾áÝÞÒÝö ÚÞÜÐÝÔØ ÚÛÐÒöÐâãàØ:" -#: engines/scumm/help.cpp:77 +#: engines/scumm/help.cpp:74 msgid "Save / Load dialog" msgstr "´öÐÛÞÓ ×ÑÕàÕÖÕÝÝï/×ÐÒÐÝâÐÖÕÝÝï" -#: engines/scumm/help.cpp:79 +#: engines/scumm/help.cpp:76 msgid "Skip line of text" msgstr "¿àÞßãáâØâØ àïÔÞÚ âÕÚáâã" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Esc" msgstr "Esc" -#: engines/scumm/help.cpp:80 +#: engines/scumm/help.cpp:77 msgid "Skip cutscene" msgstr "¿àÞßãáâØâØ ×ÐáâÐÒÚã" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Space" msgstr "Space" -#: engines/scumm/help.cpp:81 +#: engines/scumm/help.cpp:78 msgid "Pause game" msgstr "¿Ðã×Ð" -#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:98 engines/scumm/help.cpp:99 -#: engines/scumm/help.cpp:100 engines/scumm/help.cpp:101 -#: engines/scumm/help.cpp:102 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:79 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:95 engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:97 engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:99 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Ctrl" msgstr "Ctrl" -#: engines/scumm/help.cpp:82 +#: engines/scumm/help.cpp:79 msgid "Load game state 1-10" msgstr "·ÐÒÐÝâÐÖØâØ áâÐÝ ÓàØ 1-10" -#: engines/scumm/help.cpp:83 engines/scumm/help.cpp:87 -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:103 -#: engines/scumm/help.cpp:104 engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:80 engines/scumm/help.cpp:84 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:101 engines/scumm/help.cpp:102 msgid "Alt" msgstr "Alt" -#: engines/scumm/help.cpp:83 +#: engines/scumm/help.cpp:80 msgid "Save game state 1-10" msgstr "·ÑÕàÕÓâØ áâÐÝ ÓàØ 1-10" -#: engines/scumm/help.cpp:85 engines/scumm/help.cpp:87 -#: backends/platform/symbian/src/SymbianActions.cpp:55 -#: backends/platform/wince/CEActionsPocket.cpp:47 -#: backends/platform/wince/CEActionsSmartphone.cpp:55 +#: engines/scumm/help.cpp:82 engines/scumm/help.cpp:84 +#: 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:244 msgid "Quit" msgstr "²ØåöÔ" -#: engines/scumm/help.cpp:89 engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:86 engines/scumm/help.cpp:89 msgid "Enter" msgstr "Enter" -#: engines/scumm/help.cpp:89 +#: engines/scumm/help.cpp:86 msgid "Toggle fullscreen" msgstr "ÃÒöÜÚÝãâØ ßÞÒÝÞÕÚàÐÝÝØÙ àÕÖØÜ" -#: engines/scumm/help.cpp:90 +#: engines/scumm/help.cpp:87 msgid "Music volume up / down" msgstr "³ãçÝöáâì Üã×ØÚØ ÒØéÕ/ÝØÖçÕ" -#: engines/scumm/help.cpp:91 +#: engines/scumm/help.cpp:88 msgid "Text speed slower / faster" msgstr "ÈÒØÔÚöáâì âÕÚáâã ßÞÒöÛìÝöèÕ/èÒØÔèÕ" -#: engines/scumm/help.cpp:92 +#: engines/scumm/help.cpp:89 msgid "Simulate left mouse button" msgstr "ÁØÜãÛîÒÐâØ ÛöÒØÙ ÚÛöÚ" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Tab" msgstr "Tab" -#: engines/scumm/help.cpp:93 +#: engines/scumm/help.cpp:90 msgid "Simulate right mouse button" msgstr "ÁØÜãÛîÒÐâØ ßàÐÒØÙ ÚÛöÚ" -#: engines/scumm/help.cpp:96 +#: engines/scumm/help.cpp:93 msgid "Special keyboard commands:" msgstr "ÁßÕæöÐÛìÝö ÚÞÜÐÝÔØ ÚÛÐÒöÐâãàØ:" -#: engines/scumm/help.cpp:97 +#: engines/scumm/help.cpp:94 msgid "Show / Hide console" msgstr "¿ÞÚÐ×ÐâØ/cåÞÒÐâØ ÚÞÝáÞÛì" -#: engines/scumm/help.cpp:98 +#: engines/scumm/help.cpp:95 msgid "Start the debugger" msgstr "·ÐßãáÚ ÒöÔÛÐÔçØÚÐ" -#: engines/scumm/help.cpp:99 +#: engines/scumm/help.cpp:96 msgid "Show memory consumption" msgstr "¿ÞÚÐ×ÐâØ áßÞÖØÒÐÝÝï ßÐÜ'ïâö" -#: engines/scumm/help.cpp:100 +#: engines/scumm/help.cpp:97 msgid "Run in fast mode (*)" msgstr "²ØÚÞÝÐâØ Ò èÒØÔÚÞÜã àÕÖØÜö (*)" -#: engines/scumm/help.cpp:101 +#: engines/scumm/help.cpp:98 msgid "Run in really fast mode (*)" msgstr "²ØÚÞÝÐâØ Ò ÔöÙáÝÞ èÒØÔÚÞÜã àÕÖØÜö (*)" -#: engines/scumm/help.cpp:102 +#: engines/scumm/help.cpp:99 msgid "Toggle mouse capture" msgstr "ÃÒöÜÚÝãâØ ×ÐåÞßÛÕÝÝï ÜØèö" -#: engines/scumm/help.cpp:103 +#: engines/scumm/help.cpp:100 msgid "Switch between graphics filters" msgstr "¿ÕàÕÚÛîçÕÝÝï ÜöÖ ÓàÐäöçÝØÜØ äöÛìâàÐÜØ" -#: engines/scumm/help.cpp:104 +#: engines/scumm/help.cpp:101 msgid "Increase / Decrease scale factor" msgstr "·ÑöÛìèÕÝÝï/×ÜÕÝèÕÝÝï ÜÐáèâÐÑã" -#: engines/scumm/help.cpp:105 +#: engines/scumm/help.cpp:102 msgid "Toggle aspect-ratio correction" msgstr "ºÞàÕÚæöï áßöÒÒöÔÝÞèÕÝÝï áâÞàöÝ" -#: engines/scumm/help.cpp:110 +#: engines/scumm/help.cpp:107 msgid "* Note that using ctrl-f and" msgstr "* ·ÐãÒÐÖØÜÞ, éÞ ÒØÚÞàØáâÐÝÝï ctrl-f ö" -#: engines/scumm/help.cpp:111 +#: engines/scumm/help.cpp:108 msgid " ctrl-g are not recommended" msgstr " ctrl-g ÝÕ àÕÚÞÜÕÝÔãôâìáï" -#: engines/scumm/help.cpp:112 +#: engines/scumm/help.cpp:109 msgid " since they may cause crashes" msgstr " ÞáÚöÛìÚØ ÒÞÝØ ÜÞÖãâì ÒØÚÛØÚÐâØ ×ÑÞ÷" -#: engines/scumm/help.cpp:113 -msgid " or incorrect game behaviour." +#: engines/scumm/help.cpp:110 +#, fuzzy +msgid " or incorrect game behavior." msgstr " ÐÑÞ ÝÕßàÐÒØÛìÝã ßÞÒÕÔöÝÚã ÓàØ." -#: engines/scumm/help.cpp:117 +#: engines/scumm/help.cpp:114 msgid "Spinning drafts on the keyboard:" msgstr "·ÜöÝÝö çÞàÝÞÒØÚØ ÝÐ ÚÛÐÒöÐâãàö:" -#: engines/scumm/help.cpp:119 +#: engines/scumm/help.cpp:116 msgid "Main game controls:" msgstr "¾áÝÞÒÝö Þßæö÷ ÚÕàãÒÐÝÝï:" -#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 -#: engines/scumm/help.cpp:164 +#: engines/scumm/help.cpp:121 engines/scumm/help.cpp:136 +#: engines/scumm/help.cpp:161 msgid "Push" msgstr "½ÐâØáÚ" -#: engines/scumm/help.cpp:125 engines/scumm/help.cpp:140 -#: engines/scumm/help.cpp:165 +#: engines/scumm/help.cpp:122 engines/scumm/help.cpp:137 +#: engines/scumm/help.cpp:162 msgid "Pull" msgstr "ÂïÓâØ" -#: engines/scumm/help.cpp:126 engines/scumm/help.cpp:141 -#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:199 -#: engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:123 engines/scumm/help.cpp:138 +#: engines/scumm/help.cpp:163 engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:206 msgid "Give" msgstr "´ÐâØ" -#: engines/scumm/help.cpp:127 engines/scumm/help.cpp:142 -#: engines/scumm/help.cpp:167 engines/scumm/help.cpp:192 -#: engines/scumm/help.cpp:210 +#: engines/scumm/help.cpp:124 engines/scumm/help.cpp:139 +#: engines/scumm/help.cpp:164 engines/scumm/help.cpp:189 +#: engines/scumm/help.cpp:207 msgid "Open" msgstr "²öÔÚàØâØ" -#: engines/scumm/help.cpp:129 +#: engines/scumm/help.cpp:126 msgid "Go to" msgstr "¹âØ ÔÞ" -#: engines/scumm/help.cpp:130 +#: engines/scumm/help.cpp:127 msgid "Get" msgstr "¾âàØÜÐâØ" -#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:155 -#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:200 -#: engines/scumm/help.cpp:215 engines/scumm/help.cpp:226 -#: engines/scumm/help.cpp:251 +#: engines/scumm/help.cpp:128 engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:170 engines/scumm/help.cpp:197 +#: engines/scumm/help.cpp:212 engines/scumm/help.cpp:223 +#: engines/scumm/help.cpp:248 msgid "Use" msgstr "²ØÚÞàØáâÐâØ" -#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:144 +#: engines/scumm/help.cpp:129 engines/scumm/help.cpp:141 msgid "Read" msgstr "ÇØâÐâØ" -#: engines/scumm/help.cpp:133 engines/scumm/help.cpp:150 +#: engines/scumm/help.cpp:130 engines/scumm/help.cpp:147 msgid "New kid" msgstr "½ÞÒÐ ÔØâØÝÐ" -#: engines/scumm/help.cpp:134 engines/scumm/help.cpp:156 -#: engines/scumm/help.cpp:174 +#: engines/scumm/help.cpp:131 engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:171 msgid "Turn on" msgstr "ÃÒöÜÚÝãâØ" -#: engines/scumm/help.cpp:135 engines/scumm/help.cpp:157 -#: engines/scumm/help.cpp:175 +#: engines/scumm/help.cpp:132 engines/scumm/help.cpp:154 +#: engines/scumm/help.cpp:172 msgid "Turn off" msgstr "²ØÜÚÝãâØ" -#: engines/scumm/help.cpp:145 engines/scumm/help.cpp:170 -#: engines/scumm/help.cpp:196 +#: engines/scumm/help.cpp:142 engines/scumm/help.cpp:167 +#: engines/scumm/help.cpp:193 msgid "Walk to" msgstr "¦âØ ÔÞ" -#: engines/scumm/help.cpp:146 engines/scumm/help.cpp:171 -#: engines/scumm/help.cpp:197 engines/scumm/help.cpp:212 -#: engines/scumm/help.cpp:229 +#: engines/scumm/help.cpp:143 engines/scumm/help.cpp:168 +#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:209 +#: engines/scumm/help.cpp:226 msgid "Pick up" msgstr "¿öÔöÑàÐâØ" -#: engines/scumm/help.cpp:147 engines/scumm/help.cpp:172 +#: engines/scumm/help.cpp:144 engines/scumm/help.cpp:169 msgid "What is" msgstr "ÉÞ ô" -#: engines/scumm/help.cpp:149 +#: engines/scumm/help.cpp:146 msgid "Unlock" msgstr "ÀÞ×ÑÛÞÚãÒÐâØ" -#: engines/scumm/help.cpp:152 +#: engines/scumm/help.cpp:149 msgid "Put on" msgstr "¿ÞáâÐ񯉯 ÝÐ" -#: engines/scumm/help.cpp:153 +#: engines/scumm/help.cpp:150 msgid "Take off" msgstr "·ÝïâØ" -#: engines/scumm/help.cpp:159 +#: engines/scumm/help.cpp:156 msgid "Fix" msgstr "½ÐÛÐÓÞÔØâØ" -#: engines/scumm/help.cpp:161 +#: engines/scumm/help.cpp:158 msgid "Switch" msgstr "¿ÕàÕÜÚÝãâØ" -#: engines/scumm/help.cpp:169 engines/scumm/help.cpp:230 +#: engines/scumm/help.cpp:166 engines/scumm/help.cpp:227 msgid "Look" msgstr "³ÛïÝãâØ" -#: engines/scumm/help.cpp:176 engines/scumm/help.cpp:225 +#: engines/scumm/help.cpp:173 engines/scumm/help.cpp:222 msgid "Talk" msgstr "³ÞÒÞàØâØ" -#: engines/scumm/help.cpp:177 +#: engines/scumm/help.cpp:174 msgid "Travel" msgstr "¿ÞÔÞàÞÖ" -#: engines/scumm/help.cpp:178 +#: engines/scumm/help.cpp:175 msgid "To Henry / To Indy" msgstr "à ³ÕÝàö / à ¦ÝÔö" -#: engines/scumm/help.cpp:181 +#: engines/scumm/help.cpp:178 msgid "play C minor on distaff" msgstr "ÓàÐâØ ÔÞ ÜöÝÞà ÝÐ ßàïÔæö" -#: engines/scumm/help.cpp:182 +#: engines/scumm/help.cpp:179 msgid "play D on distaff" msgstr "ÓàÐâØ àÕ ÝÐ ßàïÔæö" -#: engines/scumm/help.cpp:183 +#: engines/scumm/help.cpp:180 msgid "play E on distaff" msgstr "ÓàÐâØ Üö ÝÐ ßàïÔæö" -#: engines/scumm/help.cpp:184 +#: engines/scumm/help.cpp:181 msgid "play F on distaff" msgstr "ÓàÐâØ äÐ ÝÐ ßàïÔæö" -#: engines/scumm/help.cpp:185 +#: engines/scumm/help.cpp:182 msgid "play G on distaff" msgstr "ÓàÐâØ áÞÛì ÝÐ ßàïÔæö" -#: engines/scumm/help.cpp:186 +#: engines/scumm/help.cpp:183 msgid "play A on distaff" msgstr "ÓàÐâØ Ûï ÝÐ ßàïÔæö" -#: engines/scumm/help.cpp:187 +#: engines/scumm/help.cpp:184 msgid "play B on distaff" msgstr "ÓàÐâØ áö ÝÐ ßàïÔæö" -#: engines/scumm/help.cpp:188 +#: engines/scumm/help.cpp:185 msgid "play C major on distaff" msgstr "ÓàÐâØ ÔÞ ÜÐÖÞà ÝÐ ßàïÔæö" -#: engines/scumm/help.cpp:194 engines/scumm/help.cpp:216 +#: engines/scumm/help.cpp:191 engines/scumm/help.cpp:213 msgid "puSh" msgstr "¿ÞèâÞÒå" -#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:217 +#: engines/scumm/help.cpp:192 engines/scumm/help.cpp:214 msgid "pull (Yank)" msgstr "âïÓÝãâØ (ÁÜØÚÝãâØ)" -#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:214 -#: engines/scumm/help.cpp:249 +#: engines/scumm/help.cpp:195 engines/scumm/help.cpp:211 +#: engines/scumm/help.cpp:246 msgid "Talk to" msgstr "³ÞÒÞàØâØ ÔÞ" -#: engines/scumm/help.cpp:201 engines/scumm/help.cpp:213 +#: engines/scumm/help.cpp:198 engines/scumm/help.cpp:210 msgid "Look at" msgstr "³ÛïÝãâØ ÝÐ" -#: engines/scumm/help.cpp:202 +#: engines/scumm/help.cpp:199 msgid "turn oN" msgstr "ÃÒöÜÚÝãâØ" -#: engines/scumm/help.cpp:203 +#: engines/scumm/help.cpp:200 msgid "turn oFf" msgstr "²ØÜÚÝãâØ" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "KeyUp" msgstr "½ÐâØáÝãâØ" -#: engines/scumm/help.cpp:219 +#: engines/scumm/help.cpp:216 msgid "Highlight prev dialogue" msgstr "²ØÔö󯉯 ßÞßÕàÕÔÝöÙ ÔöÐÛÞÓ" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "KeyDown" msgstr "²öÔßãáâØâØ" -#: engines/scumm/help.cpp:220 +#: engines/scumm/help.cpp:217 msgid "Highlight next dialogue" msgstr "²ØÔö󯉯 ÝÐáâãßÝØÙ ÔöÐÛÞÓ" -#: engines/scumm/help.cpp:224 +#: engines/scumm/help.cpp:221 msgid "Walk" msgstr "¦âØ" -#: engines/scumm/help.cpp:227 engines/scumm/help.cpp:236 -#: engines/scumm/help.cpp:243 engines/scumm/help.cpp:250 +#: engines/scumm/help.cpp:224 engines/scumm/help.cpp:233 +#: engines/scumm/help.cpp:240 engines/scumm/help.cpp:247 msgid "Inventory" msgstr "¦ÝÒÕÝâÐà" -#: engines/scumm/help.cpp:228 +#: engines/scumm/help.cpp:225 msgid "Object" msgstr "¾Ñ'ôÚâ" -#: engines/scumm/help.cpp:231 +#: engines/scumm/help.cpp:228 msgid "Black and White / Color" msgstr "ÇÞàÝÞÑöÛØÙ/ºÞÛìÞàÞÒØÙ" -#: engines/scumm/help.cpp:234 +#: engines/scumm/help.cpp:231 msgid "Eyes" msgstr "¾çö" -#: engines/scumm/help.cpp:235 +#: engines/scumm/help.cpp:232 msgid "Tongue" msgstr "ÀÞ×ÜÞÒÛïâØ" -#: engines/scumm/help.cpp:237 +#: engines/scumm/help.cpp:234 msgid "Punch" msgstr "²ÔÐàØâØ ÚãÛÐÚÞÜ" -#: engines/scumm/help.cpp:238 +#: engines/scumm/help.cpp:235 msgid "Kick" msgstr "²ÔÐàØâØ ÝÞÓÞî" -#: engines/scumm/help.cpp:241 engines/scumm/help.cpp:248 +#: engines/scumm/help.cpp:238 engines/scumm/help.cpp:245 msgid "Examine" msgstr "ÀÞ×ÓÛïÝãâØ" -#: engines/scumm/help.cpp:242 +#: engines/scumm/help.cpp:239 msgid "Regular cursor" msgstr "·ÒØçÐÙÝØÙ ÚãàáÞà" -#: engines/scumm/help.cpp:244 +#: engines/scumm/help.cpp:241 msgid "Comm" msgstr "Comm" -#: engines/scumm/help.cpp:247 +#: engines/scumm/help.cpp:244 msgid "Save / Load / Options" msgstr "·ÑÕàÕÖÕÝÝï / ·ÐÒÐÝâÐÖÕÝÝï / ¾ßæö÷" -#: engines/scumm/help.cpp:256 +#: engines/scumm/help.cpp:253 msgid "Other game controls:" msgstr "¦Ýèö Þßæö÷ ÚÕàãÒÐÝÝï:" -#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:268 +#: engines/scumm/help.cpp:255 engines/scumm/help.cpp:265 msgid "Inventory:" msgstr "¦ÝÒÕÝâÐà:" -#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:275 +#: engines/scumm/help.cpp:256 engines/scumm/help.cpp:272 msgid "Scroll list up" msgstr "¿àÞÚàãçÕÝÝï áߨáÚã ÔÞÓÞàØ" -#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:276 +#: engines/scumm/help.cpp:257 engines/scumm/help.cpp:273 msgid "Scroll list down" msgstr "¿àÞÚàãçÕÝÝï áߨáÚã ÔÞÝØ×ã" -#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:269 +#: engines/scumm/help.cpp:258 engines/scumm/help.cpp:266 msgid "Upper left item" msgstr "²ÕàåÝï ×ÛöÒÐ àöç" -#: engines/scumm/help.cpp:262 engines/scumm/help.cpp:271 +#: engines/scumm/help.cpp:259 engines/scumm/help.cpp:268 msgid "Lower left item" msgstr "½ØÖÝï ×ÛöÒÐ àöç" -#: engines/scumm/help.cpp:263 engines/scumm/help.cpp:272 +#: engines/scumm/help.cpp:260 engines/scumm/help.cpp:269 msgid "Upper right item" msgstr "²ÕàåÝï áßàÐÒÐ àöç" -#: engines/scumm/help.cpp:264 engines/scumm/help.cpp:274 +#: engines/scumm/help.cpp:261 engines/scumm/help.cpp:271 msgid "Lower right item" msgstr "½ØÖÝï áßàÐÒÐ àöç" -#: engines/scumm/help.cpp:270 +#: engines/scumm/help.cpp:267 msgid "Middle left item" msgstr "ÁÕàÕÔÝï ×ÛöÒÐ àöç" -#: engines/scumm/help.cpp:273 +#: engines/scumm/help.cpp:270 msgid "Middle right item" msgstr "ÁÕàÕÔÝï áßàÐÒÐ àöç" -#: engines/scumm/help.cpp:280 engines/scumm/help.cpp:285 +#: engines/scumm/help.cpp:277 engines/scumm/help.cpp:282 msgid "Switching characters:" msgstr "¿ÕàÕÚÛîçÕÝÝï ÓÕàÞ÷Ò" -#: engines/scumm/help.cpp:282 +#: engines/scumm/help.cpp:279 msgid "Second kid" msgstr "´àãÓÐ ÔØâØÝÐ" -#: engines/scumm/help.cpp:283 +#: engines/scumm/help.cpp:280 msgid "Third kid" msgstr "ÂàÕâï ÔØâØÝÐ" -#: engines/scumm/help.cpp:295 +#: engines/scumm/help.cpp:292 msgid "Fighting controls (numpad):" msgstr "ºÕàãÒÐÝÝï ÑöÙÚÞî (numpad):" -#: engines/scumm/help.cpp:296 engines/scumm/help.cpp:297 -#: engines/scumm/help.cpp:298 +#: engines/scumm/help.cpp:293 engines/scumm/help.cpp:294 +#: engines/scumm/help.cpp:295 msgid "Step back" msgstr "ºàÞÚ ÝÐ×ÐÔ" -#: engines/scumm/help.cpp:299 +#: engines/scumm/help.cpp:296 msgid "Block high" msgstr "±ÛÞÚãÒÐâØ ÒØéÕ" -#: engines/scumm/help.cpp:300 +#: engines/scumm/help.cpp:297 msgid "Block middle" msgstr "±ÛÞÚãÒÐâØ ßÞáÕàÕÔØÝö" -#: engines/scumm/help.cpp:301 +#: engines/scumm/help.cpp:298 msgid "Block low" msgstr "±ÛÞÚãÒÐâØ ÝØÖçÕ" -#: engines/scumm/help.cpp:302 +#: engines/scumm/help.cpp:299 msgid "Punch high" msgstr "±ØâØ ÒØéÕ" -#: engines/scumm/help.cpp:303 +#: engines/scumm/help.cpp:300 msgid "Punch middle" msgstr "±ØâØ ßÞáÕàÕÔØÝö" -#: engines/scumm/help.cpp:304 +#: engines/scumm/help.cpp:301 msgid "Punch low" msgstr "±ØâØ ÝØÖçÕ" -#: engines/scumm/help.cpp:307 +#: engines/scumm/help.cpp:304 msgid "These are for Indy on left." msgstr "Ã ÒØßÐÔÚã ÔÛï ¦ÝÔö ×ÛöÒÐ." -#: engines/scumm/help.cpp:308 +#: engines/scumm/help.cpp:305 msgid "When Indy is on the right," msgstr "ºÞÛØ ¦ÝÔö ô áßàÐÒÐ," -#: engines/scumm/help.cpp:309 +#: engines/scumm/help.cpp:306 msgid "7, 4, and 1 are switched with" msgstr "7, 4, ö 1 ßÕàÕÜØÚÐîâìáï ÝÐ" -#: engines/scumm/help.cpp:310 +#: engines/scumm/help.cpp:307 msgid "9, 6, and 3, respectively." msgstr "9, 6 ö 3 ÒöÔßÞÒöÔÝÞ." -#: engines/scumm/help.cpp:317 +#: engines/scumm/help.cpp:314 msgid "Biplane controls (numpad):" msgstr "ºÕàãÒÐÝÝï ÑößÛÐÝÞÜ (numpad):" -#: engines/scumm/help.cpp:318 +#: engines/scumm/help.cpp:315 msgid "Fly to upper left" msgstr "»ÕâöâØ ÔÞÓÞàØ ÝÐÛöÒÞ" -#: engines/scumm/help.cpp:319 +#: engines/scumm/help.cpp:316 msgid "Fly to left" msgstr "»ÕâöâØ ÝÐÛöÒÞ" -#: engines/scumm/help.cpp:320 +#: engines/scumm/help.cpp:317 msgid "Fly to lower left" msgstr "»ÕâöâØ ÝØÖçÕ ÒÛöÒÞ" -#: engines/scumm/help.cpp:321 +#: engines/scumm/help.cpp:318 msgid "Fly upwards" msgstr "»ÕâöâØ ÔÞÓÞàØ" -#: engines/scumm/help.cpp:322 +#: engines/scumm/help.cpp:319 msgid "Fly straight" msgstr "»ÕâöâØ ßàïÜÞ" -#: engines/scumm/help.cpp:323 +#: engines/scumm/help.cpp:320 msgid "Fly down" msgstr "»ÕâöâØ ÔÞÝØ×ã" -#: engines/scumm/help.cpp:324 +#: engines/scumm/help.cpp:321 msgid "Fly to upper right" msgstr "»ÕâöâØ ÔÞÓÞàØ ÝÐßàÐÒÞ" -#: engines/scumm/help.cpp:325 +#: engines/scumm/help.cpp:322 msgid "Fly to right" msgstr "»ÕâöâØ ÝÐßàÐÒÞ" -#: engines/scumm/help.cpp:326 +#: engines/scumm/help.cpp:323 msgid "Fly to lower right" msgstr "»ÕâöâØ ÔÞÝØ×ã ÝÐßàÐÒÞ" -#: engines/scumm/scumm.cpp:2255 engines/agos/saveload.cpp:192 +#: engines/scumm/scumm.cpp:1770 +#, c-format +msgid "" +"Native MIDI support requires the Roland Upgrade from LucasArts,\n" +"but %s is missing. Using AdLib instead." +msgstr "" + +#: engines/scumm/scumm.cpp:2256 engines/agos/saveload.cpp:190 #, c-format msgid "" "Failed to save game state to file:\n" @@ -1686,7 +1789,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2262 engines/agos/saveload.cpp:157 +#: engines/scumm/scumm.cpp:2263 engines/agos/saveload.cpp:155 #, c-format msgid "" "Failed to load game state from file:\n" @@ -1697,7 +1800,7 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2274 engines/agos/saveload.cpp:200 +#: engines/scumm/scumm.cpp:2275 engines/agos/saveload.cpp:198 #, c-format msgid "" "Successfully saved game state in file:\n" @@ -1708,276 +1811,505 @@ msgstr "" "\n" "%s" -#: engines/scumm/scumm.cpp:2497 +#: engines/scumm/scumm.cpp:2490 msgid "" "Usually, Maniac Mansion would start now. But ScummVM doesn't do that yet. To " "play it, go to 'Add Game' in the ScummVM start menu and select the 'Maniac' " "directory inside the Tentacle game directory." msgstr "" -"·Ð×ÒØçÐÙ, ×ÐàÐ× ÑØ ×ÐßãáâØÒáï Maniac Mansion. ¿àÞâÕ ScummVM éÕ æìÞÓÞ ÝÕ ÒÜöô. " -"ÉÞÑ ÓàÐâØ ã ÝìÞÓÞ, ÞÑÕàöâì '´ÞÔÐâØ Óàã' ã ßÞçÐâÚÞÒÞÜã ÜÕÝî ScummVM, ö ÒØÑÕàöâì " -"ßÐßÚã Maniac ÒáÕàÕÔÕÝö ßÒßÚØ × ÓàÞî Tentacle." +"·Ð×ÒØçÐÙ, ×ÐàÐ× ÑØ ×ÐßãáâØÒáï Maniac Mansion. ¿àÞâÕ ScummVM éÕ æìÞÓÞ ÝÕ " +"ÒÜöô. ÉÞÑ ÓàÐâØ ã ÝìÞÓÞ, ÞÑÕàöâì '´ÞÔÐâØ Óàã' ã ßÞçÐâÚÞÒÞÜã ÜÕÝî ScummVM, ö " +"ÒØÑÕàöâì ßÐßÚã Maniac ÒáÕàÕÔÕÝö ßÒßÚØ × ÓàÞî Tentacle." -#: engines/mohawk/dialogs.cpp:89 engines/mohawk/dialogs.cpp:127 +#: engines/mohawk/dialogs.cpp:90 engines/mohawk/dialogs.cpp:149 msgid "~Z~ip Mode Activated" msgstr "ÀÕÖØÜ èÒØÔÚÞÓÞ ßÕàÕåÞÔã ÐÚâØÒÞÒÐÝÞ" -#: engines/mohawk/dialogs.cpp:90 +#: engines/mohawk/dialogs.cpp:91 msgid "~T~ransitions Enabled" msgstr "¿ÕàÕåÞÔØ ÐÚâØÒÞÒÐÝÞ" -#: engines/mohawk/dialogs.cpp:128 +#: engines/mohawk/dialogs.cpp:92 +msgid "~D~rop Page" +msgstr "" + +#: engines/mohawk/dialogs.cpp:96 +msgid "~S~how Map" +msgstr "" + +#: engines/mohawk/dialogs.cpp:150 msgid "~W~ater Effect Enabled" msgstr "µäÕÚâØ ÒÞÔØ ÒÚÛîçÕÝÞ" -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore game:" msgstr "²öÔÝÞ񯉯 Óàã: " -#: engines/sci/engine/kfile.cpp:680 +#: engines/sci/engine/kfile.cpp:678 msgid "Restore" msgstr "²öÔÝÞÒØâØ" -#: audio/fmopl.cpp:51 +#: engines/agos/animation.cpp:544 +#, c-format +msgid "Cutscene file '%s' not found!" +msgstr "" + +#: engines/gob/inter_playtoons.cpp:256 engines/gob/inter_v2.cpp:1283 +#: engines/tinsel/saveload.cpp:468 +#, fuzzy +msgid "Failed to load game state from file." +msgstr "" +"½Õ ÒÔÐÛÞáï ×ÐÒÐÝâÐÖØâØ áâÐÝ ÓàØ × äÐÙÛã:\n" +"\n" +"%s" + +#: engines/gob/inter_v2.cpp:1353 engines/tinsel/saveload.cpp:546 +#, fuzzy +msgid "Failed to save game state to file." +msgstr "" +"½Õ ÒÔÐÛÞáï ×ÑÕàÕÓâØ áâÐÝ ÓàØ ã äÐÙÛ:\n" +"\n" +"%s" + +#: engines/gob/inter_v5.cpp:107 +#, fuzzy +msgid "Failed to delete file." +msgstr "" +"½Õ ÒÔÐÛÞáï ×ÑÕàÕÓâØ áâÐÝ ÓàØ ã äÐÙÛ:\n" +"\n" +"%s" + +#: engines/groovie/script.cpp:417 +#, fuzzy +msgid "Failed to save game" +msgstr "" +"½Õ ÒÔÐÛÞáï ×ÑÕàÕÓâØ áâÐÝ ÓàØ ã äÐÙÛ:\n" +"\n" +"%s" + +#: engines/kyra/sound_midi.cpp:475 +msgid "" +"You appear to be using a General MIDI device,\n" +"but your game only supports Roland MT32 MIDI.\n" +"We try to map the Roland MT32 instruments to\n" +"General MIDI ones. After all it might happen\n" +"that a few tracks will not be correctly played." +msgstr "" + +#: engines/m4/m4_menus.cpp:138 +#, fuzzy +msgid "Save game failed!" +msgstr "·ÑÕàÕÓâØ Óàã: " + +#: engines/sky/compact.cpp:130 +msgid "" +"Unable to find \"sky.cpt\" file!\n" +"Please download it from www.scummvm.org" +msgstr "" + +#: engines/sky/compact.cpp:141 +msgid "" +"The \"sky.cpt\" file has an incorrect size.\n" +"Please (re)download it from www.scummvm.org" +msgstr "" + +#: engines/sword1/animation.cpp:344 engines/sword2/animation.cpp:379 +msgid "DXA cutscenes found but ScummVM has been built without zlib support" +msgstr "" + +#: engines/sword1/animation.cpp:354 engines/sword2/animation.cpp:389 +msgid "MPEG2 cutscenes are no longer supported" +msgstr "" + +#: engines/sword1/animation.cpp:359 engines/sword2/animation.cpp:397 +#, c-format +msgid "Cutscene '%s' not found" +msgstr "" + +#: engines/sword1/control.cpp:863 +msgid "" +"ScummVM found that you have old savefiles for Broken Sword 1 that should be " +"converted.\n" +"The old save game format is no longer supported, so you will not be able to " +"load your games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked again the next " +"time you start the game.\n" +msgstr "" + +#: engines/sword1/control.cpp:1232 +#, c-format +msgid "" +"Target new save game already exists!\n" +"Would you like to keep the old save game (%s) or the new one (%s)?\n" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the old one" +msgstr "" + +#: engines/sword1/control.cpp:1235 +msgid "Keep the new one" +msgstr "" + +#: engines/sword1/logic.cpp:1633 +msgid "This is the end of the Broken Sword 1 Demo" +msgstr "" + +#: engines/parallaction/saveload.cpp:133 +#, c-format +msgid "" +"Can't save game in slot %i\n" +"\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:211 +#, fuzzy +msgid "Loading game..." +msgstr "·ÐÒÐÝâÐÖØâØ Óàã:" + +#: engines/parallaction/saveload.cpp:226 +#, fuzzy +msgid "Saving game..." +msgstr "·ÑÕàÕÓâØ Óàã: " + +#: engines/parallaction/saveload.cpp:279 +msgid "" +"ScummVM found that you have old savefiles for Nippon Safes that should be " +"renamed.\n" +"The old names are no longer supported, so you will not be able to load your " +"games if you don't convert them.\n" +"\n" +"Press OK to convert them now, otherwise you will be asked next time.\n" +msgstr "" + +#: engines/parallaction/saveload.cpp:326 +msgid "ScummVM successfully converted all your savefiles." +msgstr "" + +#: engines/parallaction/saveload.cpp:328 +msgid "" +"ScummVM printed some warnings in your console window and can't guarantee all " +"your files have been converted.\n" +"\n" +"Please report to the team." +msgstr "" + +#: audio/fmopl.cpp:49 msgid "MAME OPL emulator" msgstr "µÜãÛïâÞà MAME OPL:" -#: audio/fmopl.cpp:53 +#: audio/fmopl.cpp:51 msgid "DOSBox OPL emulator" msgstr "µÜãÛïâÞà DOSBox OPL" -#: audio/null.h:46 +#: audio/mididrv.cpp:204 +#, c-format +msgid "" +"The selected audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:216 +#, c-format +msgid "" +"The selected audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:250 +#, c-format +msgid "" +"The preferred audio device '%s' was not found (e.g. might be turned off or " +"disconnected). Attempting to fall back to the next available device..." +msgstr "" + +#: audio/mididrv.cpp:265 +#, c-format +msgid "" +"The preferred audio device '%s' cannot be used. See log file for more " +"information. Attempting to fall back to the next available device..." +msgstr "" + +#: audio/null.h:43 msgid "No music" msgstr "±Õ× Üã×ØÚØ" -#: audio/mods/paula.cpp:192 +#: audio/mods/paula.cpp:189 msgid "Amiga Audio Emulator" msgstr "°ÜöÓÐ °ãÔöÞ µÜãÛïâÞà" -#: audio/softsynth/adlib.cpp:1590 +#: audio/softsynth/adlib.cpp:1594 msgid "AdLib Emulator" msgstr "µÜãÛïâÞà AdLib" -#: audio/softsynth/appleiigs.cpp:36 +#: audio/softsynth/appleiigs.cpp:33 msgid "Apple II GS Emulator (NOT IMPLEMENTED)" msgstr "Apple II GS µÜãÛïâÞà (½µ Àµ°»¦·¾²°½¾)" -#: audio/softsynth/sid.cpp:1434 +#: audio/softsynth/sid.cpp:1430 msgid "C64 Audio Emulator" msgstr "C64 °ãÔöÞ µÜãÛïâÞà" -#: audio/softsynth/mt32.cpp:326 -msgid "Initialising MT-32 Emulator" +#: audio/softsynth/mt32.cpp:329 +#, fuzzy +msgid "Initializing MT-32 Emulator" msgstr "½ÐáâàÞîî ÕÜãÛïâÞà MT-32" -#: audio/softsynth/mt32.cpp:540 +#: audio/softsynth/mt32.cpp:543 msgid "MT-32 Emulator" msgstr "µÜãÛïâÞà MT-32" -#: audio/softsynth/pcspk.cpp:142 +#: audio/softsynth/pcspk.cpp:139 msgid "PC Speaker Emulator" msgstr "µÜãÛïâÞà PC áßöÚÕàÐ" -#: audio/softsynth/pcspk.cpp:161 +#: audio/softsynth/pcspk.cpp:158 msgid "IBM PCjr Emulator" msgstr "µÜãÛïâÞà IBM PCjr" -#: audio/softsynth/ym2612.cpp:762 -msgid "FM Towns Emulator" -msgstr "µÜãÛïâÞà FM Towns" - -#: backends/keymapper/remap-dialog.cpp:49 +#: backends/keymapper/remap-dialog.cpp:47 msgid "Keymap:" msgstr "ÂÐÑÛØæï ÚÛÐÒöè:" -#: backends/keymapper/remap-dialog.cpp:66 +#: backends/keymapper/remap-dialog.cpp:64 msgid " (Active)" msgstr " (°ÚâØÒÝÐ)" -#: backends/keymapper/remap-dialog.cpp:100 +#: backends/keymapper/remap-dialog.cpp:98 msgid " (Global)" msgstr " (³ÛÞÑÐÛìÝÐ)" -#: backends/keymapper/remap-dialog.cpp:110 +#: backends/keymapper/remap-dialog.cpp:108 msgid " (Game)" msgstr " (¦ÓàØ)" -#: backends/midi/windows.cpp:165 +#: backends/midi/windows.cpp:164 msgid "Windows MIDI" msgstr "Windows MIDI" -#: backends/platform/ds/arm9/source/dsoptions.cpp:60 +#: backends/platform/ds/arm9/source/dsoptions.cpp:57 msgid "ScummVM Main Menu" msgstr "³ÞÛÞÒÝÕ ÜÕÝî ScummVM" -#: backends/platform/ds/arm9/source/dsoptions.cpp:66 +#: backends/platform/ds/arm9/source/dsoptions.cpp:63 msgid "~L~eft handed mode" msgstr "»öÒÞàãÚØÙ àÕÖØÜ" -#: backends/platform/ds/arm9/source/dsoptions.cpp:67 +#: backends/platform/ds/arm9/source/dsoptions.cpp:64 msgid "~I~ndy fight controls" msgstr "ºÕàãÒÐÝÝï ÑÞïÜØ Ò Indy" -#: backends/platform/ds/arm9/source/dsoptions.cpp:68 +#: backends/platform/ds/arm9/source/dsoptions.cpp:65 msgid "Show mouse cursor" msgstr "¿ÞÚÐ×ãÒÐâØ ÚãàáÞà ÜØèö" -#: backends/platform/ds/arm9/source/dsoptions.cpp:69 +#: backends/platform/ds/arm9/source/dsoptions.cpp:66 msgid "Snap to edges" msgstr "¿àØÚàößØâØ ÔÞ ÚàÐ÷Ò" -#: backends/platform/ds/arm9/source/dsoptions.cpp:71 +#: backends/platform/ds/arm9/source/dsoptions.cpp:68 msgid "Touch X Offset" msgstr "·ÜöéÕÝÝï ÔÞâØÚöÒ ßÞ Þáö X" -#: backends/platform/ds/arm9/source/dsoptions.cpp:78 +#: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" msgstr "·ÜöéÕÝÝï ÔÞâØÚöÒ ßÞ Þáö Y" -#: backends/platform/ds/arm9/source/dsoptions.cpp:90 +#: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" msgstr "²ØÚÞàØáâÞÒãÒÐâØ ãßàÐÒÛöÝÝï ÚãàáÞàÞÜ ïÚ ÝÐ âàÕÚßÐÔö ÛÐßâÞßöÒ" -#: backends/platform/ds/arm9/source/dsoptions.cpp:91 +#: backends/platform/ds/arm9/source/dsoptions.cpp:88 msgid "Tap for left click, double tap right click" msgstr "ÂÐß ÔÛï ÛöÒÞÓÞ ÚÛÐæÐÝÝï, ßÞÔÒöÙÝØÙ âÐß ÔÛï ßàÐÒÞÓÞ ÚÛÐæÐÝÝï" -#: backends/platform/ds/arm9/source/dsoptions.cpp:93 +#: backends/platform/ds/arm9/source/dsoptions.cpp:90 msgid "Sensitivity" msgstr "ÇãâÛØÒöáâì" -#: backends/platform/ds/arm9/source/dsoptions.cpp:102 +#: backends/platform/ds/arm9/source/dsoptions.cpp:99 msgid "Initial top screen scale:" msgstr "¿ÞçÐâÚÞÒØÙ ÜÐáèâÐÑ ÒÕàåÝìÞÓÞ ÕÚàÐÝã:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:108 +#: backends/platform/ds/arm9/source/dsoptions.cpp:105 msgid "Main screen scaling:" msgstr "¼ÐáèâÐÑ ÓÞÛÞÒÝÞÓÞ ÕÚàÐÝã:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:110 +#: backends/platform/ds/arm9/source/dsoptions.cpp:107 msgid "Hardware scale (fast, but low quality)" msgstr "ÅÐàÔÒÐàÝÕ ÜÐáèâÐÑãÒÐÝÝï (èÒØÔÚÞ, ÐÛÕ ÝØ×ìÚÞ÷ ïÚÞáâö)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:111 +#: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" msgstr "¿àÞÓàÐÜÝÕ ÜÐáèâÐÑãÒÐÝÝï (åÞàÞèÐ ïÚöáâì, ÐÛÕ ßÞÒöÛìÝöèÕ)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:112 +#: backends/platform/ds/arm9/source/dsoptions.cpp:109 msgid "Unscaled (you must scroll left and right)" msgstr "±Õ× ÜÐáèâÐÑãÒÐÝÝï (âàÕÑÐ ÑãÔÕ ßàÞÚàãçãÒÐâØ ÝÐÛöÒÞ ö ÝÐßàÐÒÞ)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:114 +#: backends/platform/ds/arm9/source/dsoptions.cpp:111 msgid "Brightness:" msgstr "ÏáÚàÐÒöáâì:" -#: backends/platform/ds/arm9/source/dsoptions.cpp:124 +#: backends/platform/ds/arm9/source/dsoptions.cpp:121 msgid "High quality audio (slower) (reboot)" msgstr "²ØáÞÚÐ ïÚöáâì ×ÒãÚã (ßÞÒöÛìÝöèÕ) (àÕÑãâ)" -#: backends/platform/ds/arm9/source/dsoptions.cpp:125 +#: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" msgstr "·ÐÑÞàÞÝØâØ ÒØÜÚÝÕÝÝï" -#: backends/platform/iphone/osys_events.cpp:360 +#: backends/platform/iphone/osys_events.cpp:338 +#, fuzzy +msgid "Mouse-click-and-drag mode enabled." +msgstr "ÀÕÖØÜ âÐçßÐÔã ãÒöÜÚÝÕÝÞ." + +#: backends/platform/iphone/osys_events.cpp:340 +#, fuzzy +msgid "Mouse-click-and-drag mode disabled." +msgstr "ÀÕÖØÜ âÐçßÐÔã ÒØÜÚÝÕÝÞ." + +#: backends/platform/iphone/osys_events.cpp:351 msgid "Touchpad mode enabled." msgstr "ÀÕÖØÜ âÐçßÐÔã ãÒöÜÚÝÕÝÞ." -#: backends/platform/iphone/osys_events.cpp:362 +#: backends/platform/iphone/osys_events.cpp:353 msgid "Touchpad mode disabled." msgstr "ÀÕÖØÜ âÐçßÐÔã ÒØÜÚÝÕÝÞ." -#: backends/graphics/sdl/sdl-graphics.cpp:47 +#: backends/graphics/sdl/sdl-graphics.cpp:45 msgid "Normal (no scaling)" msgstr "±Õ× ×ÑöÛìèÕÝÝï" -#: backends/graphics/sdl/sdl-graphics.cpp:66 +#: backends/graphics/sdl/sdl-graphics.cpp:64 msgctxt "lowres" msgid "Normal (no scaling)" msgstr "±Õ× ×ÑöÛìèÕÝÝï" -#: backends/graphics/opengl/opengl-graphics.cpp:133 +#: backends/graphics/sdl/sdl-graphics.cpp:2137 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:517 +#, fuzzy +msgid "Enabled aspect ratio correction" +msgstr "ºÞàÕÚæöï áßöÒÒöÔÝÞèÕÝÝï áâÞàöÝ" + +#: backends/graphics/sdl/sdl-graphics.cpp:2143 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:522 +#, fuzzy +msgid "Disabled aspect ratio correction" +msgstr "ºÞàÕÚæöï áßöÒÒöÔÝÞèÕÝÝï áâÞàöÝ" + +#: backends/graphics/sdl/sdl-graphics.cpp:2198 +#, fuzzy +msgid "Active graphics filter:" +msgstr "¿ÕàÕÚÛîçÕÝÝï ÜöÖ ÓàÐäöçÝØÜØ äöÛìâàÐÜØ" + +#: backends/graphics/sdl/sdl-graphics.cpp:2254 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:461 +#, fuzzy +msgid "Windowed mode" +msgstr "ÀÕÖØÜ àÐáâàãÒ.:" + +#: backends/graphics/opengl/opengl-graphics.cpp:139 msgid "OpenGL Normal" msgstr "OpenGL ÝÞàÜÐÛìÝØÙ" -#: backends/graphics/opengl/opengl-graphics.cpp:134 +#: backends/graphics/opengl/opengl-graphics.cpp:140 msgid "OpenGL Conserve" -msgstr "OpenGL ×ÑÕàÕÖÕÝØÙ +msgstr "OpenGL ×ÑÕàÕÖÕÝØÙ" -#: backends/graphics/opengl/opengl-graphics.cpp:135 +#: backends/graphics/opengl/opengl-graphics.cpp:141 msgid "OpenGL Original" msgstr "OpenGL ÞàØÓöÝÐÛìÝØÙ" -#: backends/platform/symbian/src/SymbianActions.cpp:41 -#: backends/platform/wince/CEActionsSmartphone.cpp:42 +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:399 +#, fuzzy +msgid "Current display mode" +msgstr "¿ÞâÞçÝØÙ ÒöÔÕÞàÕÖØÜ:" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:412 +msgid "Current scale" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:542 +msgid "Active filter mode: Linear" +msgstr "" + +#: backends/graphics/openglsdl/openglsdl-graphics.cpp:544 +msgid "Active filter mode: Nearest" +msgstr "" + +#: backends/platform/symbian/src/SymbianActions.cpp:38 +#: backends/platform/wince/CEActionsSmartphone.cpp:39 msgid "Up" msgstr "´ÞÓÞàØ" -#: backends/platform/symbian/src/SymbianActions.cpp:42 -#: backends/platform/wince/CEActionsSmartphone.cpp:43 +#: backends/platform/symbian/src/SymbianActions.cpp:39 +#: backends/platform/wince/CEActionsSmartphone.cpp:40 msgid "Down" msgstr "´ÞÝØ×ã" -#: backends/platform/symbian/src/SymbianActions.cpp:43 -#: backends/platform/wince/CEActionsSmartphone.cpp:44 +#: backends/platform/symbian/src/SymbianActions.cpp:40 +#: backends/platform/wince/CEActionsSmartphone.cpp:41 msgid "Left" msgstr "½ÐÛöÒÞ" -#: backends/platform/symbian/src/SymbianActions.cpp:44 -#: backends/platform/wince/CEActionsSmartphone.cpp:45 +#: backends/platform/symbian/src/SymbianActions.cpp:41 +#: backends/platform/wince/CEActionsSmartphone.cpp:42 msgid "Right" msgstr "½ÐßàÐÒÞ" -#: backends/platform/symbian/src/SymbianActions.cpp:45 -#: backends/platform/wince/CEActionsPocket.cpp:63 -#: backends/platform/wince/CEActionsSmartphone.cpp:46 +#: backends/platform/symbian/src/SymbianActions.cpp:42 +#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsSmartphone.cpp:43 msgid "Left Click" msgstr "»öÒØÙ ÚÛöÚ" -#: backends/platform/symbian/src/SymbianActions.cpp:46 -#: backends/platform/wince/CEActionsSmartphone.cpp:47 +#: backends/platform/symbian/src/SymbianActions.cpp:43 +#: backends/platform/wince/CEActionsSmartphone.cpp:44 msgid "Right Click" msgstr "¿àÐÒØÙ ÚÛöÚ" -#: backends/platform/symbian/src/SymbianActions.cpp:49 -#: backends/platform/wince/CEActionsSmartphone.cpp:50 +#: backends/platform/symbian/src/SymbianActions.cpp:46 +#: backends/platform/wince/CEActionsSmartphone.cpp:47 msgid "Zone" msgstr "·ÞÝÐ" -#: backends/platform/symbian/src/SymbianActions.cpp:50 -#: backends/platform/wince/CEActionsPocket.cpp:57 -#: backends/platform/wince/CEActionsSmartphone.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:47 +#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:48 msgid "Multi Function" msgstr "¼ãÛìâØäãÝÚæöï" -#: backends/platform/symbian/src/SymbianActions.cpp:51 +#: backends/platform/symbian/src/SymbianActions.cpp:48 msgid "Swap character" msgstr "·ÜöÝØâØ ÓÕàÞï" -#: backends/platform/symbian/src/SymbianActions.cpp:52 +#: backends/platform/symbian/src/SymbianActions.cpp:49 msgid "Skip text" msgstr "¿àÞßãáâØâØ âÕÚáâ" -#: backends/platform/symbian/src/SymbianActions.cpp:54 +#: backends/platform/symbian/src/SymbianActions.cpp:51 msgid "Fast mode" msgstr "ÈÒØÔÚØÙ àÕÖØÜ" -#: backends/platform/symbian/src/SymbianActions.cpp:56 +#: backends/platform/symbian/src/SymbianActions.cpp:53 msgid "Debugger" msgstr "²öÔÛÐÔçØÚ" -#: backends/platform/symbian/src/SymbianActions.cpp:57 +#: backends/platform/symbian/src/SymbianActions.cpp:54 msgid "Global menu" msgstr "³ÛÞÑÐÛìÝÕ ÜÕÝî" -#: backends/platform/symbian/src/SymbianActions.cpp:58 +#: backends/platform/symbian/src/SymbianActions.cpp:55 msgid "Virtual keyboard" msgstr "²öàâãÐÛìÝÐ ÚÛÐÒöÐâãàÐ" -#: backends/platform/symbian/src/SymbianActions.cpp:59 +#: backends/platform/symbian/src/SymbianActions.cpp:56 msgid "Key mapper" msgstr "¿àØ×ÝÐçÕÝÝï ÚÛÐÒöè" -#: backends/events/symbiansdl/symbiansdl-events.cpp:187 +#: backends/events/symbiansdl/symbiansdl-events.cpp:184 msgid "Do you want to quit ?" msgstr "²Ø åÞçÕâÕ ÒØÙâØ?" @@ -2098,133 +2430,195 @@ msgid "Network down" msgstr "¼ÕàÕÖã ÒØÜÚÝÕÝÞ" #: backends/platform/wii/options.cpp:178 -msgid "Initialising network" +#, fuzzy +msgid "Initializing network" msgstr "½ÐÛÐèâÞÒãî ÜÕàÕÖã" #: backends/platform/wii/options.cpp:182 -msgid "Timeout while initialising network" +#, fuzzy +msgid "Timeout while initializing network" msgstr "ÇÐá ßöÔÚÛîçÕÝÝï ÔÞ ÜÕàÕÖö ÒØÙèÞÒ" #: backends/platform/wii/options.cpp:186 -#, c-format -msgid "Network not initialised (%d)" +#, fuzzy, c-format +msgid "Network not initialized (%d)" msgstr "¼ÕàÕÖã ÝÕ ÝÐÛÐÓÞÔÖÕÝÞ (%d)" -#: backends/platform/wince/CEActionsPocket.cpp:49 +#: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" msgstr "·ÐåÞÒÐâØ ßÐÝÕÛì öÝáâàãÜÕÝâöÒ" -#: backends/platform/wince/CEActionsPocket.cpp:50 +#: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" msgstr "¿ÞÚÐ×ÐâØ ÚÛÐÒöÐâãàã" -#: backends/platform/wince/CEActionsPocket.cpp:51 +#: backends/platform/wince/CEActionsPocket.cpp:48 msgid "Sound on/off" msgstr "·ÒãÚ ãÒöÜ/ÒØÜÚ" -#: backends/platform/wince/CEActionsPocket.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:49 msgid "Right click" msgstr "¿àÐÒØÙ ÚÛöÚ" -#: backends/platform/wince/CEActionsPocket.cpp:53 +#: backends/platform/wince/CEActionsPocket.cpp:50 msgid "Show/Hide Cursor" msgstr "¿ÞÚÐ×ÐâØ/áåÞÒÐâØ ÚãàáÞà" -#: backends/platform/wince/CEActionsPocket.cpp:54 +#: backends/platform/wince/CEActionsPocket.cpp:51 msgid "Free look" msgstr "²öÛìÝØÙ ÞÓÛïÔ" -#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsPocket.cpp:52 msgid "Zoom up" msgstr "·ÑöÛ. ÜÐèâÐÑ" -#: backends/platform/wince/CEActionsPocket.cpp:56 +#: backends/platform/wince/CEActionsPocket.cpp:53 msgid "Zoom down" msgstr "·ÜÝè. ÜÐèâÐÑ" -#: backends/platform/wince/CEActionsPocket.cpp:58 -#: backends/platform/wince/CEActionsSmartphone.cpp:52 +#: backends/platform/wince/CEActionsPocket.cpp:55 +#: backends/platform/wince/CEActionsSmartphone.cpp:49 msgid "Bind Keys" msgstr "¿àØ×ÝÐçØâØ ÚÛÐÒöèö" -#: backends/platform/wince/CEActionsPocket.cpp:59 +#: backends/platform/wince/CEActionsPocket.cpp:56 msgid "Cursor Up" msgstr "ºãàáÞà ÔÞÓÞàØ" -#: backends/platform/wince/CEActionsPocket.cpp:60 +#: backends/platform/wince/CEActionsPocket.cpp:57 msgid "Cursor Down" msgstr "ºãàáÞà ÔÞÝØ×ã" -#: backends/platform/wince/CEActionsPocket.cpp:61 +#: backends/platform/wince/CEActionsPocket.cpp:58 msgid "Cursor Left" msgstr "ºãàáÞà ÝÐÛöÒÞ" -#: backends/platform/wince/CEActionsPocket.cpp:62 +#: backends/platform/wince/CEActionsPocket.cpp:59 msgid "Cursor Right" msgstr "ºãàáÞà ÝÐßàÐÒÞ" -#: backends/platform/wince/CEActionsPocket.cpp:268 -#: backends/platform/wince/CEActionsSmartphone.cpp:231 +#: backends/platform/wince/CEActionsPocket.cpp:264 +#: backends/platform/wince/CEActionsSmartphone.cpp:228 msgid "Do you want to load or save the game?" msgstr "²Ø åÞçÕâÕ ×ÐÒÐÝâÐÖØâØ ÐÑÞ ×ÑÕàÕÓâØ Óàã?" -#: backends/platform/wince/CEActionsPocket.cpp:330 -#: backends/platform/wince/CEActionsSmartphone.cpp:287 +#: backends/platform/wince/CEActionsPocket.cpp:314 +#: backends/platform/wince/CEActionsSmartphone.cpp:275 msgid " Are you sure you want to quit ? " msgstr " ²Ø ãßÕÒÝÕÝö, éÞ åÞçÕâÕ ÒØÙâØ? " -#: backends/platform/wince/CEActionsSmartphone.cpp:53 +#: backends/platform/wince/CEActionsSmartphone.cpp:50 msgid "Keyboard" msgstr "ºÛÐÒöÐâãàÐ" -#: backends/platform/wince/CEActionsSmartphone.cpp:54 +#: backends/platform/wince/CEActionsSmartphone.cpp:51 msgid "Rotate" msgstr "¿ÞÒÕàÝãâØ" -#: backends/platform/wince/CELauncherDialog.cpp:60 +#: backends/platform/wince/CELauncherDialog.cpp:54 msgid "Using SDL driver " msgstr "²ØÚÞàØáâÞÒãî ÔàÐÙÒÕà SDL " -#: backends/platform/wince/CELauncherDialog.cpp:64 +#: backends/platform/wince/CELauncherDialog.cpp:58 msgid "Display " msgstr "¿ÞÚÐ×ÐâØ " -#: backends/platform/wince/CELauncherDialog.cpp:106 +#: backends/platform/wince/CELauncherDialog.cpp:77 msgid "Do you want to perform an automatic scan ?" msgstr "²Ø åÞçÕâÕ ×ÔöÙáÝØâØ ÐÒâÞÜÐâØçÝØÙ ßÞèãÚ?" -#: backends/platform/wince/wince-sdl.cpp:486 +#: backends/platform/wince/wince-sdl.cpp:487 msgid "Map right click action" msgstr "¿ÕàÕßàØ×ÝÐçÕÝÝï ßàÐÒÞÓÞ ÚÛöÚã" -#: backends/platform/wince/wince-sdl.cpp:490 +#: backends/platform/wince/wince-sdl.cpp:491 msgid "You must map a key to the 'Right Click' action to play this game" msgstr "²Ø ßÞÒØÝÝö ßàØ×ÝÐçØâØ ÚÝÞßÚã ÔÞ Ôö÷ '¿àÐÒØÙ ÚÛöÚ', éÞÑ ÓàÐâØ ã æî Óàã" -#: backends/platform/wince/wince-sdl.cpp:499 +#: backends/platform/wince/wince-sdl.cpp:500 msgid "Map hide toolbar action" msgstr "¿ÕàÕßàØ×ÝÐçØâØ Ôöî 'ÁåÞÒÐâØ ¿ÐÝÕÛì öÝáâà.'" -#: backends/platform/wince/wince-sdl.cpp:503 +#: backends/platform/wince/wince-sdl.cpp:504 msgid "You must map a key to the 'Hide toolbar' action to play this game" msgstr "" "²Ø ßÞÒØÝÝö ßÕàÕßàØ×ÝÐçØâØ ÚÝÞßÚã ÔÛï Ôö÷ 'ÁåÞÒÐâØ ¿ÐÝÕÛì öÝáâà.', éÞÑ ÓàÐâØ " "Ò æî Óàã" -#: backends/platform/wince/wince-sdl.cpp:512 +#: backends/platform/wince/wince-sdl.cpp:513 msgid "Map Zoom Up action (optional)" msgstr "¿ÕàÕßàØ×ÝÐçØâØ Ôöî ·ÑöÛìèÕÝÝï (ÝÕÞÑÞÒï×ÚÞÒÞ)" -#: backends/platform/wince/wince-sdl.cpp:515 +#: backends/platform/wince/wince-sdl.cpp:516 msgid "Map Zoom Down action (optional)" msgstr "¿ÕàÕßàØ×ÝÐçØâØ Ôöî ·ÜÕÝèÕÝÝï (ÝÕÞÑÞÒï×ÚÞÒÞ)" -#: backends/platform/wince/wince-sdl.cpp:523 +#: backends/platform/wince/wince-sdl.cpp:524 msgid "" "Don't forget to map a key to 'Hide Toolbar' action to see the whole inventory" msgstr "" "½Õ ×ÐÑãÔìâÕ ßÕàÕßàØ×ÝÐçØâØ ÚÝÞßÚã ÔÛï Ôö÷ 'ÁåÞÒÐâØ ¿ÐÝÕÛì öÝáâà.' éÞÑ " "ßÞÑÐçØâØ ÒÕáì öÝÒÕÝâÐà" +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Do you really want to return to the Launcher?" +msgstr "²Ø ÔöÙáÝÞ åÞçÕâÕ ÒØÔÐ󯉯 æÕ ×ÑÕàÕÖÕÝÝï?" + +#: backends/events/default/default-events.cpp:222 +#, fuzzy +msgid "Launcher" +msgstr "²ÔÐàØâØ ÚãÛÐÚÞÜ" + +#: backends/events/default/default-events.cpp:244 +#, fuzzy +msgid "Do you really want to quit?" +msgstr "²Ø åÞçÕâÕ ÒØÙâØ?" + +#: backends/events/gph/gph-events.cpp:366 +#: backends/events/gph/gph-events.cpp:409 +#: backends/events/openpandora/op-events.cpp:141 +msgid "Touchscreen 'Tap Mode' - Left Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:368 +#: backends/events/gph/gph-events.cpp:411 +#: backends/events/openpandora/op-events.cpp:143 +msgid "Touchscreen 'Tap Mode' - Right Click" +msgstr "" + +#: backends/events/gph/gph-events.cpp:370 +#: backends/events/gph/gph-events.cpp:413 +#: backends/events/openpandora/op-events.cpp:145 +msgid "Touchscreen 'Tap Mode' - Hover (No Click)" +msgstr "" + +#: backends/events/gph/gph-events.cpp:390 +#, fuzzy +msgid "Maximum Volume" +msgstr "³ãçÝöáâì" + +#: backends/events/gph/gph-events.cpp:392 +msgid "Increasing Volume" +msgstr "" + +#: backends/events/gph/gph-events.cpp:398 +#, fuzzy +msgid "Minimal Volume" +msgstr "³ãçÝöáâì" + +#: backends/events/gph/gph-events.cpp:400 +msgid "Decreasing Volume" +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 "½ÕßàÐÒØÛìÝØÙ èÛïå" @@ -4,7 +4,7 @@ # -# UNIX specific +# POSIX specific # install: $(INSTALL) -d "$(DESTDIR)$(bindir)" @@ -92,10 +92,6 @@ ifdef USE_MAD OSX_STATIC_LIBS += $(STATICLIBPATH)/lib/libmad.a endif -ifdef USE_MPEG2 -OSX_STATIC_LIBS += $(STATICLIBPATH)/lib/libmpeg2.a -endif - ifdef USE_PNG OSX_STATIC_LIBS += $(STATICLIBPATH)/lib/libpng.a endif @@ -104,6 +100,10 @@ ifdef USE_THEORADEC OSX_STATIC_LIBS += $(STATICLIBPATH)/lib/libtheoradec.a endif +ifdef USE_FAAD +OSX_STATIC_LIBS += $(STATICLIBPATH)/lib/libfaad.a +endif + ifdef USE_ZLIB OSX_ZLIB ?= -lz endif @@ -20,11 +20,12 @@ ifdef TOOL_EXECUTABLE # TODO: Refactor this, so that even our master executable can use this rule? ################################################ TOOL-$(MODULE) := $(MODULE)/$(TOOL_EXECUTABLE)$(EXEEXT) -$(TOOL-$(MODULE)): $(MODULE_OBJS-$(MODULE)) +$(TOOL-$(MODULE)): $(MODULE_OBJS-$(MODULE)) $(TOOL_DEPS) $(QUIET_CXX)$(CXX) $(LDFLAGS) $+ -o $@ -# Reset TOOL_EXECUTABLE var +# Reset TOOL_* vars TOOL_EXECUTABLE:= +TOOL_DEPS:= # Add to "devtools" target devtools: $(TOOL-$(MODULE)) diff --git a/test/common/str.h b/test/common/str.h index 0dee16a493..2c563f3132 100644 --- a/test/common/str.h +++ b/test/common/str.h @@ -284,6 +284,19 @@ class StringTestSuite : public CxxTest::TestSuite TS_ASSERT_EQUALS(Common::normalizePath("foo/./bar", '/'), "foo/bar"); TS_ASSERT_EQUALS(Common::normalizePath("foo//./bar//", '/'), "foo/bar"); TS_ASSERT_EQUALS(Common::normalizePath("foo//.bar//", '/'), "foo/.bar"); + + TS_ASSERT_EQUALS(Common::normalizePath("..", '/'), ".."); + TS_ASSERT_EQUALS(Common::normalizePath("../", '/'), ".."); + TS_ASSERT_EQUALS(Common::normalizePath("/..", '/'), "/.."); + TS_ASSERT_EQUALS(Common::normalizePath("../bar", '/'), "../bar"); + TS_ASSERT_EQUALS(Common::normalizePath("foo//../", '/'), ""); + TS_ASSERT_EQUALS(Common::normalizePath("foo/../bar", '/'), "bar"); + TS_ASSERT_EQUALS(Common::normalizePath("foo//../bar//", '/'), "bar"); + TS_ASSERT_EQUALS(Common::normalizePath("foo//..bar//", '/'), "foo/..bar"); + + TS_ASSERT_EQUALS(Common::normalizePath("foo/../../bar//", '/'), "../bar"); + TS_ASSERT_EQUALS(Common::normalizePath("../foo/../bar", '/'), "../bar"); + TS_ASSERT_EQUALS(Common::normalizePath("../../foo/bar/", '/'), "../../foo/bar"); } void test_matchString() { diff --git a/video/avi_decoder.cpp b/video/avi_decoder.cpp index e3fb2d09ac..9685952304 100644 --- a/video/avi_decoder.cpp +++ b/video/avi_decoder.cpp @@ -399,10 +399,8 @@ Codec *AviDecoder::createCodec() { return new MSRLEDecoder(_bmInfo.width, _bmInfo.height, _bmInfo.bitCount); case ID_CVID: return new CinepakDecoder(_bmInfo.bitCount); -#ifdef USE_INDEO3 case ID_IV32: return new Indeo3Decoder(_bmInfo.width, _bmInfo.height); -#endif #ifdef VIDEO_CODECS_TRUEMOTION1_H case ID_DUCK: return new TrueMotion1Decoder(_bmInfo.width, _bmInfo.height); diff --git a/video/codecs/indeo3.cpp b/video/codecs/indeo3.cpp index 529f0b5bda..7bf7fc8235 100644 --- a/video/codecs/indeo3.cpp +++ b/video/codecs/indeo3.cpp @@ -22,8 +22,6 @@ #include "common/scummsys.h" -#ifdef USE_INDEO3 - /* Intel Indeo 3 decompressor, derived from ffmpeg. * * Original copyright note: * Intel Indeo 3 (IV31, IV32, etc.) video decoder for ffmpeg @@ -3516,5 +3514,3 @@ const uint32 Indeo3Decoder::correctionhighorder[] = { }; } // End of namespace Video - -#endif // USE_INDEO3 diff --git a/video/codecs/indeo3.h b/video/codecs/indeo3.h index c0a88fec5e..a07d779dec 100644 --- a/video/codecs/indeo3.h +++ b/video/codecs/indeo3.h @@ -22,8 +22,6 @@ #include "common/scummsys.h" -#ifdef USE_INDEO3 - /* Intel Indeo 3 decompressor, derived from ffmpeg. * * Original copyright note: @@ -87,5 +85,3 @@ private: } // End of namespace Video #endif // VIDEO_CODECS_INDEO3_H - -#endif // USE_INDEO3 diff --git a/video/coktel_decoder.cpp b/video/coktel_decoder.cpp index ee4b22e6b9..8ea2d08acb 100644 --- a/video/coktel_decoder.cpp +++ b/video/coktel_decoder.cpp @@ -1624,11 +1624,7 @@ bool VMDDecoder::openExternalCodec() { if (_videoCodec == kVideoCodecIndeo3) { _isPaletted = false; -#ifdef USE_INDEO3 _codec = new Indeo3Decoder(_width, _height); -#else - warning("VMDDecoder::openExternalCodec(): Indeo3 decoder not compiled in"); -#endif } else { warning("VMDDecoder::openExternalCodec(): Unknown video codec FourCC \"%s\"", diff --git a/video/module.mk b/video/module.mk index 0172482dfa..d813218785 100644 --- a/video/module.mk +++ b/video/module.mk @@ -5,7 +5,6 @@ MODULE_OBJS := \ coktel_decoder.o \ dxa_decoder.o \ flic_decoder.o \ - mpeg_player.o \ qt_decoder.o \ smk_decoder.o \ video_decoder.o \ @@ -15,7 +14,6 @@ MODULE_OBJS := \ codecs/mjpeg.o \ codecs/msrle.o \ codecs/msvideo1.o \ - codecs/qdm2.o \ codecs/qtrle.o \ codecs/rpza.o \ codecs/smc.o \ diff --git a/video/mpeg_player.cpp b/video/mpeg_player.cpp deleted file mode 100644 index fa98860a38..0000000000 --- a/video/mpeg_player.cpp +++ /dev/null @@ -1,622 +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. - * - */ - -// The YUV to RGB conversion code is derived from SDL's YUV overlay code, which -// in turn appears to be derived from mpeg_play. The following copyright -// notices have been included in accordance with the original license. Please -// note that the term "software" in this context only applies to the -// buildLookup() and plotYUV*() functions below. - -// Copyright (c) 1995 The Regents of the University of California. -// All rights reserved. -// -// Permission to use, copy, modify, and distribute this software and its -// documentation for any purpose, without fee, and without written agreement is -// hereby granted, provided that the above copyright notice and the following -// two paragraphs appear in all copies of this software. -// -// IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR -// DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT -// OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF -// CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, -// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -// AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS -// ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO -// PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - -// Copyright (c) 1995 Erik Corry -// All rights reserved. -// -// Permission to use, copy, modify, and distribute this software and its -// documentation for any purpose, without fee, and without written agreement is -// hereby granted, provided that the above copyright notice and the following -// two paragraphs appear in all copies of this software. -// -// IN NO EVENT SHALL ERIK CORRY BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, -// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF -// THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF ERIK CORRY HAS BEEN ADVISED -// OF THE POSSIBILITY OF SUCH DAMAGE. -// -// ERIK CORRY SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -// PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" -// BASIS, AND ERIK CORRY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, -// UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - -// Portions of this software Copyright (c) 1995 Brown University. -// All rights reserved. -// -// Permission to use, copy, modify, and distribute this software and its -// documentation for any purpose, without fee, and without written agreement -// is hereby granted, provided that the above copyright notice and the -// following two paragraphs appear in all copies of this software. -// -// IN NO EVENT SHALL BROWN UNIVERSITY BE LIABLE TO ANY PARTY FOR -// DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT -// OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF BROWN -// UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// BROWN UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -// PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" -// BASIS, AND BROWN UNIVERSITY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, -// SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - -#include "video/mpeg_player.h" -#include "common/file.h" -#include "common/system.h" -#include "common/util.h" - -namespace Video { - -BaseAnimationState::BaseAnimationState(OSystem *sys, int width, int height) - : _movieWidth(width), _movieHeight(height), _frameWidth(width), _frameHeight(height), _sys(sys) { -#ifndef BACKEND_8BIT - const int screenW = _sys->getOverlayWidth(); - const int screenH = _sys->getOverlayHeight(); - - _movieScale = MIN(screenW / _movieWidth, screenH / _movieHeight); - - assert(_movieScale >= 1); - if (_movieScale > 3) - _movieScale = 3; - - _colorTab = NULL; - _rgbToPix = NULL; - memset(&_overlayFormat, 0, sizeof(_overlayFormat)); -#endif -} - -BaseAnimationState::~BaseAnimationState() { -#ifdef USE_MPEG2 - if (_mpegDecoder) - mpeg2_close(_mpegDecoder); - delete _mpegFile; -#ifndef BACKEND_8BIT - _sys->hideOverlay(); - free(_overlay); - free(_colorTab); - free(_rgbToPix); -#endif -#endif -} - - -bool BaseAnimationState::init(const char *name) { -#ifdef USE_MPEG2 - char tempFile[512]; - - _mpegDecoder = NULL; - _mpegFile = NULL; - -#ifdef BACKEND_8BIT - - uint i, p; - - // Load lookup palettes - sprintf(tempFile, "%s.pal", name); - - Common::File f; - - if (!f.open(tempFile)) { - warning("Cutscene: %s palette missing", tempFile); - return false; - } - - p = 0; - while (!f.eos()) { - _palettes[p].end = f.readUint16LE(); - _palettes[p].cnt = f.readUint16LE(); - - for (i = 0; i < _palettes[p].cnt; i++) { - _palettes[p].pal[4 * i] = f.readByte(); - _palettes[p].pal[4 * i + 1] = f.readByte(); - _palettes[p].pal[4 * i + 2] = f.readByte(); - _palettes[p].pal[4 * i + 3] = 0; - } - for (; i < 256; i++) { - _palettes[p].pal[4 * i] = 0; - _palettes[p].pal[4 * i + 1] = 0; - _palettes[p].pal[4 * i + 2] = 0; - _palettes[p].pal[4 * i + 3] = 0; - } - - p++; - } - - f.close(); - - _palNum = 0; - _maxPalNum = p; - setPalette(_palettes[_palNum].pal); - _lut = _lut2 = _yuvLookup[0]; - _curPal = -1; - _cr = 0; - buildLookup(_palNum, 256); - _lut2 = _yuvLookup[1]; - _lutCalcNum = (BITDEPTH + _palettes[_palNum].end + 2) / (_palettes[_palNum].end + 2); -#else - buildLookup(); - _overlay = (OverlayColor *)calloc(_movieScale * _movieWidth * _movieScale * _movieHeight, sizeof(OverlayColor)); - _sys->showOverlay(); -#endif - - // Open MPEG2 stream - _mpegFile = new Common::File(); - sprintf(tempFile, "%s.mp2", name); - if (!_mpegFile->open(tempFile)) { - warning("Cutscene: Could not open %s", tempFile); - return false; - } - - // Load and configure decoder - _mpegDecoder = mpeg2_init(); - if (_mpegDecoder == NULL) { - warning("Cutscene: Could not allocate an MPEG2 decoder"); - return false; - } - - _mpegInfo = mpeg2_info(_mpegDecoder); - _frameNum = 0; - - return true; -#else /* USE_MPEG2 */ - return false; -#endif -} - -bool BaseAnimationState::decodeFrame() { -#ifdef USE_MPEG2 - mpeg2_state_t state; - const mpeg2_sequence_t *sequence_i; - size_t size = (size_t) -1; - static byte buf[BUFFER_SIZE]; - - do { - state = mpeg2_parse(_mpegDecoder); - sequence_i = _mpegInfo->sequence; - - switch (state) { - case STATE_BUFFER: - size = _mpegFile->read(buf, BUFFER_SIZE); - mpeg2_buffer(_mpegDecoder, buf, buf + size); - break; - - case STATE_SLICE: - case STATE_END: - if (_mpegInfo->display_fbuf) { - checkPaletteSwitch(); - drawYUV(sequence_i->width, sequence_i->height, _mpegInfo->display_fbuf->buf); -#ifdef BACKEND_8BIT - buildLookup(_palNum + 1, _lutCalcNum); -#endif - - _frameNum++; - return true; - } - break; - - default: - break; - } - } while (size); -#endif - return false; -} - -bool BaseAnimationState::checkPaletteSwitch() { -#ifdef BACKEND_8BIT - // if we have reached the last image with this palette, switch to new one - if (_frameNum == _palettes[_palNum].end) { - unsigned char *l = _lut2; - _palNum++; - setPalette(_palettes[_palNum].pal); - _lutCalcNum = (BITDEPTH + _palettes[_palNum].end - (_frameNum + 1) + 2) / (_palettes[_palNum].end - (_frameNum + 1) + 2); - _lut2 = _lut; - _lut = l; - return true; - } -#endif - - return false; -} - -void BaseAnimationState::handleScreenChanged() { -#ifndef BACKEND_8BIT - const int screenW = _sys->getOverlayWidth(); - const int screenH = _sys->getOverlayHeight(); - - int newScale = MIN(screenW / _movieWidth, screenH / _movieHeight); - - assert(newScale >= 1); - if (newScale > 3) - newScale = 3; - - if (newScale != _movieScale) { - // HACK: Since frames generally do not cover the entire screen, - // We need to undraw the old frame. This is a very hacky - // way of doing that. - OverlayColor *buf = (OverlayColor *)calloc(screenW * screenH, sizeof(OverlayColor)); - _sys->copyRectToOverlay(buf, screenW, 0, 0, screenW, screenH); - free(buf); - - free(_overlay); - _movieScale = newScale; - _overlay = (OverlayColor *)calloc(_movieScale * _movieWidth * _movieScale * _movieHeight, sizeof(OverlayColor)); - } - - buildLookup(); -#endif -} - -#ifdef BACKEND_8BIT - -/** - * Build 'Best-Match' RGB lookup table - */ -void BaseAnimationState::buildLookup(int p, int lines) { - int y, cb; - int r, g, b, ii; - - if (p >= _maxPalNum) - return; - - if (p != _curPal) { - _curPal = p; - _cr = 0; - _pos = 0; - } - - if (_cr > BITDEPTH) - return; - - for (ii = 0; ii < lines; ii++) { - r = (-16 * 256 + (int) (256 * 1.596) * ((_cr << SHIFT) - 128)) / 256; - for (cb = 0; cb <= BITDEPTH; cb++) { - g = (-16 * 256 - (int) (0.813 * 256) * ((_cr << SHIFT) - 128) - (int) (0.391 * 256) * ((cb << SHIFT) - 128)) / 256; - b = (-16 * 256 + (int) (2.018 * 256) * ((cb << SHIFT) - 128)) / 256; - - for (y = 0; y <= BITDEPTH; y++) { - int idx, bst = 0; - int dis = 2 * SQR(r - _palettes[p].pal[0]) + 4 * SQR(g - _palettes[p].pal[1]) + SQR(b - _palettes[p].pal[2]); - - for (idx = 1; idx < 256; idx++) { - long d2 = 2 * SQR(r - _palettes[p].pal[4 * idx]) + 4 * SQR(g - _palettes[p].pal[4 * idx + 1]) + SQR(b - _palettes[p].pal[4 * idx + 2]); - if (d2 < dis) { - bst = idx; - dis = d2; - } - } - _lut2[_pos++] = bst; - - r += (1 << SHIFT); - g += (1 << SHIFT); - b += (1 << SHIFT); - } - r -= (BITDEPTH + 1) * (1 << SHIFT); - } - _cr++; - if (_cr > BITDEPTH) - return; - } -} - -#else - -void BaseAnimationState::buildLookup() { - // Do we already have lookup tables for this bit format? - Graphics::PixelFormat format = _sys->getOverlayFormat(); - if (format == _overlayFormat && _colorTab && _rgbToPix) - return; - - free(_colorTab); - free(_rgbToPix); - - _colorTab = (int16 *)malloc(4 * 256 * sizeof(int16)); - - int16 *Cr_r_tab = &_colorTab[0 * 256]; - int16 *Cr_g_tab = &_colorTab[1 * 256]; - int16 *Cb_g_tab = &_colorTab[2 * 256]; - int16 *Cb_b_tab = &_colorTab[3 * 256]; - - _rgbToPix = (OverlayColor *)malloc(3 * 768 * sizeof(OverlayColor)); - - OverlayColor *r_2_pix_alloc = &_rgbToPix[0 * 768]; - OverlayColor *g_2_pix_alloc = &_rgbToPix[1 * 768]; - OverlayColor *b_2_pix_alloc = &_rgbToPix[2 * 768]; - - int16 CR, CB; - int i; - - // Generate the tables for the display surface - - for (i = 0; i < 256; i++) { - // Gamma correction (luminescence table) and chroma correction - // would be done here. See the Berkeley mpeg_play sources. - - CR = CB = (i - 128); - Cr_r_tab[i] = (int16) ( (0.419 / 0.299) * CR) + 0 * 768 + 256; - Cr_g_tab[i] = (int16) (-(0.299 / 0.419) * CR) + 1 * 768 + 256; - Cb_g_tab[i] = (int16) (-(0.114 / 0.331) * CB); - Cb_b_tab[i] = (int16) ( (0.587 / 0.331) * CB) + 2 * 768 + 256; - } - - // Set up entries 0-255 in rgb-to-pixel value tables. - for (i = 0; i < 256; i++) { - r_2_pix_alloc[i + 256] = format.RGBToColor(i, 0, 0); - g_2_pix_alloc[i + 256] = format.RGBToColor(0, i, 0); - b_2_pix_alloc[i + 256] = format.RGBToColor(0, 0, i); - } - - // Spread out the values we have to the rest of the array so that we do - // not need to check for overflow. - for (i = 0; i < 256; i++) { - r_2_pix_alloc[i] = r_2_pix_alloc[256]; - r_2_pix_alloc[i + 512] = r_2_pix_alloc[511]; - g_2_pix_alloc[i] = g_2_pix_alloc[256]; - g_2_pix_alloc[i + 512] = g_2_pix_alloc[511]; - b_2_pix_alloc[i] = b_2_pix_alloc[256]; - b_2_pix_alloc[i + 512] = b_2_pix_alloc[511]; - } - - _overlayFormat = format; -} - -void BaseAnimationState::plotYUV(int width, int height, byte *const *dat) { - switch (_movieScale) { - case 1: - plotYUV1x(width, height, dat); - break; - case 2: - plotYUV2x(width, height, dat); - break; - case 3: - plotYUV3x(width, height, dat); - break; - } -} - -void BaseAnimationState::plotYUV1x(int width, int height, byte *const *dat) { - byte *lum = dat[0]; - byte *cr = dat[2]; - byte *cb = dat[1]; - - byte *lum2 = lum + width; - - int16 cr_r; - int16 crb_g; - int16 cb_b; - - OverlayColor *row1 = _overlay; - OverlayColor *row2 = row1 + _movieWidth; - - int x; - - for (; height > 0; height -= 2) { - OverlayColor *r1 = row1; - OverlayColor *r2 = row2; - - for (x = width; x > 0; x -= 2) { - register OverlayColor *L; - - cr_r = _colorTab[*cr + 0 * 256]; - crb_g = _colorTab[*cr + 1 * 256] + _colorTab[*cb + 2 * 256]; - cb_b = _colorTab[*cb + 3 * 256]; - ++cr; - ++cb; - - L = &_rgbToPix[*lum++]; - *r1++ = L[cr_r] | L[crb_g] | L[cb_b]; - - L = &_rgbToPix[*lum++]; - *r1++ = L[cr_r] | L[crb_g] | L[cb_b]; - - // Now, do second row. - - L = &_rgbToPix[*lum2++]; - *r2++ = L[cr_r] | L[crb_g] | L[cb_b]; - - L = &_rgbToPix[*lum2++]; - *r2++ = L[cr_r] | L[crb_g] | L[cb_b]; - } - - lum += width; - lum2 += width; - row1 += 2 * _movieWidth; - row2 += 2 * _movieWidth; - } -} - -void BaseAnimationState::plotYUV2x(int width, int height, byte *const *dat) { - byte *lum = dat[0]; - byte *cr = dat[2]; - byte *cb = dat[1]; - - byte *lum2 = lum + width; - - int16 cr_r; - int16 crb_g; - int16 cb_b; - - OverlayColor *row1 = _overlay; - OverlayColor *row2 = row1 + 2 * 2 * _movieWidth; - - int x; - - for (; height > 0; height -= 2) { - OverlayColor *r1 = row1; - OverlayColor *r2 = row2; - - for (x = width; x > 0; x -= 2) { - register OverlayColor *L; - register OverlayColor C; - - cr_r = _colorTab[*cr + 0 * 256]; - crb_g = _colorTab[*cr + 1 * 256] + _colorTab[*cb + 2 * 256]; - cb_b = _colorTab[*cb + 3 * 256]; - ++cr; - ++cb; - - L = &_rgbToPix[*lum++]; - C = L[cr_r] | L[crb_g] | L[cb_b]; - *r1++ = C; - *r1++ = C; - - L = &_rgbToPix[*lum++]; - C = L[cr_r] | L[crb_g] | L[cb_b]; - *r1++ = C; - *r1++ = C; - - // Now, do second row. - - L = &_rgbToPix[*lum2++]; - C = L[cr_r] | L[crb_g] | L[cb_b]; - *r2++ = C; - *r2++ = C; - - L = &_rgbToPix[*lum2++]; - C = L[cr_r] | L[crb_g] | L[cb_b]; - *r2++ = C; - *r2++ = C; - } - - memcpy(row1 + 2 * _movieWidth, row1, 2 * _movieWidth * sizeof(OverlayColor)); - memcpy(row2 + 2 * _movieWidth, row2, 2 * _movieWidth * sizeof(OverlayColor)); - - lum += width; - lum2 += width; - row1 += 4 * 2 * _movieWidth; - row2 += 4 * 2 * _movieWidth; - } -} - -void BaseAnimationState::plotYUV3x(int width, int height, byte *const *dat) { - byte *lum = dat[0]; - byte *cr = dat[2]; - byte *cb = dat[1]; - - byte *lum2 = lum + width; - - int16 cr_r; - int16 crb_g; - int16 cb_b; - - OverlayColor *row1 = _overlay; - OverlayColor *row2 = row1 + 3 * 3 * _movieWidth; - - int x; - - for (; height > 0; height -= 2) { - OverlayColor *r1 = row1; - OverlayColor *r2 = row2; - - for (x = width; x > 0; x -= 2) { - register OverlayColor *L; - register OverlayColor C; - - cr_r = _colorTab[*cr + 0 * 256]; - crb_g = _colorTab[*cr + 1 * 256] + _colorTab[*cb + 2 * 256]; - cb_b = _colorTab[*cb + 3 * 256]; - ++cr; - ++cb; - - L = &_rgbToPix[*lum++]; - C = L[cr_r] | L[crb_g] | L[cb_b]; - *r1++ = C; - *r1++ = C; - *r1++ = C; - - L = &_rgbToPix[*lum++]; - C = L[cr_r] | L[crb_g] | L[cb_b]; - *r1++ = C; - *r1++ = C; - *r1++ = C; - - // Now, do second row. - - L = &_rgbToPix[*lum2++]; - C = L[cr_r] | L[crb_g] | L[cb_b]; - *r2++ = C; - *r2++ = C; - *r2++ = C; - - L = &_rgbToPix[*lum2++]; - C = L[cr_r] | L[crb_g] | L[cb_b]; - *r2++ = C; - *r2++ = C; - *r2++ = C; - } - - memcpy(row1 + 3 * _movieWidth, row1, 3 * _movieWidth * sizeof(OverlayColor)); - memcpy(row1 + 2 * 3 * _movieWidth, row1, 3 * _movieWidth * sizeof(OverlayColor)); - memcpy(row2 + 3 * _movieWidth, row2, 3 * _movieWidth * sizeof(OverlayColor)); - memcpy(row2 + 2 * 3 * _movieWidth, row2, 3 * _movieWidth * sizeof(OverlayColor)); - - lum += width; - lum2 += width; - row1 += 6 * 3 * _movieWidth; - row2 += 6 * 3 * _movieWidth; - } -} - -#endif - -void BaseAnimationState::updateScreen() { -#ifndef BACKEND_8BIT - int width = _movieScale * _frameWidth; - int height = _movieScale * _frameHeight; - int pitch = _movieScale * _movieWidth; - - const int screenW = _sys->getOverlayWidth(); - const int screenH = _sys->getOverlayHeight(); - - int x = (screenW - _movieScale * _frameWidth) / 2; - int y = (screenH - _movieScale * _frameHeight) / 2; - - _sys->copyRectToOverlay(_overlay, pitch, x, y, width, height); -#endif - _sys->updateScreen(); -} - -} // End of namespace Video diff --git a/video/mpeg_player.h b/video/mpeg_player.h deleted file mode 100644 index dca0a98a2f..0000000000 --- a/video/mpeg_player.h +++ /dev/null @@ -1,169 +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. - * - */ - -#ifndef VIDEO_MPEG_PLAYER_H -#define VIDEO_MPEG_PLAYER_H - -#include "common/scummsys.h" -#include "graphics/pixelformat.h" - -// Uncomment this if you are using libmpeg2 0.3.1. -// #define USE_MPEG2_0_3_1 - -#ifdef USE_MPEG2 - -#if defined(__PLAYSTATION2__) - typedef uint8 uint8_t; - typedef uint16 uint16_t; - typedef uint32 uint32_t; -#elif defined(_WIN32_WCE) - typedef signed char int8_t; - typedef signed short int16_t; - typedef unsigned char uint8_t; - typedef unsigned short uint16_t; -#elif defined(_MSC_VER) - typedef signed char int8_t; - typedef signed short int16_t; - typedef unsigned char uint8_t; - typedef unsigned short uint16_t; - #if !defined(SDL_COMPILEDVERSION) || (SDL_COMPILEDVERSION < 1210) - typedef signed long int32_t; - typedef unsigned long uint32_t; - #endif -#else -# include <inttypes.h> -#endif - -extern "C" { - #include <mpeg2dec/mpeg2.h> -} - -#ifdef USE_MPEG2_0_3_1 -typedef int mpeg2_state_t; -typedef sequence_t mpeg2_sequence_t; -#define STATE_BUFFER -1 -#endif - -#endif - -#ifdef BACKEND_8BIT -#define SQR(x) ((x) * (x)) -#define SHIFT 3 -#else -#define SHIFT 1 -#endif - -#define BITDEPTH (1 << (8 - SHIFT)) -#define ROUNDADD (1 << (SHIFT - 1)) - -#define BUFFER_SIZE 4096 - -namespace Common { -class File; -} - -class OSystem; - -namespace Video { - -class BaseAnimationState { -protected: - const int _movieWidth; - const int _movieHeight; - - int _frameWidth; - int _frameHeight; - -#ifndef BACKEND_8BIT - int _movieScale; -#endif - - OSystem *_sys; - - uint _frameNum; - -#ifdef USE_MPEG2 - mpeg2dec_t *_mpegDecoder; - const mpeg2_info_t *_mpegInfo; -#endif - - Common::File *_mpegFile; - -#ifdef BACKEND_8BIT - int _palNum; - int _maxPalNum; - - byte _yuvLookup[2][(BITDEPTH+1) * (BITDEPTH+1) * (BITDEPTH+1)]; - byte *_lut; - byte *_lut2; - int _lutCalcNum; - - int _curPal; - int _cr; - int _pos; - - struct { - uint cnt; - uint end; - byte pal[4 * 256]; - } _palettes[50]; -#else - OverlayColor *_overlay; - Graphics::PixelFormat _overlayFormat; - int16 *_colorTab; - OverlayColor *_rgbToPix; -#endif - -public: - BaseAnimationState(OSystem *sys, int width, int height); - virtual ~BaseAnimationState(); - - bool init(const char *name); - bool decodeFrame(); - void handleScreenChanged(); - void updateScreen(); - -#ifndef BACKEND_8BIT - void buildLookup(); -#endif - - int getFrameWidth() { return _frameWidth; } - int getFrameHeight() { return _frameHeight; } - -protected: - bool checkPaletteSwitch(); - virtual void drawYUV(int width, int height, byte *const *dat) = 0; - -#ifdef BACKEND_8BIT - void buildLookup(int p, int lines); - virtual void setPalette(byte *pal) = 0; -#else - void plotYUV(int width, int height, byte *const *dat); - void plotYUV1x(int width, int height, byte *const *dat); - void plotYUV2x(int width, int height, byte *const *dat); - void plotYUV3x(int width, int height, byte *const *dat); -#endif -}; - -} // End of namespace Video - -#endif diff --git a/video/qt_decoder.cpp b/video/qt_decoder.cpp index 2d29bcf97b..9575845cd3 100644 --- a/video/qt_decoder.cpp +++ b/video/qt_decoder.cpp @@ -21,7 +21,7 @@ */ // -// Heavily based on ffmpeg code. +// Partially based on ffmpeg code. // // Copyright (c) 2001 Fabrice Bellard. // First version by Francois Revol revol@free.fr @@ -30,32 +30,19 @@ #include "video/qt_decoder.h" +#include "audio/audiostream.h" + #include "common/debug.h" #include "common/endian.h" -#include "common/macresman.h" #include "common/memstream.h" -#include "common/util.h" -#include "common/zlib.h" -#include "common/stream.h" #include "common/system.h" #include "common/textconsole.h" -#include "common/types.h" - -#include "graphics/pixelformat.h" -#include "graphics/surface.h" - - -#include "audio/audiostream.h" - -// Audio codecs -#include "audio/decoders/adpcm.h" -#include "audio/decoders/raw.h" +#include "common/util.h" // Video codecs #include "video/codecs/codec.h" #include "video/codecs/cinepak.h" #include "video/codecs/mjpeg.h" -#include "video/codecs/qdm2.h" #include "video/codecs/qtrle.h" #include "video/codecs/rpza.h" #include "video/codecs/smc.h" @@ -69,73 +56,63 @@ namespace Video { //////////////////////////////////////////// QuickTimeDecoder::QuickTimeDecoder() { - _audStream = NULL; - _beginOffset = 0; _curFrame = -1; _startTime = _nextFrameStartTime = 0; _audHandle = Audio::SoundHandle(); - _numStreams = 0; - _fd = 0; _scaledSurface = 0; - _scaleFactorX = 1; - _scaleFactorY = 1; _dirtyPalette = false; - _resFork = new Common::MacResManager(); _palette = 0; - - initParseTable(); } QuickTimeDecoder::~QuickTimeDecoder() { close(); - delete _resFork; } uint16 QuickTimeDecoder::getWidth() const { - if (_videoStreamIndex < 0) + if (_videoTrackIndex < 0) return 0; - return (Common::Rational(_streams[_videoStreamIndex]->width) / getScaleFactorX()).toInt(); + return (Common::Rational(_tracks[_videoTrackIndex]->width) / getScaleFactorX()).toInt(); } uint16 QuickTimeDecoder::getHeight() const { - if (_videoStreamIndex < 0) + if (_videoTrackIndex < 0) return 0; - return (Common::Rational(_streams[_videoStreamIndex]->height) / getScaleFactorY()).toInt(); + return (Common::Rational(_tracks[_videoTrackIndex]->height) / getScaleFactorY()).toInt(); } uint32 QuickTimeDecoder::getFrameCount() const { - if (_videoStreamIndex < 0) + if (_videoTrackIndex < 0) return 0; - return _streams[_videoStreamIndex]->nb_frames; + return _tracks[_videoTrackIndex]->frameCount; } Common::Rational QuickTimeDecoder::getScaleFactorX() const { - if (_videoStreamIndex < 0) + if (_videoTrackIndex < 0) return 1; - return (_scaleFactorX * _streams[_videoStreamIndex]->scaleFactorX); + return (_scaleFactorX * _tracks[_videoTrackIndex]->scaleFactorX); } Common::Rational QuickTimeDecoder::getScaleFactorY() const { - if (_videoStreamIndex < 0) + if (_videoTrackIndex < 0) return 1; - return (_scaleFactorY * _streams[_videoStreamIndex]->scaleFactorY); + return (_scaleFactorY * _tracks[_videoTrackIndex]->scaleFactorY); } uint32 QuickTimeDecoder::getFrameDuration() { - if (_videoStreamIndex < 0) + if (_videoTrackIndex < 0) return 0; uint32 curFrameIndex = 0; - for (int32 i = 0; i < _streams[_videoStreamIndex]->stts_count; i++) { - curFrameIndex += _streams[_videoStreamIndex]->stts_data[i].count; + for (int32 i = 0; i < _tracks[_videoTrackIndex]->timeToSampleCount; i++) { + curFrameIndex += _tracks[_videoTrackIndex]->timeToSample[i].count; if ((uint32)_curFrame < curFrameIndex) { // Ok, now we have what duration this frame has. - return _streams[_videoStreamIndex]->stts_data[i].duration; + return _tracks[_videoTrackIndex]->timeToSample[i].duration; } } @@ -154,17 +131,17 @@ Graphics::PixelFormat QuickTimeDecoder::getPixelFormat() const { } uint32 QuickTimeDecoder::findKeyFrame(uint32 frame) const { - for (int i = _streams[_videoStreamIndex]->keyframe_count - 1; i >= 0; i--) - if (_streams[_videoStreamIndex]->keyframes[i] <= frame) - return _streams[_videoStreamIndex]->keyframes[i]; + for (int i = _tracks[_videoTrackIndex]->keyframeCount - 1; i >= 0; i--) + if (_tracks[_videoTrackIndex]->keyframes[i] <= frame) + return _tracks[_videoTrackIndex]->keyframes[i]; // If none found, we'll assume the requested frame is a key frame return frame; } void QuickTimeDecoder::seekToFrame(uint32 frame) { - assert(_videoStreamIndex >= 0); - assert(frame < _streams[_videoStreamIndex]->nb_frames); + assert(_videoTrackIndex >= 0); + assert(frame < _tracks[_videoTrackIndex]->frameCount); // Stop all audio (for now) stopAudio(); @@ -178,92 +155,43 @@ void QuickTimeDecoder::seekToFrame(uint32 frame) { _nextFrameStartTime = 0; uint32 curFrame = 0; - for (int32 i = 0; i < _streams[_videoStreamIndex]->stts_count && curFrame < frame; i++) { - for (int32 j = 0; j < _streams[_videoStreamIndex]->stts_data[i].count && curFrame < frame; j++) { + for (int32 i = 0; i < _tracks[_videoTrackIndex]->timeToSampleCount && curFrame < frame; i++) { + for (int32 j = 0; j < _tracks[_videoTrackIndex]->timeToSample[i].count && curFrame < frame; j++) { curFrame++; - _nextFrameStartTime += _streams[_videoStreamIndex]->stts_data[i].duration; + _nextFrameStartTime += _tracks[_videoTrackIndex]->timeToSample[i].duration; } } // Adjust the video starting point - const Audio::Timestamp curVideoTime(0, _nextFrameStartTime, _streams[_videoStreamIndex]->time_scale); + const Audio::Timestamp curVideoTime(0, _nextFrameStartTime, _tracks[_videoTrackIndex]->timeScale); _startTime = g_system->getMillis() - curVideoTime.msecs(); resetPauseStartTime(); // Adjust the audio starting point - if (_audioStreamIndex >= 0) { + if (_audioTrackIndex >= 0) { _audioStartOffset = curVideoTime; - // Re-create the audio stream - STSDEntry *entry = &_streams[_audioStreamIndex]->stsdEntries[0]; - _audStream = Audio::makeQueuingAudioStream(entry->sampleRate, entry->channels == 2); - - // First, we need to track down what audio sample we need - Audio::Timestamp curAudioTime(0, _streams[_audioStreamIndex]->time_scale); - uint sample = 0; - bool done = false; - for (int32 i = 0; i < _streams[_audioStreamIndex]->stts_count && !done; i++) { - for (int32 j = 0; j < _streams[_audioStreamIndex]->stts_data[i].count; j++) { - curAudioTime = curAudioTime.addFrames(_streams[_audioStreamIndex]->stts_data[i].duration); - - if (curAudioTime > curVideoTime) { - done = true; - break; - } - - sample++; - } - } - - // Now to track down what chunk it's in - _curAudioChunk = 0; - uint32 totalSamples = 0; - for (uint32 i = 0; i < _streams[_audioStreamIndex]->chunk_count; i++, _curAudioChunk++) { - int sampleToChunkIndex = -1; + // Seek to the new audio location + setAudioStreamPos(_audioStartOffset); - for (uint32 j = 0; j < _streams[_audioStreamIndex]->sample_to_chunk_sz; j++) - if (i >= _streams[_audioStreamIndex]->sample_to_chunk[j].first) - sampleToChunkIndex = j; - - assert(sampleToChunkIndex >= 0); - - totalSamples += _streams[_audioStreamIndex]->sample_to_chunk[sampleToChunkIndex].count; - - if (sample < totalSamples) { - totalSamples -= _streams[_audioStreamIndex]->sample_to_chunk[sampleToChunkIndex].count; - break; - } - } - - // Reposition the audio stream - readNextAudioChunk(); - if (sample != totalSamples) { - // HACK: Skip a certain amount of samples from the stream - // (There's got to be a better way to do this!) - int16 *tempBuffer = new int16[sample - totalSamples]; - _audStream->readBuffer(tempBuffer, sample - totalSamples); - delete[] tempBuffer; - debug(3, "Skipping %d audio samples", sample - totalSamples); - } - // Restart the audio startAudio(); } } void QuickTimeDecoder::seekToTime(Audio::Timestamp time) { - // TODO: Audio-only seeking (or really, have QuickTime sounds) - if (_videoStreamIndex < 0) + // Use makeQuickTimeStream() instead + if (_videoTrackIndex < 0) error("Audio-only seeking not supported"); // Try to find the last frame that should have been decoded uint32 frame = 0; - Audio::Timestamp totalDuration(0, _streams[_videoStreamIndex]->time_scale); + Audio::Timestamp totalDuration(0, _tracks[_videoTrackIndex]->timeScale); bool done = false; - for (int32 i = 0; i < _streams[_videoStreamIndex]->stts_count && !done; i++) { - for (int32 j = 0; j < _streams[_videoStreamIndex]->stts_data[i].count; j++) { - totalDuration = totalDuration.addFrames(_streams[_videoStreamIndex]->stts_data[i].duration); + for (int32 i = 0; i < _tracks[_videoTrackIndex]->timeToSampleCount && !done; i++) { + for (int32 j = 0; j < _tracks[_videoTrackIndex]->timeToSample[i].count; j++) { + totalDuration = totalDuration.addFrames(_tracks[_videoTrackIndex]->timeToSample[i].duration); if (totalDuration > time) { done = true; break; @@ -275,50 +203,16 @@ void QuickTimeDecoder::seekToTime(Audio::Timestamp time) { seekToFrame(frame); } -Codec *QuickTimeDecoder::createCodec(uint32 codecTag, byte bitsPerPixel) { - if (codecTag == MKTAG('c','v','i','d')) { - // Cinepak: As used by most Myst and all Riven videos as well as some Myst ME videos. "The Chief" videos also use this. - return new CinepakDecoder(bitsPerPixel); - } else if (codecTag == MKTAG('r','p','z','a')) { - // Apple Video ("Road Pizza"): Used by some Myst videos. - return new RPZADecoder(getWidth(), getHeight()); - } else if (codecTag == MKTAG('r','l','e',' ')) { - // QuickTime RLE: Used by some Myst ME videos. - return new QTRLEDecoder(getWidth(), getHeight(), bitsPerPixel); - } else if (codecTag == MKTAG('s','m','c',' ')) { - // Apple SMC: Used by some Myst videos. - return new SMCDecoder(getWidth(), getHeight()); - } else if (codecTag == MKTAG('S','V','Q','1')) { - // Sorenson Video 1: Used by some Myst ME videos. - warning("Sorenson Video 1 not yet supported"); - } else if (codecTag == MKTAG('S','V','Q','3')) { - // Sorenson Video 3: Used by some Myst ME videos. - warning("Sorenson Video 3 not yet supported"); - } else if (codecTag == MKTAG('j','p','e','g')) { - // Motion JPEG: Used by some Myst ME 10th Anniversary videos. - return new JPEGDecoder(); - } else if (codecTag == MKTAG('Q','k','B','k')) { - // CDToons: Used by most of the Broderbund games. - return new CDToonsDecoder(getWidth(), getHeight()); - } else { - warning("Unsupported codec \'%s\'", tag2str(codecTag)); - } - - return NULL; -} - void QuickTimeDecoder::startAudio() { - if (_audStream) { // No audio/audio not supported + if (_audStream) { updateAudioBuffer(); - g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &_audHandle, _audStream); - } + g_system->getMixer()->playStream(Audio::Mixer::kPlainSoundType, &_audHandle, _audStream, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO); + } // else no audio or the audio compression is not supported } void QuickTimeDecoder::stopAudio() { - if (_audStream) { + if (_audStream) g_system->getMixer()->stopHandle(_audHandle); - _audStream = NULL; // the mixer automatically frees the stream - } } void QuickTimeDecoder::pauseVideoIntern(bool pause) { @@ -327,14 +221,14 @@ void QuickTimeDecoder::pauseVideoIntern(bool pause) { } Codec *QuickTimeDecoder::findDefaultVideoCodec() const { - if (_videoStreamIndex < 0 || !_streams[_videoStreamIndex]->stsdEntryCount) + if (_videoTrackIndex < 0 || _tracks[_videoTrackIndex]->sampleDescs.empty()) return 0; - return _streams[_videoStreamIndex]->stsdEntries[0].videoCodec; + return ((VideoSampleDesc *)_tracks[_videoTrackIndex]->sampleDescs[0])->_videoCodec; } const Graphics::Surface *QuickTimeDecoder::decodeNextFrame() { - if (_videoStreamIndex < 0 || _curFrame >= (int32)getFrameCount() - 1) + if (_videoTrackIndex < 0 || _curFrame >= (int32)getFrameCount() - 1) return 0; if (_startTime == 0) @@ -350,28 +244,28 @@ const Graphics::Surface *QuickTimeDecoder::decodeNextFrame() { uint32 descId; Common::SeekableReadStream *frameData = getNextFramePacket(descId); - if (!frameData || !descId || descId > _streams[_videoStreamIndex]->stsdEntryCount) + if (!frameData || !descId || descId > _tracks[_videoTrackIndex]->sampleDescs.size()) return 0; // Find which video description entry we want - STSDEntry *entry = &_streams[_videoStreamIndex]->stsdEntries[descId - 1]; + VideoSampleDesc *entry = (VideoSampleDesc *)_tracks[_videoTrackIndex]->sampleDescs[descId - 1]; - if (!entry->videoCodec) + if (!entry->_videoCodec) return 0; - const Graphics::Surface *frame = entry->videoCodec->decodeImage(frameData); + const Graphics::Surface *frame = entry->_videoCodec->decodeImage(frameData); delete frameData; // Update the palette - if (entry->videoCodec->containsPalette()) { + if (entry->_videoCodec->containsPalette()) { // The codec itself contains a palette - if (entry->videoCodec->hasDirtyPalette()) { - _palette = entry->videoCodec->getPalette(); + if (entry->_videoCodec->hasDirtyPalette()) { + _palette = entry->_videoCodec->getPalette(); _dirtyPalette = true; } } else { // Check if the video description has been updated - byte *palette = entry->palette; + byte *palette = entry->_palette; if (palette != _palette) { _palette = palette; @@ -411,7 +305,7 @@ uint32 QuickTimeDecoder::getTimeToNextFrame() const { return 0; // Convert from the QuickTime rate base to 1000 - uint32 nextFrameStartTime = _nextFrameStartTime * 1000 / _streams[_videoStreamIndex]->time_scale; + uint32 nextFrameStartTime = _nextFrameStartTime * 1000 / _tracks[_videoTrackIndex]->timeScale; uint32 elapsedTime = getElapsedTime(); if (nextFrameStartTime <= elapsedTime) @@ -421,38 +315,7 @@ uint32 QuickTimeDecoder::getTimeToNextFrame() const { } bool QuickTimeDecoder::loadFile(const Common::String &filename) { - if (!_resFork->open(filename) || !_resFork->hasDataFork()) - return false; - - _foundMOOV = false; - _numStreams = 0; - _videoStreamIndex = _audioStreamIndex = -1; - _startTime = 0; - - MOVatom atom = { 0, 0, 0xffffffff }; - - if (_resFork->hasResFork()) { - // Search for a 'moov' resource - Common::MacResIDArray idArray = _resFork->getResIDArray(MKTAG('m','o','o','v')); - - if (!idArray.empty()) - _fd = _resFork->getResource(MKTAG('m','o','o','v'), idArray[0]); - - if (_fd) { - atom.size = _fd->size(); - if (readDefault(atom) < 0 || !_foundMOOV) - return false; - } - delete _fd; - - atom.type = 0; - atom.offset = 0; - atom.size = 0xffffffff; - } - - _fd = _resFork->getDataFork(); - - if (readDefault(atom) < 0 || !_foundMOOV) + if (!Common::QuickTimeParser::parseFile(filename)) return false; init(); @@ -460,77 +323,34 @@ bool QuickTimeDecoder::loadFile(const Common::String &filename) { } bool QuickTimeDecoder::loadStream(Common::SeekableReadStream *stream) { - _fd = stream; - _foundMOOV = false; - _numStreams = 0; - _videoStreamIndex = _audioStreamIndex = -1; - _startTime = 0; - - MOVatom atom = { 0, 0, 0xffffffff }; - - if (readDefault(atom) < 0 || !_foundMOOV) { - _fd = 0; + if (!Common::QuickTimeParser::parseStream(stream)) return false; - } init(); return true; } void QuickTimeDecoder::init() { - // Remove non-Video/Audio streams - for (uint32 i = 0; i < _numStreams;) { - if (_streams[i]->codec_type == CODEC_TYPE_MOV_OTHER) { - delete _streams[i]; - for (uint32 j = i + 1; j < _numStreams; j++) - _streams[j - 1] = _streams[j]; - _numStreams--; - } else - i++; - } + Audio::QuickTimeAudioDecoder::init(); - // Adjust time/duration - for (uint32 i = 0; i < _numStreams; i++) { - MOVStreamContext *sc = _streams[i]; - - if (!sc->time_rate) - sc->time_rate = 1; - - if (!sc->time_scale) - sc->time_scale = _timeScale; - - sc->duration /= sc->time_rate; - - if (sc->codec_type == CODEC_TYPE_VIDEO && _videoStreamIndex < 0) - _videoStreamIndex = i; - else if (sc->codec_type == CODEC_TYPE_AUDIO && _audioStreamIndex < 0) - _audioStreamIndex = i; - } - - // Initialize audio, if present - if (_audioStreamIndex >= 0) { - STSDEntry *entry = &_streams[_audioStreamIndex]->stsdEntries[0]; - - if (checkAudioCodecSupport(entry->codecTag)) { - _audStream = Audio::makeQueuingAudioStream(entry->sampleRate, entry->channels == 2); - _curAudioChunk = 0; - - // Make sure the bits per sample transfers to the sample size - if (entry->codecTag == MKTAG('r','a','w',' ') || entry->codecTag == MKTAG('t','w','o','s')) - _streams[_audioStreamIndex]->sample_size = (entry->bitsPerSample / 8) * entry->channels; + _videoTrackIndex = -1; + _startTime = 0; - startAudio(); - } + // Find video streams + for (uint32 i = 0; i < _tracks.size(); i++) + if (_tracks[i]->codecType == CODEC_TYPE_VIDEO && _videoTrackIndex < 0) + _videoTrackIndex = i; + // Start the audio codec if we've got one that we can handle + if (_audStream) { + startAudio(); _audioStartOffset = Audio::Timestamp(0); } // Initialize video, if present - if (_videoStreamIndex >= 0) { - for (uint32 i = 0; i < _streams[_videoStreamIndex]->stsdEntryCount; i++) { - STSDEntry *entry = &_streams[_videoStreamIndex]->stsdEntries[i]; - entry->videoCodec = createCodec(entry->codecTag, entry->bitsPerSample & 0x1F); - } + if (_videoTrackIndex >= 0) { + for (uint32 i = 0; i < _tracks[_videoTrackIndex]->sampleDescs.size(); i++) + ((VideoSampleDesc *)_tracks[_videoTrackIndex]->sampleDescs[i])->initCodec(); if (getScaleFactorX() != 1 || getScaleFactorY() != 1) { // We have to initialize the scaled surface @@ -540,739 +360,119 @@ void QuickTimeDecoder::init() { } } -void QuickTimeDecoder::initParseTable() { - static const ParseTable p[] = { - { &QuickTimeDecoder::readDefault, MKTAG('d','i','n','f') }, - { &QuickTimeDecoder::readLeaf, MKTAG('d','r','e','f') }, - { &QuickTimeDecoder::readDefault, MKTAG('e','d','t','s') }, - { &QuickTimeDecoder::readELST, MKTAG('e','l','s','t') }, - { &QuickTimeDecoder::readHDLR, MKTAG('h','d','l','r') }, - { &QuickTimeDecoder::readDefault, MKTAG('m','d','a','t') }, - { &QuickTimeDecoder::readMDHD, MKTAG('m','d','h','d') }, - { &QuickTimeDecoder::readDefault, MKTAG('m','d','i','a') }, - { &QuickTimeDecoder::readDefault, MKTAG('m','i','n','f') }, - { &QuickTimeDecoder::readMOOV, MKTAG('m','o','o','v') }, - { &QuickTimeDecoder::readMVHD, MKTAG('m','v','h','d') }, - { &QuickTimeDecoder::readLeaf, MKTAG('s','m','h','d') }, - { &QuickTimeDecoder::readDefault, MKTAG('s','t','b','l') }, - { &QuickTimeDecoder::readSTCO, MKTAG('s','t','c','o') }, - { &QuickTimeDecoder::readSTSC, MKTAG('s','t','s','c') }, - { &QuickTimeDecoder::readSTSD, MKTAG('s','t','s','d') }, - { &QuickTimeDecoder::readSTSS, MKTAG('s','t','s','s') }, - { &QuickTimeDecoder::readSTSZ, MKTAG('s','t','s','z') }, - { &QuickTimeDecoder::readSTTS, MKTAG('s','t','t','s') }, - { &QuickTimeDecoder::readTKHD, MKTAG('t','k','h','d') }, - { &QuickTimeDecoder::readTRAK, MKTAG('t','r','a','k') }, - { &QuickTimeDecoder::readLeaf, MKTAG('u','d','t','a') }, - { &QuickTimeDecoder::readLeaf, MKTAG('v','m','h','d') }, - { &QuickTimeDecoder::readCMOV, MKTAG('c','m','o','v') }, - { &QuickTimeDecoder::readWAVE, MKTAG('w','a','v','e') }, - { 0, 0 } - }; - - _parseTable = p; -} +Common::QuickTimeParser::SampleDesc *QuickTimeDecoder::readSampleDesc(Track *track, uint32 format) { + if (track->codecType == CODEC_TYPE_VIDEO) { + debug(0, "Video Codec FourCC: \'%s\'", tag2str(format)); -int QuickTimeDecoder::readDefault(MOVatom atom) { - uint32 total_size = 0; - MOVatom a; - int err = 0; + VideoSampleDesc *entry = new VideoSampleDesc(track, format); - a.offset = atom.offset; + _fd->readUint16BE(); // version + _fd->readUint16BE(); // revision level + _fd->readUint32BE(); // vendor + _fd->readUint32BE(); // temporal quality + _fd->readUint32BE(); // spacial quality - while(((total_size + 8) < atom.size) && !_fd->eos() && _fd->pos() < _fd->size() && !err) { - a.size = atom.size; - a.type = 0; + uint16 width = _fd->readUint16BE(); // width + uint16 height = _fd->readUint16BE(); // height - if (atom.size >= 8) { - a.size = _fd->readUint32BE(); - a.type = _fd->readUint32BE(); + // The width is most likely invalid for entries after the first one + // so only set the overall width if it is not zero here. + if (width) + track->width = width; - // Some QuickTime videos with resource forks have mdat chunks - // that are of size 0. Adjust it so it's the correct size. - if (a.type == MKTAG('m','d','a','t') && a.size == 0) - a.size = _fd->size(); - } + if (height) + track->height = height; - total_size += 8; - a.offset += 8; - debug(4, "type: %08x %.4s sz: %x %x %x", a.type, tag2str(a.type), a.size, atom.size, total_size); + _fd->readUint32BE(); // horiz resolution + _fd->readUint32BE(); // vert resolution + _fd->readUint32BE(); // data size, always 0 + _fd->readUint16BE(); // frames per samples - if (a.size == 1) { // 64 bit extended size - warning("64 bit extended size is not supported in QuickTime"); - return -1; + byte codecName[32]; + _fd->read(codecName, 32); // codec name, pascal string (FIXME: true for mp4?) + if (codecName[0] <= 31) { + memcpy(entry->_codecName, &codecName[1], codecName[0]); + entry->_codecName[codecName[0]] = 0; } - if (a.size == 0) { - a.size = atom.size - total_size; - if (a.size <= 8) - break; - } - - uint32 i = 0; - - for (; _parseTable[i].type != 0 && _parseTable[i].type != a.type; i++) - // empty; - - if (a.size < 8) - break; - - a.size -= 8; - - if (_parseTable[i].type == 0) { // skip leaf atoms data - debug(0, ">>> Skipped [%s]", tag2str(a.type)); - - _fd->seek(a.size, SEEK_CUR); - } else { - uint32 start_pos = _fd->pos(); - err = (this->*_parseTable[i].func)(a); - - uint32 left = a.size - _fd->pos() + start_pos; - - if (left > 0) // skip garbage at atom end - _fd->seek(left, SEEK_CUR); - } - - a.offset += a.size; - total_size += a.size; - } - - if (!err && total_size < atom.size) - _fd->seek(atom.size - total_size, SEEK_SET); - - return err; -} - -int QuickTimeDecoder::readLeaf(MOVatom atom) { - if (atom.size > 1) - _fd->seek(atom.size, SEEK_SET); - - return 0; -} - -int QuickTimeDecoder::readMOOV(MOVatom atom) { - if (readDefault(atom) < 0) - return -1; - - // We parsed the 'moov' atom, so we don't need anything else - _foundMOOV = true; - return 1; -} - -int QuickTimeDecoder::readCMOV(MOVatom atom) { -#ifdef USE_ZLIB - // Read in the dcom atom - _fd->readUint32BE(); - if (_fd->readUint32BE() != MKTAG('d','c','o','m')) - return -1; - if (_fd->readUint32BE() != MKTAG('z','l','i','b')) { - warning("Unknown cmov compression type"); - return -1; - } - - // Read in the cmvd atom - uint32 compressedSize = _fd->readUint32BE() - 12; - if (_fd->readUint32BE() != MKTAG('c','m','v','d')) - return -1; - uint32 uncompressedSize = _fd->readUint32BE(); - - // Read in data - byte *compressedData = (byte *)malloc(compressedSize); - _fd->read(compressedData, compressedSize); - - // Create uncompressed stream - byte *uncompressedData = (byte *)malloc(uncompressedSize); - - // Uncompress the data - unsigned long dstLen = uncompressedSize; - if (!Common::uncompress(uncompressedData, &dstLen, compressedData, compressedSize)) { - warning ("Could not uncompress cmov chunk"); - free(compressedData); - free(uncompressedData); - return -1; - } - - // Load data into a new MemoryReadStream and assign _fd to be that - Common::SeekableReadStream *oldStream = _fd; - _fd = new Common::MemoryReadStream(uncompressedData, uncompressedSize, DisposeAfterUse::YES); - - // Read the contents of the uncompressed data - MOVatom a = { MKTAG('m','o','o','v'), 0, uncompressedSize }; - int err = readDefault(a); - - // Assign the file handle back to the original handle - free(compressedData); - delete _fd; - _fd = oldStream; - - return err; -#else - warning ("zlib not found, cannot read QuickTime cmov atom"); - return -1; -#endif -} - -int QuickTimeDecoder::readMVHD(MOVatom atom) { - byte version = _fd->readByte(); // version - _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags - - if (version == 1) { - warning("QuickTime version 1"); - _fd->readUint32BE(); _fd->readUint32BE(); - _fd->readUint32BE(); _fd->readUint32BE(); - } else { - _fd->readUint32BE(); // creation time - _fd->readUint32BE(); // modification time - } - - _timeScale = _fd->readUint32BE(); // time scale - debug(0, "time scale = %i\n", _timeScale); - - // duration - _duration = (version == 1) ? (_fd->readUint32BE(), _fd->readUint32BE()) : _fd->readUint32BE(); - _fd->readUint32BE(); // preferred scale - - _fd->readUint16BE(); // preferred volume - - _fd->seek(10, SEEK_CUR); // reserved - - // We only need two values from the movie display matrix. Most of the values are just - // skipped. xMod and yMod are 16:16 fixed point numbers, the last part of the 3x3 matrix - // is 2:30. - uint32 xMod = _fd->readUint32BE(); - _fd->skip(12); - uint32 yMod = _fd->readUint32BE(); - _fd->skip(16); - - _scaleFactorX = Common::Rational(0x10000, xMod); - _scaleFactorY = Common::Rational(0x10000, yMod); - - _scaleFactorX.debugPrint(1, "readMVHD(): scaleFactorX ="); - _scaleFactorY.debugPrint(1, "readMVHD(): scaleFactorY ="); - - _fd->readUint32BE(); // preview time - _fd->readUint32BE(); // preview duration - _fd->readUint32BE(); // poster time - _fd->readUint32BE(); // selection time - _fd->readUint32BE(); // selection duration - _fd->readUint32BE(); // current time - _fd->readUint32BE(); // next track ID - - return 0; -} - -int QuickTimeDecoder::readTRAK(MOVatom atom) { - MOVStreamContext *sc = new MOVStreamContext(); - - if (!sc) - return -1; - - sc->codec_type = CODEC_TYPE_MOV_OTHER; - sc->start_time = 0; // XXX: check - _streams[_numStreams++] = sc; - - return readDefault(atom); -} - -int QuickTimeDecoder::readTKHD(MOVatom atom) { - MOVStreamContext *st = _streams[_numStreams - 1]; - byte version = _fd->readByte(); - - _fd->readByte(); _fd->readByte(); - _fd->readByte(); // flags - // - //MOV_TRACK_ENABLED 0x0001 - //MOV_TRACK_IN_MOVIE 0x0002 - //MOV_TRACK_IN_PREVIEW 0x0004 - //MOV_TRACK_IN_POSTER 0x0008 - // - - if (version == 1) { - _fd->readUint32BE(); _fd->readUint32BE(); - _fd->readUint32BE(); _fd->readUint32BE(); - } else { - _fd->readUint32BE(); // creation time - _fd->readUint32BE(); // modification time - } - - /* st->id = */_fd->readUint32BE(); // track id (NOT 0 !) - _fd->readUint32BE(); // reserved - //st->start_time = 0; // check - (version == 1) ? (_fd->readUint32BE(), _fd->readUint32BE()) : _fd->readUint32BE(); // highlevel (considering edits) duration in movie timebase - _fd->readUint32BE(); // reserved - _fd->readUint32BE(); // reserved - - _fd->readUint16BE(); // layer - _fd->readUint16BE(); // alternate group - _fd->readUint16BE(); // volume - _fd->readUint16BE(); // reserved - - // We only need the two values from the displacement matrix for a track. - // See readMVHD() for more information. - uint32 xMod = _fd->readUint32BE(); - _fd->skip(12); - uint32 yMod = _fd->readUint32BE(); - _fd->skip(16); - - st->scaleFactorX = Common::Rational(0x10000, xMod); - st->scaleFactorY = Common::Rational(0x10000, yMod); - - st->scaleFactorX.debugPrint(1, "readTKHD(): scaleFactorX ="); - st->scaleFactorY.debugPrint(1, "readTKHD(): scaleFactorY ="); - - // these are fixed-point, 16:16 - // uint32 tkWidth = _fd->readUint32BE() >> 16; // track width - // uint32 tkHeight = _fd->readUint32BE() >> 16; // track height - - return 0; -} - -// edit list atom -int QuickTimeDecoder::readELST(MOVatom atom) { - MOVStreamContext *st = _streams[_numStreams - 1]; - - _fd->readByte(); // version - _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags - - st->editCount = _fd->readUint32BE(); - st->editList = new EditListEntry[st->editCount]; - - debug(2, "Track %d edit list count: %d", _numStreams - 1, st->editCount); - - for (uint32 i = 0; i < st->editCount; i++){ - st->editList[i].trackDuration = _fd->readUint32BE(); - st->editList[i].mediaTime = _fd->readSint32BE(); - st->editList[i].mediaRate = Common::Rational(_fd->readUint32BE(), 0x10000); - debugN(3, "\tDuration = %d, Media Time = %d, ", st->editList[i].trackDuration, st->editList[i].mediaTime); - st->editList[i].mediaRate.debugPrint(3, "Media Rate ="); - } - - if (st->editCount != 1) - warning("Multiple edit list entries. Things may go awry"); - - return 0; -} - -int QuickTimeDecoder::readHDLR(MOVatom atom) { - MOVStreamContext *st = _streams[_numStreams - 1]; - - _fd->readByte(); // version - _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags - - // component type - uint32 ctype = _fd->readUint32LE(); - uint32 type = _fd->readUint32BE(); // component subtype - - debug(0, "ctype= %s (0x%08lx)", tag2str(ctype), (long)ctype); - debug(0, "stype= %s", tag2str(type)); - - if(ctype == MKTAG('m','h','l','r')) // MOV - debug(0, "MOV detected"); - else if(ctype == 0) { - warning("MP4 streams are not supported"); - return -1; - } - - if (type == MKTAG('v','i','d','e')) - st->codec_type = CODEC_TYPE_VIDEO; - else if (type == MKTAG('s','o','u','n')) - st->codec_type = CODEC_TYPE_AUDIO; - - _fd->readUint32BE(); // component manufacture - _fd->readUint32BE(); // component flags - _fd->readUint32BE(); // component flags mask - - if (atom.size <= 24) - return 0; // nothing left to read - - // .mov: PASCAL string - byte len = _fd->readByte(); - _fd->seek(len, SEEK_CUR); - - _fd->seek(atom.size - (_fd->pos() - atom.offset), SEEK_CUR); - - return 0; -} - -int QuickTimeDecoder::readMDHD(MOVatom atom) { - MOVStreamContext *st = _streams[_numStreams - 1]; - byte version = _fd->readByte(); - - if (version > 1) - return 1; // unsupported - - _fd->readByte(); _fd->readByte(); - _fd->readByte(); // flags - - if (version == 1) { - _fd->readUint32BE(); _fd->readUint32BE(); - _fd->readUint32BE(); _fd->readUint32BE(); - } else { - _fd->readUint32BE(); // creation time - _fd->readUint32BE(); // modification time - } - - st->time_scale = _fd->readUint32BE(); - st->duration = (version == 1) ? (_fd->readUint32BE(), _fd->readUint32BE()) : _fd->readUint32BE(); // duration - - _fd->readUint16BE(); // language - _fd->readUint16BE(); // quality - - return 0; -} - -int QuickTimeDecoder::readSTSD(MOVatom atom) { - MOVStreamContext *st = _streams[_numStreams - 1]; - - _fd->readByte(); // version - _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags - - st->stsdEntryCount = _fd->readUint32BE(); - st->stsdEntries = new STSDEntry[st->stsdEntryCount]; - - for (uint32 i = 0; i < st->stsdEntryCount; i++) { // Parsing Sample description table - STSDEntry *entry = &st->stsdEntries[i]; - - MOVatom a = { 0, 0, 0 }; - uint32 start_pos = _fd->pos(); - int size = _fd->readUint32BE(); // size - uint32 format = _fd->readUint32BE(); // data format - - _fd->readUint32BE(); // reserved - _fd->readUint16BE(); // reserved - _fd->readUint16BE(); // index - - debug(0, "size=%d 4CC= %s codec_type=%d", size, tag2str(format), st->codec_type); - - entry->codecTag = format; - - if (st->codec_type == CODEC_TYPE_VIDEO) { - debug(0, "Video Codec FourCC: \'%s\'", tag2str(format)); - - _fd->readUint16BE(); // version - _fd->readUint16BE(); // revision level - _fd->readUint32BE(); // vendor - _fd->readUint32BE(); // temporal quality - _fd->readUint32BE(); // spacial quality - - uint16 width = _fd->readUint16BE(); // width - uint16 height = _fd->readUint16BE(); // height - - // The width is most likely invalid for entries after the first one - // so only set the overall width if it is not zero here. - if (width) - st->width = width; - - if (height) - st->height = height; - - _fd->readUint32BE(); // horiz resolution - _fd->readUint32BE(); // vert resolution - _fd->readUint32BE(); // data size, always 0 - _fd->readUint16BE(); // frames per samples - - byte codec_name[32]; - _fd->read(codec_name, 32); // codec name, pascal string (FIXME: true for mp4?) - if (codec_name[0] <= 31) { - memcpy(entry->codecName, &codec_name[1], codec_name[0]); - entry->codecName[codec_name[0]] = 0; - } - - entry->bitsPerSample = _fd->readUint16BE(); // depth - entry->colorTableId = _fd->readUint16BE(); // colortable id - - // figure out the palette situation - byte colorDepth = entry->bitsPerSample & 0x1F; - bool colorGreyscale = (entry->bitsPerSample & 0x20) != 0; - - debug(0, "color depth: %d", colorDepth); - - // if the depth is 2, 4, or 8 bpp, file is palettized - if (colorDepth == 2 || colorDepth == 4 || colorDepth == 8) { - // Initialize the palette - entry->palette = new byte[256 * 3]; - memset(entry->palette, 0, 256 * 3); - - if (colorGreyscale) { - debug(0, "Greyscale palette"); - - // compute the greyscale palette - uint16 colorCount = 1 << colorDepth; - int16 colorIndex = 255; - byte colorDec = 256 / (colorCount - 1); - for (byte j = 0; j < colorCount; j++) { - entry->palette[j * 3] = entry->palette[j * 3 + 1] = entry->palette[j * 3 + 2] = colorIndex; - colorIndex -= colorDec; - if (colorIndex < 0) - colorIndex = 0; - } - } else if (entry->colorTableId & 0x08) { - // if flag bit 3 is set, use the default palette - //uint16 colorCount = 1 << colorDepth; - - warning("Predefined palette! %dbpp", colorDepth); - } else { - debug(0, "Palette from file"); - - // load the palette from the file - uint32 colorStart = _fd->readUint32BE(); - /* uint16 colorCount = */ _fd->readUint16BE(); - uint16 colorEnd = _fd->readUint16BE(); - for (uint32 j = colorStart; j <= colorEnd; j++) { - // each R, G, or B component is 16 bits; - // only use the top 8 bits; skip alpha bytes - // up front - _fd->readByte(); - _fd->readByte(); - entry->palette[j * 3] = _fd->readByte(); - _fd->readByte(); - entry->palette[j * 3 + 1] = _fd->readByte(); - _fd->readByte(); - entry->palette[j * 3 + 2] = _fd->readByte(); - _fd->readByte(); - } + entry->_bitsPerSample = _fd->readUint16BE(); // depth + entry->_colorTableId = _fd->readUint16BE(); // colortable id + + // figure out the palette situation + byte colorDepth = entry->_bitsPerSample & 0x1F; + bool colorGreyscale = (entry->_bitsPerSample & 0x20) != 0; + + debug(0, "color depth: %d", colorDepth); + + // if the depth is 2, 4, or 8 bpp, file is palettized + if (colorDepth == 2 || colorDepth == 4 || colorDepth == 8) { + // Initialize the palette + entry->_palette = new byte[256 * 3]; + memset(entry->_palette, 0, 256 * 3); + + if (colorGreyscale) { + debug(0, "Greyscale palette"); + + // compute the greyscale palette + uint16 colorCount = 1 << colorDepth; + int16 colorIndex = 255; + byte colorDec = 256 / (colorCount - 1); + for (byte j = 0; j < colorCount; j++) { + entry->_palette[j * 3] = entry->_palette[j * 3 + 1] = entry->_palette[j * 3 + 2] = colorIndex; + colorIndex -= colorDec; + if (colorIndex < 0) + colorIndex = 0; } - } - } else if (st->codec_type == CODEC_TYPE_AUDIO) { - debug(0, "Audio Codec FourCC: \'%s\'", tag2str(format)); - - uint16 stsdVersion = _fd->readUint16BE(); - _fd->readUint16BE(); // revision level - _fd->readUint32BE(); // vendor - - entry->channels = _fd->readUint16BE(); // channel count - entry->bitsPerSample = _fd->readUint16BE(); // sample size - - _fd->readUint16BE(); // compression id = 0 - _fd->readUint16BE(); // packet size = 0 - - entry->sampleRate = (_fd->readUint32BE() >> 16); - - debug(0, "stsd version =%d", stsdVersion); - if (stsdVersion == 0) { - // Not used, except in special cases. See below. - entry->samplesPerFrame = entry->bytesPerFrame = 0; - } else if (stsdVersion == 1) { - // Read QT version 1 fields. In version 0 these dont exist. - entry->samplesPerFrame = _fd->readUint32BE(); - debug(0, "stsd samples_per_frame =%d",entry->samplesPerFrame); - _fd->readUint32BE(); // bytes per packet - entry->bytesPerFrame = _fd->readUint32BE(); - debug(0, "stsd bytes_per_frame =%d", entry->bytesPerFrame); - _fd->readUint32BE(); // bytes per sample - } else { - warning("Unsupported QuickTime STSD audio version %d", stsdVersion); - return 1; - } + } else if (entry->_colorTableId & 0x08) { + // if flag bit 3 is set, use the default palette + //uint16 colorCount = 1 << colorDepth; - // Version 0 videos (such as the Riven ones) don't have this set, - // but we need it later on. Add it in here. - if (format == MKTAG('i','m','a','4')) { - entry->samplesPerFrame = 64; - entry->bytesPerFrame = 34 * entry->channels; + warning("Predefined palette! %dbpp", colorDepth); + } else { + debug(0, "Palette from file"); + + // load the palette from the file + uint32 colorStart = _fd->readUint32BE(); + /* uint16 colorCount = */ _fd->readUint16BE(); + uint16 colorEnd = _fd->readUint16BE(); + for (uint32 j = colorStart; j <= colorEnd; j++) { + // each R, G, or B component is 16 bits; + // only use the top 8 bits; skip alpha bytes + // up front + _fd->readByte(); + _fd->readByte(); + entry->_palette[j * 3] = _fd->readByte(); + _fd->readByte(); + entry->_palette[j * 3 + 1] = _fd->readByte(); + _fd->readByte(); + entry->_palette[j * 3 + 2] = _fd->readByte(); + _fd->readByte(); + } } - - if (entry->sampleRate == 0 && st->time_scale > 1) - entry->sampleRate = st->time_scale; - } else { - // other codec type, just skip (rtp, mp4s, tmcd ...) - _fd->seek(size - (_fd->pos() - start_pos), SEEK_CUR); } - // this will read extra atoms at the end (wave, alac, damr, avcC, SMI ...) - a.size = size - (_fd->pos() - start_pos); - if (a.size > 8) - readDefault(a); - else if (a.size > 0) - _fd->seek(a.size, SEEK_CUR); - } - - return 0; -} - -int QuickTimeDecoder::readSTSC(MOVatom atom) { - MOVStreamContext *st = _streams[_numStreams - 1]; - - _fd->readByte(); // version - _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags - - st->sample_to_chunk_sz = _fd->readUint32BE(); - - debug(0, "track[%i].stsc.entries = %i", _numStreams - 1, st->sample_to_chunk_sz); - - st->sample_to_chunk = new MOVstsc[st->sample_to_chunk_sz]; - - if (!st->sample_to_chunk) - return -1; - - for (uint32 i = 0; i < st->sample_to_chunk_sz; i++) { - st->sample_to_chunk[i].first = _fd->readUint32BE() - 1; - st->sample_to_chunk[i].count = _fd->readUint32BE(); - st->sample_to_chunk[i].id = _fd->readUint32BE(); - //warning("Sample to Chunk[%d]: First = %d, Count = %d", i, st->sample_to_chunk[i].first, st->sample_to_chunk[i].count); + return entry; } - return 0; -} - -int QuickTimeDecoder::readSTSS(MOVatom atom) { - MOVStreamContext *st = _streams[_numStreams - 1]; - - _fd->readByte(); // version - _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags - - st->keyframe_count = _fd->readUint32BE(); - - debug(0, "keyframe_count = %d", st->keyframe_count); - - st->keyframes = new uint32[st->keyframe_count]; - - if (!st->keyframes) - return -1; - - for (uint32 i = 0; i < st->keyframe_count; i++) { - st->keyframes[i] = _fd->readUint32BE() - 1; // Adjust here, the frames are based on 1 - debug(6, "keyframes[%d] = %d", i, st->keyframes[i]); - - } - return 0; -} - -int QuickTimeDecoder::readSTSZ(MOVatom atom) { - MOVStreamContext *st = _streams[_numStreams - 1]; - - _fd->readByte(); // version - _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags - - st->sample_size = _fd->readUint32BE(); - st->sample_count = _fd->readUint32BE(); - - debug(5, "sample_size = %d sample_count = %d", st->sample_size, st->sample_count); - - if (st->sample_size) - return 0; // there isn't any table following - - st->sample_sizes = new uint32[st->sample_count]; - - if (!st->sample_sizes) - return -1; - - for(uint32 i = 0; i < st->sample_count; i++) { - st->sample_sizes[i] = _fd->readUint32BE(); - debug(6, "sample_sizes[%d] = %d", i, st->sample_sizes[i]); - } - - return 0; -} - -static uint32 ff_gcd(uint32 a, uint32 b) { - return b ? ff_gcd(b, a % b) : a; -} - -int QuickTimeDecoder::readSTTS(MOVatom atom) { - MOVStreamContext *st = _streams[_numStreams - 1]; - uint32 duration = 0; - uint32 total_sample_count = 0; - - _fd->readByte(); // version - _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags - - st->stts_count = _fd->readUint32BE(); - st->stts_data = new MOVstts[st->stts_count]; - - debug(0, "track[%i].stts.entries = %i", _numStreams - 1, st->stts_count); - - st->time_rate = 0; - - for (int32 i = 0; i < st->stts_count; i++) { - int sample_duration; - int sample_count; - - sample_count = _fd->readUint32BE(); - sample_duration = _fd->readUint32BE(); - st->stts_data[i].count = sample_count; - st->stts_data[i].duration = sample_duration; - - st->time_rate = ff_gcd(st->time_rate, sample_duration); - - debug(0, "sample_count=%d, sample_duration=%d", sample_count, sample_duration); - - duration += sample_duration * sample_count; - total_sample_count += sample_count; - } - - st->nb_frames = total_sample_count; - - if (duration) - st->duration = duration; - - return 0; -} - -int QuickTimeDecoder::readSTCO(MOVatom atom) { - MOVStreamContext *st = _streams[_numStreams - 1]; - - _fd->readByte(); // version - _fd->readByte(); _fd->readByte(); _fd->readByte(); // flags - - st->chunk_count = _fd->readUint32BE(); - st->chunk_offsets = new uint32[st->chunk_count]; - - if (!st->chunk_offsets) - return -1; - - for (uint32 i = 0; i < st->chunk_count; i++) { - // WORKAROUND/HACK: The offsets in Riven videos (ones inside the Mohawk archives themselves) - // have offsets relative to the archive and not the video. This is quite nasty. We subtract - // the initial offset of the stream to get the correct value inside of the stream. - st->chunk_offsets[i] = _fd->readUint32BE() - _beginOffset; - } - - return 0; -} - -int QuickTimeDecoder::readWAVE(MOVatom atom) { - if (_numStreams < 1) - return 0; - - MOVStreamContext *st = _streams[_numStreams - 1]; - - if (atom.size > (1 << 30)) - return -1; - - if (st->stsdEntries[0].codecTag == MKTAG('Q','D','M','2')) // Read extradata for QDM2 - st->extradata = _fd->readStream(atom.size - 8); - else if (atom.size > 8) - return readDefault(atom); - else - _fd->skip(atom.size); - - return 0; + // Pass it on up + return Audio::QuickTimeAudioDecoder::readSampleDesc(track, format); } void QuickTimeDecoder::close() { stopAudio(); - for (uint32 i = 0; i < _numStreams; i++) - delete _streams[i]; - - delete _fd; - _fd = 0; - if (_scaledSurface) { _scaledSurface->free(); delete _scaledSurface; _scaledSurface = 0; } - // The audio stream is deleted automatically - _audStream = NULL; - + Common::QuickTimeParser::close(); SeekableVideoDecoder::reset(); } Common::SeekableReadStream *QuickTimeDecoder::getNextFramePacket(uint32 &descId) { - if (_videoStreamIndex < 0) + if (_videoTrackIndex < 0) return NULL; // First, we have to track down which chunk holds the sample and which sample in the chunk contains the frame we are looking for. @@ -1280,22 +480,22 @@ Common::SeekableReadStream *QuickTimeDecoder::getNextFramePacket(uint32 &descId) int32 sampleInChunk = 0; int32 actualChunk = -1; - for (uint32 i = 0; i < _streams[_videoStreamIndex]->chunk_count; i++) { + for (uint32 i = 0; i < _tracks[_videoTrackIndex]->chunkCount; i++) { int32 sampleToChunkIndex = -1; - for (uint32 j = 0; j < _streams[_videoStreamIndex]->sample_to_chunk_sz; j++) - if (i >= _streams[_videoStreamIndex]->sample_to_chunk[j].first) + for (uint32 j = 0; j < _tracks[_videoTrackIndex]->sampleToChunkCount; j++) + if (i >= _tracks[_videoTrackIndex]->sampleToChunk[j].first) sampleToChunkIndex = j; if (sampleToChunkIndex < 0) error("This chunk (%d) is imaginary", sampleToChunkIndex); - totalSampleCount += _streams[_videoStreamIndex]->sample_to_chunk[sampleToChunkIndex].count; + totalSampleCount += _tracks[_videoTrackIndex]->sampleToChunk[sampleToChunkIndex].count; if (totalSampleCount > getCurFrame()) { actualChunk = i; - descId = _streams[_videoStreamIndex]->sample_to_chunk[sampleToChunkIndex].id; - sampleInChunk = _streams[_videoStreamIndex]->sample_to_chunk[sampleToChunkIndex].count - totalSampleCount + getCurFrame(); + descId = _tracks[_videoTrackIndex]->sampleToChunk[sampleToChunkIndex].id; + sampleInChunk = _tracks[_videoTrackIndex]->sampleToChunk[sampleToChunkIndex].count - totalSampleCount + getCurFrame(); break; } } @@ -1306,126 +506,23 @@ Common::SeekableReadStream *QuickTimeDecoder::getNextFramePacket(uint32 &descId) } // Next seek to that frame - _fd->seek(_streams[_videoStreamIndex]->chunk_offsets[actualChunk]); + _fd->seek(_tracks[_videoTrackIndex]->chunkOffsets[actualChunk]); // Then, if the chunk holds more than one frame, seek to where the frame we want is located for (int32 i = getCurFrame() - sampleInChunk; i < getCurFrame(); i++) { - if (_streams[_videoStreamIndex]->sample_size != 0) - _fd->skip(_streams[_videoStreamIndex]->sample_size); + if (_tracks[_videoTrackIndex]->sampleSize != 0) + _fd->skip(_tracks[_videoTrackIndex]->sampleSize); else - _fd->skip(_streams[_videoStreamIndex]->sample_sizes[i]); + _fd->skip(_tracks[_videoTrackIndex]->sampleSizes[i]); } // Finally, read in the raw data for the frame - //printf ("Frame Data[%d]: Offset = %d, Size = %d\n", getCurFrame(), _fd->pos(), _streams[_videoStreamIndex]->sample_sizes[getCurFrame()]); + //printf ("Frame Data[%d]: Offset = %d, Size = %d\n", getCurFrame(), _fd->pos(), _tracks[_videoTrackIndex]->sampleSizes[getCurFrame()]); - if (_streams[_videoStreamIndex]->sample_size != 0) - return _fd->readStream(_streams[_videoStreamIndex]->sample_size); + if (_tracks[_videoTrackIndex]->sampleSize != 0) + return _fd->readStream(_tracks[_videoTrackIndex]->sampleSize); - return _fd->readStream(_streams[_videoStreamIndex]->sample_sizes[getCurFrame()]); -} - -bool QuickTimeDecoder::checkAudioCodecSupport(uint32 tag) { - // Check if the codec is a supported codec - if (tag == MKTAG('t','w','o','s') || tag == MKTAG('r','a','w',' ') || tag == MKTAG('i','m','a','4')) - return true; - -#ifdef VIDEO_CODECS_QDM2_H - if (tag == MKTAG('Q','D','M','2')) - return true; -#endif - - warning("Audio Codec Not Supported: \'%s\'", tag2str(tag)); - - return false; -} - -Audio::AudioStream *QuickTimeDecoder::createAudioStream(Common::SeekableReadStream *stream) { - if (!stream || _audioStreamIndex < 0) - return NULL; - - STSDEntry *entry = &_streams[_audioStreamIndex]->stsdEntries[0]; - - if (entry->codecTag == MKTAG('t','w','o','s') || entry->codecTag == MKTAG('r','a','w',' ')) { - // Fortunately, most of the audio used in Myst videos is raw... - uint16 flags = 0; - if (entry->codecTag == MKTAG('r','a','w',' ')) - flags |= Audio::FLAG_UNSIGNED; - if (entry->channels == 2) - flags |= Audio::FLAG_STEREO; - if (entry->bitsPerSample == 16) - flags |= Audio::FLAG_16BITS; - uint32 dataSize = stream->size(); - byte *data = (byte *)malloc(dataSize); - stream->read(data, dataSize); - delete stream; - return Audio::makeRawStream(data, dataSize, entry->sampleRate, flags); - } else if (entry->codecTag == MKTAG('i','m','a','4')) { - // Riven uses this codec (as do some Myst ME videos) - return Audio::makeADPCMStream(stream, DisposeAfterUse::YES, stream->size(), Audio::kADPCMApple, entry->sampleRate, entry->channels, 34); -#ifdef VIDEO_CODECS_QDM2_H - } else if (entry->codecTag == MKTAG('Q','D','M','2')) { - // Several Myst ME videos use this codec - return makeQDM2Stream(stream, _streams[_audioStreamIndex]->extradata); -#endif - } - - error("Unsupported audio codec"); - - return NULL; -} - -uint32 QuickTimeDecoder::getAudioChunkSampleCount(uint chunk) { - if (_audioStreamIndex < 0) - return 0; - - uint32 sampleCount = 0; - - for (uint32 j = 0; j < _streams[_audioStreamIndex]->sample_to_chunk_sz; j++) - if (chunk >= _streams[_audioStreamIndex]->sample_to_chunk[j].first) - sampleCount = _streams[_audioStreamIndex]->sample_to_chunk[j].count; - - return sampleCount; -} - -void QuickTimeDecoder::readNextAudioChunk() { - STSDEntry *entry = &_streams[_audioStreamIndex]->stsdEntries[0]; - Common::MemoryWriteStreamDynamic *wStream = new Common::MemoryWriteStreamDynamic(); - - _fd->seek(_streams[_audioStreamIndex]->chunk_offsets[_curAudioChunk]); - - // First, we have to get the sample count - uint32 sampleCount = getAudioChunkSampleCount(_curAudioChunk); - assert(sampleCount); - - // Then calculate the right sizes - while (sampleCount > 0) { - uint32 samples = 0, size = 0; - - if (entry->samplesPerFrame >= 160) { - samples = entry->samplesPerFrame; - size = entry->bytesPerFrame; - } else if (entry->samplesPerFrame > 1) { - samples = MIN<uint32>((1024 / entry->samplesPerFrame) * entry->samplesPerFrame, sampleCount); - size = (samples / entry->samplesPerFrame) * entry->bytesPerFrame; - } else { - samples = MIN<uint32>(1024, sampleCount); - size = samples * _streams[_audioStreamIndex]->sample_size; - } - - // Now, we read in the data for this data and output it - byte *data = (byte *)malloc(size); - _fd->read(data, size); - wStream->write(data, size); - free(data); - sampleCount -= samples; - } - - // Now queue the buffer - _audStream->queueAudioStream(createAudioStream(new Common::MemoryReadStream(wStream->getData(), wStream->size(), DisposeAfterUse::YES))); - delete wStream; - - _curAudioChunk++; + return _fd->readStream(_tracks[_videoTrackIndex]->sampleSizes[getCurFrame()]); } void QuickTimeDecoder::updateAudioBuffer() { @@ -1434,22 +531,25 @@ void QuickTimeDecoder::updateAudioBuffer() { uint32 numberOfChunksNeeded = 0; - if (_curFrame == (int32)_streams[_videoStreamIndex]->nb_frames - 1) { + if (_videoTrackIndex < 0 || _curFrame == (int32)_tracks[_videoTrackIndex]->frameCount - 1) { + // If we have no video, there's nothing to base our buffer against + // However, one must ask why a QuickTimeDecoder is being used instead of the nice makeQuickTimeStream() function + // If we're on the last frame, make sure all audio remaining is buffered - numberOfChunksNeeded = _streams[_audioStreamIndex]->chunk_count; + numberOfChunksNeeded = _tracks[_audioTrackIndex]->chunkCount; } else { - STSDEntry *entry = &_streams[_audioStreamIndex]->stsdEntries[0]; + Audio::QuickTimeAudioDecoder::AudioSampleDesc *entry = (Audio::QuickTimeAudioDecoder::AudioSampleDesc *)_tracks[_audioTrackIndex]->sampleDescs[0]; // Calculate the amount of chunks we need in memory until the next frame uint32 timeToNextFrame = getTimeToNextFrame(); uint32 timeFilled = 0; uint32 curAudioChunk = _curAudioChunk - _audStream->numQueuedStreams(); - for (; timeFilled < timeToNextFrame && curAudioChunk < _streams[_audioStreamIndex]->chunk_count; numberOfChunksNeeded++, curAudioChunk++) { - uint32 sampleCount = getAudioChunkSampleCount(curAudioChunk); + for (; timeFilled < timeToNextFrame && curAudioChunk < _tracks[_audioTrackIndex]->chunkCount; numberOfChunksNeeded++, curAudioChunk++) { + uint32 sampleCount = entry->getAudioChunkSampleCount(curAudioChunk); assert(sampleCount); - timeFilled += sampleCount * 1000 / entry->sampleRate; + timeFilled += sampleCount * 1000 / entry->_sampleRate; } // Add a couple extra to ensure we don't underrun @@ -1457,64 +557,60 @@ void QuickTimeDecoder::updateAudioBuffer() { } // Keep three streams in buffer so that if/when the first two end, it goes right into the next - while (_audStream->numQueuedStreams() < numberOfChunksNeeded && _curAudioChunk < _streams[_audioStreamIndex]->chunk_count) - readNextAudioChunk(); + while (_audStream->numQueuedStreams() < numberOfChunksNeeded && _curAudioChunk < _tracks[_audioTrackIndex]->chunkCount) + queueNextAudioChunk(); } -QuickTimeDecoder::STSDEntry::STSDEntry() { - codecTag = 0; - bitsPerSample = 0; - memset(codecName, 0, 32); - colorTableId = 0; - palette = 0; - videoCodec = 0; - channels = 0; - sampleRate = 0; - samplesPerFrame = 0; - bytesPerFrame = 0; -} - -QuickTimeDecoder::STSDEntry::~STSDEntry() { - delete[] palette; - delete videoCodec; +QuickTimeDecoder::VideoSampleDesc::VideoSampleDesc(Common::QuickTimeParser::Track *parentTrack, uint32 codecTag) : Common::QuickTimeParser::SampleDesc(parentTrack, codecTag) { + memset(_codecName, 0, 32); + _colorTableId = 0; + _palette = 0; + _videoCodec = 0; + _bitsPerSample = 0; } -QuickTimeDecoder::MOVStreamContext::MOVStreamContext() { - chunk_count = 0; - chunk_offsets = 0; - stts_count = 0; - stts_data = 0; - sample_to_chunk_sz = 0; - sample_to_chunk = 0; - sample_size = 0; - sample_count = 0; - sample_sizes = 0; - keyframe_count = 0; - keyframes = 0; - time_scale = 0; - time_rate = 0; - width = 0; - height = 0; - codec_type = CODEC_TYPE_MOV_OTHER; - stsdEntryCount = 0; - stsdEntries = 0; - editCount = 0; - editList = 0; - extradata = 0; - nb_frames = 0; - duration = 0; - start_time = 0; +QuickTimeDecoder::VideoSampleDesc::~VideoSampleDesc() { + delete[] _palette; + delete _videoCodec; } -QuickTimeDecoder::MOVStreamContext::~MOVStreamContext() { - delete[] chunk_offsets; - delete[] stts_data; - delete[] sample_to_chunk; - delete[] sample_sizes; - delete[] keyframes; - delete[] stsdEntries; - delete[] editList; - delete extradata; +void QuickTimeDecoder::VideoSampleDesc::initCodec() { + switch (_codecTag) { + case MKTAG('c','v','i','d'): + // Cinepak: As used by most Myst and all Riven videos as well as some Myst ME videos. "The Chief" videos also use this. + _videoCodec = new CinepakDecoder(_bitsPerSample & 0x1f); + break; + case MKTAG('r','p','z','a'): + // Apple Video ("Road Pizza"): Used by some Myst videos. + _videoCodec = new RPZADecoder(_parentTrack->width, _parentTrack->height); + break; + case MKTAG('r','l','e',' '): + // QuickTime RLE: Used by some Myst ME videos. + _videoCodec = new QTRLEDecoder(_parentTrack->width, _parentTrack->height, _bitsPerSample & 0x1f); + break; + case MKTAG('s','m','c',' '): + // Apple SMC: Used by some Myst videos. + _videoCodec = new SMCDecoder(_parentTrack->width, _parentTrack->height); + break; + case MKTAG('S','V','Q','1'): + // Sorenson Video 1: Used by some Myst ME videos. + warning("Sorenson Video 1 not yet supported"); + break; + case MKTAG('S','V','Q','3'): + // Sorenson Video 3: Used by some Myst ME videos. + warning("Sorenson Video 3 not yet supported"); + break; + case MKTAG('j','p','e','g'): + // Motion JPEG: Used by some Myst ME 10th Anniversary videos. + _videoCodec = new JPEGDecoder(); + break; + case MKTAG('Q','k','B','k'): + // CDToons: Used by most of the Broderbund games. + _videoCodec = new CDToonsDecoder(_parentTrack->width, _parentTrack->height); + break; + default: + warning("Unsupported codec \'%s\'", tag2str(_codecTag)); + } } } // End of namespace Video diff --git a/video/qt_decoder.h b/video/qt_decoder.h index cf08349d91..b51fd043e7 100644 --- a/video/qt_decoder.h +++ b/video/qt_decoder.h @@ -21,7 +21,7 @@ */ // -// Heavily based on ffmpeg code. +// Partially based on ffmpeg code. // // Copyright (c) 2001 Fabrice Bellard. // First version by Francois Revol revol@free.fr @@ -37,21 +37,10 @@ #include "video/video_decoder.h" #include "audio/mixer.h" -#include "audio/timestamp.h" +#include "audio/decoders/quicktime_intern.h" namespace Common { -class MacResManager; -class SeekableReadStream; -} - -namespace Audio { -class AudioStream; -class QueuingAudioStream; -} - -namespace Graphics { -struct PixelFormat; -struct Surface; + class Rational; } namespace Video { @@ -65,7 +54,7 @@ class Codec; * - mohawk * - sci */ -class QuickTimeDecoder : public SeekableVideoDecoder { +class QuickTimeDecoder : public SeekableVideoDecoder, public Audio::QuickTimeAudioDecoder { public: QuickTimeDecoder(); virtual ~QuickTimeDecoder(); @@ -112,14 +101,7 @@ public: const byte *getPalette() { _dirtyPalette = false; return _palette; } bool hasDirtyPalette() const { return _dirtyPalette; } - /** - * Set the beginning offset of the video so we can modify the offsets in the stco - * atom of videos inside the Mohawk archives - * @param the beginning offset of the video - */ - void setChunkBeginOffset(uint32 offset) { _beginOffset = offset; } - - bool isVideoLoaded() const { return _fd != 0; } + bool isVideoLoaded() const { return isOpen(); } const Graphics::Surface *decodeNextFrame(); bool endOfVideo() const; uint32 getElapsedTime() const; @@ -131,162 +113,51 @@ public: void seekToTime(Audio::Timestamp time); uint32 getDuration() const { return _duration * 1000 / _timeScale; } -private: - // This is the file handle from which data is read from. It can be the actual file handle or a decompressed stream. - Common::SeekableReadStream *_fd; - - struct MOVatom { - uint32 type; - uint32 offset; - uint32 size; - }; - - struct ParseTable { - int (QuickTimeDecoder::*func)(MOVatom atom); - uint32 type; - }; - - struct MOVstts { - int count; - int duration; - }; +protected: + class VideoSampleDesc : public Common::QuickTimeParser::SampleDesc { + public: + VideoSampleDesc(Common::QuickTimeParser::Track *parentTrack, uint32 codecTag); + ~VideoSampleDesc(); - struct MOVstsc { - uint32 first; - uint32 count; - uint32 id; - }; + void initCodec(); - struct EditListEntry { - uint32 trackDuration; - int32 mediaTime; - Common::Rational mediaRate; + // TODO: Make private in the long run + uint16 _bitsPerSample; + char _codecName[32]; + uint16 _colorTableId; + byte *_palette; + Codec *_videoCodec; }; - struct STSDEntry { - STSDEntry(); - ~STSDEntry(); - - uint32 codecTag; - uint16 bitsPerSample; + Common::QuickTimeParser::SampleDesc *readSampleDesc(Track *track, uint32 format); - // Video - char codecName[32]; - uint16 colorTableId; - byte *palette; - Codec *videoCodec; - - // Audio - uint16 channels; - uint32 sampleRate; - uint32 samplesPerFrame; - uint32 bytesPerFrame; - }; - - enum CodecType { - CODEC_TYPE_MOV_OTHER, - CODEC_TYPE_VIDEO, - CODEC_TYPE_AUDIO - }; - - struct MOVStreamContext { - MOVStreamContext(); - ~MOVStreamContext(); - - uint32 chunk_count; - uint32 *chunk_offsets; - int stts_count; - MOVstts *stts_data; - uint32 sample_to_chunk_sz; - MOVstsc *sample_to_chunk; - uint32 sample_size; - uint32 sample_count; - uint32 *sample_sizes; - uint32 keyframe_count; - uint32 *keyframes; - int32 time_scale; - int time_rate; - - uint16 width; - uint16 height; - CodecType codec_type; - - uint32 stsdEntryCount; - STSDEntry *stsdEntries; - - uint32 editCount; - EditListEntry *editList; - - Common::SeekableReadStream *extradata; - - uint32 nb_frames; - uint32 duration; - uint32 start_time; - Common::Rational scaleFactorX; - Common::Rational scaleFactorY; - }; - - const ParseTable *_parseTable; - bool _foundMOOV; - uint32 _timeScale; - uint32 _duration; - uint32 _numStreams; - Common::Rational _scaleFactorX; - Common::Rational _scaleFactorY; - MOVStreamContext *_streams[20]; - const byte *_palette; - bool _dirtyPalette; - uint32 _beginOffset; - Common::MacResManager *_resFork; - - void initParseTable(); - Audio::AudioStream *createAudioStream(Common::SeekableReadStream *stream); - bool checkAudioCodecSupport(uint32 tag); +private: Common::SeekableReadStream *getNextFramePacket(uint32 &descId); uint32 getFrameDuration(); void init(); - Audio::QueuingAudioStream *_audStream; void startAudio(); void stopAudio(); void updateAudioBuffer(); void readNextAudioChunk(); - uint32 getAudioChunkSampleCount(uint chunk); - int8 _audioStreamIndex; - uint _curAudioChunk; Audio::SoundHandle _audHandle; Audio::Timestamp _audioStartOffset; Codec *createCodec(uint32 codecTag, byte bitsPerPixel); Codec *findDefaultVideoCodec() const; uint32 _nextFrameStartTime; - int8 _videoStreamIndex; + int _videoTrackIndex; uint32 findKeyFrame(uint32 frame) const; + bool _dirtyPalette; + const byte *_palette; + Graphics::Surface *_scaledSurface; const Graphics::Surface *scaleSurface(const Graphics::Surface *frame); Common::Rational getScaleFactorX() const; Common::Rational getScaleFactorY() const; void pauseVideoIntern(bool pause); - - int readDefault(MOVatom atom); - int readLeaf(MOVatom atom); - int readELST(MOVatom atom); - int readHDLR(MOVatom atom); - int readMDHD(MOVatom atom); - int readMOOV(MOVatom atom); - int readMVHD(MOVatom atom); - int readTKHD(MOVatom atom); - int readTRAK(MOVatom atom); - int readSTCO(MOVatom atom); - int readSTSC(MOVatom atom); - int readSTSD(MOVatom atom); - int readSTSS(MOVatom atom); - int readSTSZ(MOVatom atom); - int readSTTS(MOVatom atom); - int readCMOV(MOVatom atom); - int readWAVE(MOVatom atom); }; } // End of namespace Video |