diff options
113 files changed, 2929 insertions, 1237 deletions
@@ -19,7 +19,7 @@ Table of Contents: * 3.2 Datafiles * 3.3 Multi-CD games notes * 3.4 Known Problems - * 3.5 Beneath a Steel Sky notes + * 3.5 Beneath a Steel Sky notes * 3.6 Broken Sword games notes * * 3.6.1 Broken Sword * * 3.6.2 Broken Sword II @@ -30,12 +30,12 @@ Table of Contents: * 3.9 Dragon History notes * 3.10 Flight of the Amazon Queen notes * 3.11 Gobliiins notes - * 3.12 Inherit the Earth: Quest for the Orb notes + * 3.12 Inherit the Earth: Quest for the Orb notes * 3.13 Maniac Mansion Apple II/NES notes * 3.14 Mickey's Space Adventure notes * 3.15 Nippon Safes Inc. Amiga notes * 3.16 Simon the Sorcerer notes - * 3.17 The Curse of Monkey Island notes + * 3.17 The Curse of Monkey Island notes * 3.18 The Feeble Files notes * 3.19 The Legend of Kyrandia notes * 3.20 Troll's Tale notes @@ -43,8 +43,8 @@ Table of Contents: * 3.22 Sierra AGI games: Predictive Input Dialog notes * 3.23 Sierra SCI games: Simultaneous speech and subtitles * 3.24 Zork games notes - * 3.25 Commodore64 games notes - * 3.26 Macintosh games notes + * 3.25 Commodore64 games notes + * 3.26 Macintosh games notes 4.0) Supported Platforms 5.0) Running ScummVM * 5.1 Command Line Options @@ -1324,7 +1324,7 @@ arguments -- see the next section. --filtering Force filtered graphics mode --no-filtering Force unfiltered graphics mode - + --gui-theme=THEME Select GUI theme (default, modern, classic) --themepath=PATH Path to where GUI themes are stored --list-themes Display list of all usable GUI themes @@ -2653,18 +2653,12 @@ debug messages (see <https://technet.microsoft.com/en-us/sysinternals/debugview. Windows: - * Dev-C++ - Please refer to: - <http://wiki.scummvm.org/index.php/Compiling_ScummVM/DevCPP> * MinGW Please refer to: <http://wiki.scummvm.org/index.php/Compiling_ScummVM/MinGW> * Visual Studio (MSVC) Please refer to: <http://wiki.scummvm.org/index.php/Compiling_ScummVM/Visual_Studio> - * Windows CE/Mobile - Please refer to: - <http://wiki.scummvm.org/index.php/Compiling_ScummVM/Windows_CE> Linux: * GCC @@ -2673,7 +2667,7 @@ debug messages (see <https://technet.microsoft.com/en-us/sysinternals/debugview. AmigaOS4: Please refer to: - <http://wiki.scummvm.org/index.php/AmigaOS> + <http://wiki.scummvm.org/index.php/AmigaOS4> Apple iPhone: Please refer to: @@ -2714,10 +2708,6 @@ debug messages (see <https://technet.microsoft.com/en-us/sysinternals/debugview. Please refer to: <http://wiki.scummvm.org/index.php/Compiling_ScummVM/Maemo> - Nintendo DS: - Please refer to: - <http://wiki.scummvm.org/index.php/Compiling_ScummVM/Nintendo_DS> - Nintendo Wii and Gamecube: Please refer to: <http://wiki.scummvm.org/index.php/Compiling_ScummVM/Wii> @@ -2750,7 +2740,7 @@ debug messages (see <https://technet.microsoft.com/en-us/sysinternals/debugview. ----- ------- Please refer to our extensive Credits list at: - <http://www.scummvm.org/credits/> + <http://www.scummvm.org/credits> ------------------------------------------------------------------------ diff --git a/backends/networking/sdl_net/localwebserver.h b/backends/networking/sdl_net/localwebserver.h index 5c94d6d091..243db11fb4 100644 --- a/backends/networking/sdl_net/localwebserver.h +++ b/backends/networking/sdl_net/localwebserver.h @@ -59,7 +59,7 @@ class LocalWebserver : public Common::Singleton<LocalWebserver> { SDLNet_SocketSet _set; TCPsocket _serverSocket; Client _client[MAX_CONNECTIONS]; - int _clients; + uint32 _clients; bool _timerStarted, _stopOnIdle, _minimalMode; Common::HashMap<Common::String, BaseHandler*> _pathHandlers; BaseHandler *_defaultHandler; diff --git a/backends/networking/sdl_net/reader.cpp b/backends/networking/sdl_net/reader.cpp index 27254dee4f..46fb21a47a 100644 --- a/backends/networking/sdl_net/reader.cpp +++ b/backends/networking/sdl_net/reader.cpp @@ -350,7 +350,7 @@ bool Reader::readOneByteInStream(Common::WriteStream *stream, const Common::Stri } byte Reader::readOne() { - byte b; + byte b = 0; _content->read(&b, 1); --_availableBytes; --_bytesLeft; diff --git a/backends/platform/dc/dc-fs.cpp b/backends/platform/dc/dc-fs.cpp index 4bd7e5a777..1cc7b56710 100644 --- a/backends/platform/dc/dc-fs.cpp +++ b/backends/platform/dc/dc-fs.cpp @@ -57,7 +57,7 @@ public: virtual Common::SeekableReadStream *createReadStream(); virtual Common::WriteStream *createWriteStream() { return 0; } - virtual bool create(bool isDirectory) { return false; } + virtual bool create(bool isDirectoryFlag) { return false; } static AbstractFSNode *makeFileNodePath(const Common::String &path); }; diff --git a/common/macresman.h b/common/macresman.h index 05b2a875f4..1be825b7b4 100644 --- a/common/macresman.h +++ b/common/macresman.h @@ -176,6 +176,11 @@ public: */ MacResTagArray getResTagArray(); + /** + * Load from stream in MacBinary format + */ + bool loadFromMacBinary(SeekableReadStream &stream); + private: SeekableReadStream *_stream; String _baseFileName; @@ -183,7 +188,6 @@ private: bool load(SeekableReadStream &stream); bool loadFromRawFork(SeekableReadStream &stream); - bool loadFromMacBinary(SeekableReadStream &stream); bool loadFromAppleDouble(SeekableReadStream &stream); static String constructAppleDoubleName(String name); diff --git a/engines/adl/adl.cpp b/engines/adl/adl.cpp index 3b5ebfb3ca..33124a2ea4 100644 --- a/engines/adl/adl.cpp +++ b/engines/adl/adl.cpp @@ -471,7 +471,7 @@ void AdlEngine::bell(uint count) const { playTones(tones, false); } -void AdlEngine::playTones(const Tones &tones, bool isMusic) const { +bool AdlEngine::playTones(const Tones &tones, bool isMusic, bool allowSkip) const { Audio::SoundHandle handle; Audio::AudioStream *stream = new Sound(tones); @@ -480,8 +480,17 @@ void AdlEngine::playTones(const Tones &tones, bool isMusic) const { while (!g_engine->shouldQuit() && g_system->getMixer()->isSoundHandleActive(handle)) { Common::Event event; pollEvent(event); + + if (allowSkip && event.type == Common::EVENT_KEYDOWN) { + // FIXME: Preserve this event + g_system->getMixer()->stopHandle(handle); + return true; + } + g_system->delayMillis(16); } + + return false; } const Region &AdlEngine::getRegion(uint i) const { @@ -904,7 +913,7 @@ byte AdlEngine::convertKey(uint16 ascii) const { return 0; } -Common::String AdlEngine::getLine() const { +Common::String AdlEngine::getLine() { // Original engine uses a global here, which isn't reset between // calls and may not match actual mode bool textMode = false; diff --git a/engines/adl/adl.h b/engines/adl/adl.h index 8883416fd3..543c190793 100644 --- a/engines/adl/adl.h +++ b/engines/adl/adl.h @@ -252,6 +252,7 @@ protected: virtual Common::String getItemDescription(const Item &item) const; void delay(uint32 ms) const; + virtual Common::String getLine(); Common::String inputString(byte prompt = 0) const; byte inputKey(bool showCursor = true) const; void getInput(uint &verb, uint &noun); @@ -312,7 +313,7 @@ protected: // Sound void bell(uint count = 1) const; - void playTones(const Tones &tones, bool isMusic) const; + bool playTones(const Tones &tones, bool isMusic, bool allowSkip = false) const; // Game state functions const Region &getRegion(uint i) const; @@ -413,7 +414,6 @@ private: // Text input byte convertKey(uint16 ascii) const; - Common::String getLine() const; Common::String getWord(const Common::String &line, uint &index) const; Console *_console; diff --git a/engines/adl/hires5.cpp b/engines/adl/hires5.cpp index ffcd2fb04c..4bf65ab822 100644 --- a/engines/adl/hires5.cpp +++ b/engines/adl/hires5.cpp @@ -38,7 +38,8 @@ namespace Adl { class HiRes5Engine : public AdlEngine_v4 { public: HiRes5Engine(OSystem *syst, const AdlGameDescription *gd) : - AdlEngine_v4(syst, gd) { } + AdlEngine_v4(syst, gd), + _doAnimation(false) { } private: // AdlEngine @@ -48,22 +49,27 @@ private: void initGameState(); void applyRegionWorkarounds(); void applyRoomWorkarounds(byte roomNr); + Common::String getLine(); // AdlEngine_v4 bool isInventoryFull(); void loadSong(Common::ReadStream &stream); + void drawLight(uint index, byte color) const; + void animateLights() const; int o_checkItemTimeLimits(ScriptEnv &e); int o_startAnimation(ScriptEnv &e); int o_winGame(ScriptEnv &e); + static const uint kClock = 1022727; // Apple II CPU clock rate static const uint kRegions = 41; static const uint kItems = 69; Common::Array<byte> _itemTimeLimits; Common::String _itemTimeLimitMsg; Tones _song; + bool _doAnimation; struct { Common::String itemTimeLimit; @@ -71,6 +77,63 @@ private: } _gameStrings; }; +Common::String HiRes5Engine::getLine() { + if (_doAnimation) { + animateLights(); + _doAnimation = false; + } + + return AdlEngine_v4::getLine(); +} + +void HiRes5Engine::drawLight(uint index, byte color) const { + const byte xCoord[5] = { 189, 161, 133, 105, 77 }; + const byte yCoord = 72; + + assert(index < 5); + + for (int yDelta = 0; yDelta < 4; ++yDelta) + for (int xDelta = 0; xDelta < 7; ++xDelta) + _display->putPixel(Common::Point(xCoord[index] + xDelta, yCoord + yDelta), color); + + _display->updateHiResScreen(); +} + +void HiRes5Engine::animateLights() const { + int index; + byte color = 0x2a; + + for (index = 4; index >= 0; --index) + drawLight(index, color); + + index = 4; + + while (!g_engine->shouldQuit()) { + drawLight(index, color ^ 0x7f); + + // There's a delay here in the original engine. We leave it out as + // we're already slower than the original without any delay. + + const uint kLoopCycles = 25; + const byte period = (index + 1) << 4; + const double freq = kClock / 2.0 / (period * kLoopCycles); + const double len = 128 * period * kLoopCycles * 1000 / (double)kClock; + + Tones tone; + tone.push_back(Tone(freq, len)); + + if (playTones(tone, false, true)) + break; + + drawLight(index, color ^ 0xff); + + if (--index < 0) { + index = 4; + color ^= 0xff; + } + } +} + typedef Common::Functor1Mem<ScriptEnv &, int, HiRes5Engine> OpcodeH5; #define SetOpcodeTable(x) table = &x; #define Opcode(x) table->push_back(new OpcodeH5(this, &HiRes5Engine::x)) @@ -173,7 +236,6 @@ void HiRes5Engine::loadSong(Common::ReadStream &stream) { if (stream.err() || stream.eos()) error("Error loading song"); - const uint kClock = 1022727; // Apple II CPU clock rate const uint kLoopCycles = 20; // Delay loop cycles double freq = 0.0; @@ -219,7 +281,7 @@ int HiRes5Engine::o_checkItemTimeLimits(ScriptEnv &e) { int HiRes5Engine::o_startAnimation(ScriptEnv &e) { OP_DEBUG_0("\tSTART_ANIMATION()"); - // TODO: sets a flag that triggers an animation + _doAnimation = true; return 0; } @@ -341,6 +403,8 @@ void HiRes5Engine::initGameState() { loadRegion(1); _state.room = 5; + + _doAnimation = false; } void HiRes5Engine::applyRegionWorkarounds() { diff --git a/engines/bladerunner/bladerunner.h b/engines/bladerunner/bladerunner.h index b0eb4591cd..23ea88b43a 100644 --- a/engines/bladerunner/bladerunner.h +++ b/engines/bladerunner/bladerunner.h @@ -135,7 +135,7 @@ public: int _walkSoundBalance; int _walkingActorId; private: - static const int kArchiveCount = 10; + static const uint kArchiveCount = 10; MIXArchive _archives[kArchiveCount]; public: diff --git a/engines/director/director.cpp b/engines/director/director.cpp index 83708e0028..89018f5d0d 100644 --- a/engines/director/director.cpp +++ b/engines/director/director.cpp @@ -24,6 +24,9 @@ #include "common/debug-channels.h" #include "common/error.h" +#include "common/macresman.h" +#include "graphics/fonts/macfont.h" + #include "graphics/macgui/macwindowmanager.h" #include "director/director.h" @@ -116,6 +119,8 @@ Common::Error DirectorEngine::run() { _mainArchive = nullptr; _currentScore = nullptr; + testFonts(); + _lingo->runTests(); return Common::kNoError; @@ -125,7 +130,7 @@ Common::Error DirectorEngine::run() { //_mainArchive = new RIFFArchive(); //_mainArchive->openFile("bookshelf_example.mmm"); - //testFont(); + //testFontScaling(); if (getPlatform() == Common::kPlatformWindows) _sharedCastFile = "SHARDCST.MMM"; @@ -190,4 +195,25 @@ void DirectorEngine::setPalette(byte *palette, uint16 count) { _currentPaletteLength = count; } +void DirectorEngine::testFonts() { + Common::String fontName("Helvetica"); + + Common::MacResManager *fontFile = new Common::MacResManager(); + if (!fontFile->open(fontName)) + error("Could not open %s as a resource fork", fontName.c_str()); + + Common::MacResIDArray fonds = fontFile->getResIDArray(MKTAG('F','O','N','D')); + if (fonds.size() > 0) { + for (Common::Array<uint16>::iterator iterator = fonds.begin(); iterator != fonds.end(); ++iterator) { + Common::SeekableReadStream *stream = fontFile->getResource(MKTAG('F', 'O', 'N', 'D'), *iterator); + Common::String name = fontFile->getResName(MKTAG('F', 'O', 'N', 'D'), *iterator); + + debug("Font: %s", name.c_str()); + + Graphics::MacFontFamily font; + font.load(*stream); + } + } +} + } // End of namespace Director diff --git a/engines/director/director.h b/engines/director/director.h index a2cc1fa9db..8d5f6b5211 100644 --- a/engines/director/director.h +++ b/engines/director/director.h @@ -142,7 +142,8 @@ private: Common::String _sharedCastFile; private: - void testFont(); + void testFontScaling(); + void testFonts(); }; extern DirectorEngine *g_director; diff --git a/engines/director/frame.cpp b/engines/director/frame.cpp index 9b8f25f4fa..1dce3113da 100644 --- a/engines/director/frame.cpp +++ b/engines/director/frame.cpp @@ -875,8 +875,6 @@ void Frame::renderText(Graphics::ManagedSurface &surface, uint16 spriteId, Commo const Graphics::Font *font = _vm->_wm->_fontMan->getFont(macFont); - height = font->getFontHeight(); - debugC(3, kDebugText, "renderText: x: %d y: %d w: %d h: %d font: '%s'", x, y, width, height, _vm->_wm->_fontMan->getFontName(macFont)); int alignment = (int)textCast->textAlign; @@ -885,7 +883,15 @@ void Frame::renderText(Graphics::ManagedSurface &surface, uint16 spriteId, Commo else alignment++; - uint16 textX = x, textY = y; + Graphics::MacText mt(text, font, 0x00, 0xff, width, (Graphics::TextAlign)alignment); + mt.setInterLinear(1); + mt.render(); + const Graphics::ManagedSurface *textSurface = mt.getSurface(); + + height = textSurface->h; + + uint16 textX = 0, textY = 0; + if (!isButtonLabel) { if (borderSize > 0) { if (_vm->getVersion() <= 3) @@ -895,71 +901,57 @@ void Frame::renderText(Graphics::ManagedSurface &surface, uint16 spriteId, Commo textX += (borderSize + 1); textY += borderSize; - } else - textX += 1; + } else { + x += 1; + } if (padding > 0) { width += padding * 2; height += padding; - - if (textCast->textAlign == kTextAlignLeft) - textX += padding; - else if (textCast->textAlign == kTextAlignRight) - textX -= padding; - //TODO: alignment issue with odd-size-width center-aligned text - //else if (textCast->textAlign == kTextAlignCenter && ((borderSize + padding) % 2 == 1)) - // textX--; - textY += padding / 2; } - if (textCast->textAlign == kTextAlignRight) textX -= 1; + if (textCast->textAlign == kTextAlignRight) + textX -= 1; - if (textShadow > 0) { - if (borderSize == 0 && _vm->getVersion() > 3) - textX += 1; - if (_vm->getVersion() > 3) - height -= (textShadow - 1); - } + if (textShadow > 0) + textX--; } else { - textY += 2; + y += 2; } - Graphics::MacText mt(text, font, 0x00, 0xff, width); - mt.render(); - Graphics::ManagedSurface *textSurface = mt.getSurface(); - - if (isButtonLabel) { - uint16 borderX = x + borderSize - 1, borderY = y + borderSize - 1, borderHeight = height, borderWidth = width; - if (borderSize != kSizeNone) { - while (borderSize) { - borderWidth += 2; - borderHeight += 2; - textSurface->frameRect(Common::Rect(borderX, borderY, borderX + borderWidth, borderY + borderHeight), 0); - borderSize--; - borderX--; - borderY--; - } - } + switch (textCast->textAlign) { + case kTextAlignLeft: + break; + case kTextAlignCenter: + textX = (width / 2) - (textSurface->w / 2) + (padding / 2) + borderSize; + break; + case kTextAlignRight: + textX = width - (textSurface->w + 1) + (borderSize * 2) - (textShadow * 2) - (padding); + break; + } - if (boxShadow > 0) { - borderSize = (uint16)textCast->borderSize; - uint baseOffsetX = x + boxShadow; - uint baseOffsetY = y + height + (borderSize * 2); - uint sideOffsetX = x + borderWidth; - uint sideOffsetY = y + boxShadow; - while (boxShadow) { - textSurface->drawLine(baseOffsetX, baseOffsetY + (boxShadow - 1), baseOffsetX + borderWidth - 1, baseOffsetY + (boxShadow - 1), 0); - textSurface->drawLine(sideOffsetX + (boxShadow - 1), sideOffsetY, sideOffsetX + (boxShadow - 1), sideOffsetY + borderHeight - 1, 0); - boxShadow--; - } + Graphics::ManagedSurface textWithFeatures(width + (borderSize * 2) + boxShadow + textShadow, height + borderSize + boxShadow + textShadow); + textWithFeatures.fillRect(Common::Rect(textWithFeatures.w, textWithFeatures.h), 0xff); + + if (!isButtonLabel && boxShadow > 0) { + textWithFeatures.fillRect(Common::Rect(boxShadow, boxShadow, textWithFeatures.w + boxShadow, textWithFeatures.h), 0); + } + + if (!isButtonLabel && borderSize != kSizeNone) { + for (int bb = 0; bb < borderSize; bb++) { + Common::Rect borderRect(bb, bb, textWithFeatures.w - bb - boxShadow - textShadow, textWithFeatures.h - bb - boxShadow - textShadow); + textWithFeatures.fillRect(borderRect, 0xff); + textWithFeatures.frameRect(borderRect, 0); } } if (textShadow > 0) - inkBasedBlit(surface, *textSurface, spriteId, Common::Rect(textX + textShadow, textY + textShadow, textX + textShadow + width, textY + textShadow + height)); + textWithFeatures.transBlitFrom(textSurface->rawSurface(), Common::Point(textX + textShadow, textY + textShadow), 0xff); - inkBasedBlit(surface, *textSurface, spriteId, Common::Rect(textX, textY, textX + width, textY + height)); + textWithFeatures.transBlitFrom(textSurface->rawSurface(), Common::Point(textX, textY), 0xff); + + inkBasedBlit(surface, textWithFeatures, spriteId, Common::Rect(x, y, x + width, y + height)); } void Frame::drawBackgndTransSprite(Graphics::ManagedSurface &target, const Graphics::Surface &sprite, Common::Rect &drawRect) { diff --git a/engines/director/frame.h b/engines/director/frame.h index b41ee832ae..f822a83fdb 100644 --- a/engines/director/frame.h +++ b/engines/director/frame.h @@ -33,7 +33,7 @@ namespace Director { class Sprite; -#define CHANNEL_COUNT 24 +#define CHANNEL_COUNT 30 enum { kChannelDataSize = (25 * 50) diff --git a/engines/director/lingo/tests/d3.keywords.txt b/engines/director/lingo/tests/d3.keywords.txt new file mode 100644 index 0000000000..6b5ddba754 --- /dev/null +++ b/engines/director/lingo/tests/d3.keywords.txt @@ -0,0 +1,264 @@ + + - + - +() +* +/ +& +&& ++ +< +<= +<> += +> +>= +abs +alert +and +backColor +BACKSPACE +beep +beepOn +bottom +buttonStyle +cast hilite +cast name +cast number +cast picture +cast size +cast text +castNum +centerStage +char +chars +charToNum +checkBoxAccess +checkBoxType +clearGlobals +clickOn +closeDA +closeResFile +closeXLib +colorDepth +colorQD +commandDown +constrainH +constraint +constrainV +contains +continue +controlDown +controller +cursor +cursor +date +delay +delete +directToStage +do +dontPassEvent +doubleClick +duration +editableText +EMPTY +ENTER +exit +exitLock +factory +factory +FALSE +field +field textAlign +field textFont +field textHeight +field textSize +field textStyle +fixStageSize +floatp +floatPrecision +foreColor +frame +framesToHMS +freeBlock +freeBytes +fullColorPermit +global +go to +go to movie +height +hilite +HMStoFrames +if +imageDirect +immediate +ink +installMenu +instance +integer +integerp +item +key +keyCode +keyDownScript +label +labelList +lastClick +lastEvent +lastKey +lastRoll +left +length +line +lineSize +locH +locV +loop +machineType +macro +marker +maxInteger +mci +memorySize +menu checkMark +menu enabled +menu name +menu script +menu: +method +mod +mouseCast +mouseChar +mouseDown +mouseDownScript +mouseH +mouseItem +mouseLine +mouseUp +mouseUpScript +mouseV +mouseWord +moveableSprite +movie +movieRate +movieTime +multiSound +not +nothing +numToChar +objectp +offset +on +on idle +on startMovie +on stepMovie +on stopMovie +open +openDA +openResFile +openXLib +optionDown +or +pathName +pattern +pause +pauseState +perFrameHook +play +play done +play movie +playAccel +preLoad +preLoadCast +printFrom +puppet +puppetPalette +puppetSound +puppetSprite +puppetTempo +puppetTransition +put +put after +put before +put into +quickTimePresent +quit +QUOTE +ramNeeded +random +repeat while +repeat with +restart +result +return +RETURN +right +rollover +romanLingo +selection +selEnd +selStart +set +setCallBack +shiftDown +showGlobals +showLocals +showResFile +showXlib +shutDown +sound +sound fadeIn +sound fadeOut +sound playFile +sound stop +sound volume +soundBusy +soundEnabled +soundLevel +sprite s intersects +sprite s within +spriteBox +sqrt +stageBottom +stageColor +stageLeft +stageRight +stageTop +starts +startTime +startTimer +stillDown +stopTime +stretch +string +stringp +switchColorDepth +symbolp +TAB +ticks +time +timeoutKeydown +timeoutLapsed +timeoutLength +timeoutMouse +timeoutPlay +timeoutScript +timer +top +trails +TRUE +type +unLoad +unLoadCast +updateStage +value +visibility +volume +when keyDown +when mouseDown +when mouseUp +when timeOut +width +word +xfactoryList +zoomBox diff --git a/engines/director/lingo/tests/d3.menus.txt b/engines/director/lingo/tests/d3.menus.txt new file mode 100644 index 0000000000..601fd1dfbb --- /dev/null +++ b/engines/director/lingo/tests/d3.menus.txt @@ -0,0 +1,21 @@ +menu: Commands A-O +alert;beep;clearGlobals;closeDA;closeResFile;closeXLib;continue;cursor;delay;delete;do;dontPassEvent;editableText;go to;go to movie;hilite;installMenu;mci;moveableSprite;nothing;open;openDA;openResFile;openXLib +menu: Commands P-Z +pause;play;play done;play movie;playAccel;preLoad;preLoadCast;printFrom;puppetPalette;puppetSound;puppetSprite;puppetTempo;puppetTransition;put ;put after;put before;put into;quit;restart;set;setCallBack;showGlobals;showLocals;showResFile;showXlib;shutDown;sound fadeIn;sound fadeOut;sound playFile;sound stop;spriteBox;startTimer;unLoad;unLoadCast;updateStage;when keyDown;when mouseDown;when mouseUp;when timeOut;zoomBox +menu: Functions A-L +abs;char;chars;charToNum;clickOn;colorQD;commandDown;constrainH;constrainV;controlDown;date;doubleClick;factory;floatp;frame;framesToHMS;freeBlock;freeBytes;HMStoFrames;integer;integerp;item;key;keyCode;label;labelList;lastClick;lastEvent;lastKey;lastRoll;length;line +menu: Functions M-Z +machineType;marker;memorySize;mouseCast;mouseChar;mouseItem;mouseLine;mouseDown;mouseWord;mouseH;mouseUp;mouseV;movie;multiSound;numToChar;objectp;offset;optionDown;pathName;pauseState;quickTimePresent;ramNeeded;random;result;rollover;selection;shiftDown;sqrt;stageBottom;stageLeft;stageRight;stageTop;stillDown;string;stringp;soundBusy;symbolp;ticks;time;value;word;xfactoryList +menu: Keywords +exit;factory;global;if;instance;macro;menu:;method;on;on idle;on startMovie;on stepMovie;on stopMovie;repeat while;repeat with;return +menu: Operators +() ;sprite s within ;sprite s intersects ; - ;not ;and ;or ;* ;/ ;mod ;+ ; - ;& ;&& ;< ;<= ;> ;>= ;<> ;contains ;starts ;= +menu: Constants +BACKSPACE ;EMPTY ;ENTER ;FALSE ;QUOTE ;RETURN ;TAB ;TRUE +menu: Properties +beepOn;buttonStyle;centerStage;checkBoxAccess;checkBoxType;colorDepth;exitLock;fixStageSize;floatPrecision;fullColorPermit;imageDirect;keyDownScript;maxInteger;mouseDownScript;mouseUpScript;perFrameHook;romanLingo;soundEnabled;soundLevel;stageColor;switchColorDepth;timeoutKeydown;timeoutLapsed;timeoutLength;timeoutMouse;timeoutPlay;timeoutScript;timer +menu: Sprite Properties +backColor;bottom;castNum;constraint;cursor;foreColor;height;immediate;ink;left;lineSize;locH;locV;movieRate;movieTime;pattern;puppet;right;startTime;stopTime;stretch;top;trails;type;visibility;volume;width +menu: Other Properties +cast hilite;cast name;cast number;cast picture;cast size;cast text;controller;directToStage;duration;field;field textAlign;field textFont;field textHeight;field textSize;field textStyle;loop;menu checkMark;menu enabled;menu name;menu script;selEnd;selStart;sound;sound volume + diff --git a/engines/director/lingo/tests/d4.keywords.txt b/engines/director/lingo/tests/d4.keywords.txt new file mode 100644 index 0000000000..1395c8f563 --- /dev/null +++ b/engines/director/lingo/tests/d4.keywords.txt @@ -0,0 +1,513 @@ + - + -- + () + [] + * + / + & + && + # + + + < + <= + <> + = + > + >= + � +abbr +abort +abs +actorList +add +addAt +addProp +after +alert +ancestor +and +append +atan +backColor of cast +backColor of sprite +BACKSPACE +beep +beepOn +before +birth +blend of sprite +bottom of sprite +buttonStyle +cast backColor +cast castType +cast depth +cast fileName +cast foreColor +cast height +cast hilite +cast loaded +cast modified +cast name +cast number +cast palette +cast picture +cast purgePriority +cast rect +cast regPoint +cast scriptText +cast size +cast text +cast width +castmembers +castNum of sprite +castType of cast +center +centerStage +char of +chars +charToNum +checkBoxAccess +checkBoxType +checkMark of menuItem +clearGlobals +clickLoc +clickOn +close window +closeDA +closeResFile +closeXlib +colorDepth +colorQD +commandDown +constrainH +constraint of sprite +constrainV +contains +continue +controlDown +controller of cast +copyToClipBoard cast +cos +count +crop +cursor +cursor of sprite +date +delay +delete +deleteAt +deleteProp +depth of cast +digitalVideo +digitalVideo cast center +digitalVideo cast controller +digitalVideo cast crop +digitalVideo cast directToStage +digitalVideo cast duration +digitalVideo cast frameRate +digitalVideo cast loop +digitalVideo cast pausedAtStart +digitalVideo cast preload +digitalVideo cast sound +digitalVideo cast video +digitalVideo sprite movieRate +digitalVideo sprite movieTime +digitalVideo sprite startTime +digitalVideo sprite stopTime +digitalVideo sprite volume +directToStage of cast +do +done +dontPassEvent +doubleClick +down +drawRect of window +duplicate cast {n} +editableText of sprite +else +EMPTY +enabled of menuItem +end +ENTER +erase cast +exit +exit repeat +exitFrame +exitLock +exp +factory +fadeIn +fadeOut +FALSE +field +fileName of cast +fileName of window +findEmpty +findPos +findPosNear +fixStageSize +float +floatP +floatPrecision +foreColor of cast +foreColor of sprite +forget +frame +frameLabel +framePalette +frameRate of cast +frameScript +framesToHMS +frameTempo +freeBlock +freeBytes +getaProp +getAt +getLast +getNthFileNameInFolder +getOne +getPos +getProp +getPropAt +global +go +go loop +go next +go previous +halt +height of cast +height of sprite +hilite +hilite of cast +HMStoFrames +idle +if +ilk list +ilk point +ilk rect +importFileInto +in +inflate rect +ink of sprite +inside point +installMenu +instance +integer +integerP +intersect rect +intersects +into +item of +itemDelimiter +items +key +keyCode +keyDown +keyDownScript +keyUp +keyUpScript +label +labelList +last +lastClick +lastEvent +lastFrame +lastKey +lastRoll +left of sprite +length +line of +lines +lineSize of sprite +list +list ilk +listP +loaded of cast +locH of sprite +locV of sprite +log +long +loop +loop of cast +machineType +map point +map rect +marker +mAtFrame +max +maxInteger +mci +mDescribe +mDispose +me +memorySize +menu +menuItem +menuItems +menus +mGet +min +mInstanceRespondsTo +mMessageList +mName +mNew +mod +modal window +modified of cast +mouseCast +mouseChar +mouseDown +mouseDownScript +mouseH +mouseItem +mouseLine +mouseUp +mouseUpScript +mouseV +mouseWord +move +moveableSprite of sprite +moveToBack +moveToFront +movie +movieFileFreeSize +movieFileSize +movieName +moviePath +movieRate of sprite +movieTime of sprite +mPerform +mPut +mRespondsTo +multiSound +name of cast +name of menu +name of menuItem +next +next repeat +not +nothing +number of cast +number of castMembers +number of chars +number of items +number of lines +number of menuItems +number of menus +number of words +numToChar +objectP +of +offset +offset rect +on +on enterFrame +on enterFrame +on exitFrame +on idle +on keyDown +on keyUp +on mouseDown +on mouseUp +on startMovie +on stopMovie +open +open window +openDA +openResFile +openXlib +optionDown +or +palette of cast +param +paramCount +pass +pasteClipBoardInto +pathName +pause +pausedAtStart of cast +pauseState +perFrameHook +pi +picture of cast +pictureP +play +play done +playFile +point +power +preLoad +preload of cast +preLoadCast +preLoadEventAbort +preLoadRAM +previous +printFrom +property +puppet +puppetPalette +puppetSound +puppetSprite +puppetTempo +puppetTransition +purgePriority of cast +put +put after +put before +put into +quickTimePresent +quit +QUOTE +ramNeeded +random +randomSeed +rect +rect of cast +rect of window +rect point +regPoint of cast +repeat while +repeat with +restart +result +return +RETURN +right of sprite +rollOver +romanLingo +saveMovie +scoreColor +script of menuItem +scriptNum of sprite +scriptText of cast +searchCurrentFolder +searchPath +selection +selEnd +selStart +set +setaProp +setAt +setCallBack +setProp +shiftDown +short +showGlobals +showLocals +showResFile +showXlib +shutDown +sin +size of cast +sort +sound close +sound fadeIn +sound fadeOut +sound of cast +sound playFile +sound stop +soundBusy +soundEnabled +soundLevel +sourceRect of window +sprite +sprite backColor +sprite blend +sprite bottom +sprite castNum +sprite constraint +sprite cursor +sprite editableText +sprite foreColor +sprite height +sprite ink +sprite intersects +sprite left +sprite lineSize +sprite locH +sprite locV +sprite moveableSprite +sprite right +sprite scriptNum +sprite stretch +sprite top +sprite trails +sprite type +sprite visible +sprite width +sprite within +spriteBox +sqrt +stage +stageBottom +stageColor +stageLeft +stageRight +stageTop +startMovie +starts +startTime of sprite +startTimer +stillDown +stop +stopMovie +stopTime of sprite +stretch of sprite +string +stringP +switchColorDepth +symbolP +TAB +tan +tell +text of cast +textAlign +textFont +textHeight +textSize +textStyle +the +then +ticks +time +timeoutKeyDown +timeoutLapsed +timeoutLength +timeoutMouse +timeoutPlay +timeoutScript +timer +title +titleVisible +to +top of sprite +trace +traceLoad +traceLogFile +trails of sprite +TRUE +type of sprite +union rect +unLoad +unLoadCast +updateMovieEnabled +updateStage +value +video +visible of sprite +visible of window +voidP +volume of sound +volume of sprite +while +width of cast +width of sprite +window +windowList +windowType +with +within +word of +words +xFactoryList +zoomBox diff --git a/engines/director/score.cpp b/engines/director/score.cpp index d8c21d6637..e5e137c881 100644 --- a/engines/director/score.cpp +++ b/engines/director/score.cpp @@ -91,7 +91,7 @@ static byte defaultPalette[768] = { 204, 51, 255, 204, 102, 255, 204, 153, 255, 204, 204, 255, 204, 255, 255, 255, 0, 255, 255, 51, 255, 255, 102, 255, 255, 153, 255, 255, 204, 255, 255, 255 }; -void DirectorEngine::testFont() { +void DirectorEngine::testFontScaling() { int x = 10; int y = 10; int w = 640; @@ -406,7 +406,9 @@ void Score::loadCastData(Common::SeekableSubReadStreamEndian &stream, uint16 id, if (stream.size() == 0) return; - if (stream.size() < 26) { + //TODO: Determine if there really is a minimum size. + //This value was too small for Shape Casts. + if (stream.size() < 10) { warning("CAST data id %d is too small", id); return; } diff --git a/engines/dm/dungeonman.cpp b/engines/dm/dungeonman.cpp index 417f3e31e7..618c61a307 100644 --- a/engines/dm/dungeonman.cpp +++ b/engines/dm/dungeonman.cpp @@ -647,8 +647,8 @@ void DungeonMan::loadDungeonFile(Common::InSaveFile *file) { _dungeonMaps[i]._wallSet = (WallSet)((tmp >> 4) & 0xF); _dungeonMaps[i]._floorSet = (FloorSet)(tmp & 0xF); - if (!file) - delete dunDataStream; + //if (!file) + // delete dunDataStream; } // load column stuff thingy @@ -769,7 +769,7 @@ void DungeonMan::loadDungeonFile(Common::InSaveFile *file) { } if (!file) { // this means that we created a new MemoryReadStream - delete file; + delete dunDataStream; } // the deletion of the function parameter 'file' happens elsewhere } diff --git a/engines/dm/gfx.cpp b/engines/dm/gfx.cpp index 46d90366cd..ccab619b50 100644 --- a/engines/dm/gfx.cpp +++ b/engines/dm/gfx.cpp @@ -167,6 +167,8 @@ DisplayMan::DisplayMan(DMEngine *dmEngine) : _vm(dmEngine) { for (uint16 i = 0; i < 16; ++i) _paletteFadeTemporary[i] = 0; + _refreshDungeonViewPaleteRequested = false; + initConstants(); } @@ -386,6 +388,181 @@ void DisplayMan::initConstants() { static byte palChangesFloorOrnD3[16] = {0, 120, 10, 30, 40, 30, 0, 60, 30, 90, 100, 110, 0, 20, 140, 130}; // @ G0213_auc_Graphic558_PaletteChanges_FloorOrnament_D3 static byte palChangesFloorOrnD2[16] = {0, 10, 20, 30, 40, 30, 60, 70, 50, 90, 100, 110, 120, 130, 140, 150}; // @ G0214_auc_Graphic558_PaletteChanges_FloorOrnament_D2 + static byte const wallOrnamentCoordSets[8][13][6] = { // @ G0205_aaauc_Graphic558_WallOrnamentCoordinateSets + /* { X1, X2, Y1, Y2, ByteWidth, Height } */ + { + {80, 83, 41, 45, 8, 5}, /* D3L */ + {140, 143, 41, 45, 8, 5}, /* D3R */ + {16, 29, 39, 50, 8, 12}, /* D3L */ + {107, 120, 39, 50, 8, 12}, /* D3C */ + {187, 200, 39, 50, 8, 12}, /* D3R */ + {67, 77, 40, 49, 8, 10}, /* D2L */ + {146, 156, 40, 49, 8, 10}, /* D2R */ + {0, 17, 38, 55, 16, 18}, /* D2L */ + {102, 123, 38, 55, 16, 18}, /* D2C */ + {206, 223, 38, 55, 16, 18}, /* D2R */ + {48, 63, 38, 56, 8, 19}, /* D1L */ + {160, 175, 38, 56, 8, 19}, /* D1R */ + {96, 127, 36, 63, 16, 28} /* D1C */ + }, + { + {74, 82, 41, 60, 8, 20}, /* D3L */ + {141, 149, 41, 60, 8, 20}, /* D3R */ + {1, 47, 37, 63, 24, 27}, /* D3L */ + {88, 134, 37, 63, 24, 27}, /* D3C */ + {171, 217, 37, 63, 24, 27}, /* D3R */ + {61, 76, 38, 67, 8, 30}, /* D2L */ + {147, 162, 38, 67, 8, 30}, /* D2R */ + {0, 43, 37, 73, 32, 37}, /* D2L */ + {80, 143, 37, 73, 32, 37}, /* D2C */ + {180, 223, 37, 73, 32, 37}, /* D2R */ + {32, 63, 36, 83, 16, 48}, /* D1L */ + {160, 191, 36, 83, 16, 48}, /* D1R */ + {64, 159, 36, 91, 48, 56} /* D1C */ + }, + { + {80, 83, 66, 70, 8, 5}, /* D3L */ + {140, 143, 66, 70, 8, 5}, /* D3R */ + {16, 29, 64, 75, 8, 12}, /* D3L */ + {106, 119, 64, 75, 8, 12}, /* D3C */ + {187, 200, 64, 75, 8, 12}, /* D3R */ + {67, 77, 74, 83, 8, 10}, /* D2L */ + {146, 156, 74, 83, 8, 10}, /* D2R */ + {0, 17, 73, 90, 16, 18}, /* D2L */ + {100, 121, 73, 90, 16, 18}, /* D2C */ + {206, 223, 73, 90, 16, 18}, /* D2R */ + {48, 63, 84, 102, 8, 19}, /* D1L */ + {160, 175, 84, 102, 8, 19}, /* D1R */ + {96, 127, 92, 119, 16, 28} /* D1C */ + }, + { + {80, 83, 49, 53, 8, 5}, /* D3L */ + {140, 143, 49, 53, 8, 5}, /* D3R */ + {16, 29, 50, 61, 8, 12}, /* D3L */ + {106, 119, 50, 61, 8, 12}, /* D3C */ + {187, 200, 50, 61, 8, 12}, /* D3R */ + {67, 77, 53, 62, 8, 10}, /* D2L */ + {146, 156, 53, 62, 8, 10}, /* D2R */ + {0, 17, 55, 72, 16, 18}, /* D2L */ + {100, 121, 55, 72, 16, 18}, /* D2C */ + {206, 223, 55, 72, 16, 18}, /* D2R */ + {48, 63, 57, 75, 8, 19}, /* D1L */ + {160, 175, 57, 75, 8, 19}, /* D1R */ + {96, 127, 64, 91, 16, 28} /* D1C */ + }, + { + {75, 90, 40, 44, 8, 5}, /* D3L */ + {133, 148, 40, 44, 8, 5}, /* D3R */ + {1, 48, 44, 49, 24, 6}, /* D3L */ + {88, 135, 44, 49, 24, 6}, /* D3C */ + {171, 218, 44, 49, 24, 6}, /* D3R */ + {60, 77, 40, 46, 16, 7}, /* D2L */ + {146, 163, 40, 46, 16, 7}, /* D2R */ + {0, 35, 43, 50, 32, 8}, /* D2L */ + {80, 143, 43, 50, 32, 8}, /* D2C */ + {184, 223, 43, 50, 32, 8}, /* D2R */ + {32, 63, 41, 52, 16, 12}, /* D1L */ + {160, 191, 41, 52, 16, 12}, /* D1R */ + {64, 159, 41, 52, 48, 12} /* D1C */ + }, + { + {78, 85, 36, 51, 8, 16}, /* D3L */ + {138, 145, 36, 51, 8, 16}, /* D3R */ + {10, 41, 34, 53, 16, 20}, /* D3L */ + {98, 129, 34, 53, 16, 20}, /* D3C */ + {179, 210, 34, 53, 16, 20}, /* D3R */ + {66, 75, 34, 56, 8, 23}, /* D2L */ + {148, 157, 34, 56, 8, 23}, /* D2R */ + {0, 26, 33, 61, 24, 29}, /* D2L */ + {91, 133, 33, 61, 24, 29}, /* D2C */ + {194, 223, 33, 61, 24, 29}, /* D2R */ + {41, 56, 31, 65, 8, 35}, /* D1L */ + {167, 182, 31, 65, 8, 35}, /* D1R */ + {80, 143, 29, 71, 32, 43} /* D1C */ + }, + { + {75, 82, 25, 75, 8, 51}, /* D3L */ + {142, 149, 25, 75, 8, 51}, /* D3R */ + {12, 60, 25, 75, 32, 51}, /* D3L */ + {88, 136, 25, 75, 32, 51}, /* D3C */ + {163, 211, 25, 75, 32, 51}, /* D3R */ + {64, 73, 20, 90, 8, 71}, /* D2L */ + {150, 159, 20, 90, 8, 71}, /* D2R */ + {0, 38, 20, 90, 32, 71}, /* D2L */ + {82, 142, 20, 90, 32, 71}, /* D2C */ + {184, 223, 20, 90, 32, 71}, /* D2R */ + {41, 56, 9, 119, 8, 111}, /* D1L */ + {169, 184, 9, 119, 8, 111}, /* D1R */ + {64, 159, 9, 119, 48, 111} /* D1C */ + }, + { + {74, 85, 25, 75, 8, 51}, /* D3L */ + {137, 149, 25, 75, 8, 51}, /* D3R */ + {0, 75, 25, 75, 40, 51}, /* D3L Atari ST: { 0, 83, 25, 75, 48, 51 } */ + {74, 149, 25, 75, 40, 51}, /* D3C Atari ST: { 74, 149, 25, 75, 48, 51 } */ + {148, 223, 25, 75, 40, 51}, /* D3R Atari ST: { 139, 223, 25, 75, 48, 51 } */ + {60, 77, 20, 90, 16, 71}, /* D2L */ + {146, 163, 20, 90, 16, 71}, /* D2R */ + {0, 74, 20, 90, 56, 71}, /* D2L */ + {60, 163, 20, 90, 56, 71}, /* D2C */ + {149, 223, 20, 90, 56, 71}, /* D2R */ + {32, 63, 9, 119, 16, 111}, /* D1L */ + {160, 191, 9, 119, 16, 111}, /* D1R */ + {32, 191, 9, 119, 80, 111} /* D1C */ + } + }; + + static uint16 const doorOrnCoordSets[4][3][6] = { // @ G0207_aaauc_Graphic558_DoorOrnamentCoordinateSets + /* { X1, X2, Y1, Y2, ByteWidth, Height } */ + { + {17, 31, 8, 17, 8, 10}, /* D3LCR */ + {22, 42, 11, 23, 16, 13}, /* D2LCR */ + {32, 63, 13, 31, 16, 19} /* D1LCR */ + }, + { + {0, 47, 0, 40, 24, 41}, /* D3LCR */ + {0, 63, 0, 60, 32, 61}, /* D2LCR */ + {0, 95, 0, 87, 48, 88} /* D1LCR */ + }, + { + {17, 31, 15, 24, 8, 10}, /* D3LCR */ + {22, 42, 22, 34, 16, 13}, /* D2LCR */ + {32, 63, 31, 49, 16, 19} /* D1LCR */ + }, + { + {23, 35, 31, 39, 8, 9}, /* D3LCR */ + {30, 48, 41, 52, 16, 12}, /* D2LCR */ + {44, 75, 61, 79, 16, 19} /* D1LCR */ + } + }; + + static byte const doorButtonCoordSet[1] = {0}; // @ G0197_auc_Graphic558_DoorButtonCoordinateSet + static uint16 const doorButtonCoordSets[1][4][6] = { // @ G0208_aaauc_Graphic558_DoorButtonCoordinateSets + // X1, X2, Y1, Y2, ByteWidth, Height + { {199, 204, 41, 44, 8, 4}, /* D3R */ + {136, 141, 41, 44, 8, 4}, /* D3C */ + {144, 155, 42, 47, 8, 6}, /* D2C */ + {160, 175, 44, 52, 8, 9} /* D1C */ + } + }; + + _doorButtonCoordSet[0] = doorButtonCoordSet[0]; + + for(int a = 0; a < 1; ++a) + for(int b = 0; b < 4; ++b) + for(int c = 0; c < 6; ++c) + _doorButtonCoordSets[a][b][c] = doorButtonCoordSets[a][b][c]; + + for(int a = 0; a < 8; ++a) + for(int b = 0; b < 13; ++b) + for(int c = 0; c < 6; ++c) + _wallOrnamentCoordSets[a][b][c] = wallOrnamentCoordSets[a][b][c]; + + for(int a = 0; a < 4; ++a) + for(int b = 0; b < 3; ++b) + for(int c = 0; c < 6; ++c) + _doorOrnCoordSets[a][b][c] = doorOrnCoordSets[a][b][c]; + _frameWallD3R2 = Frame(208, 223, 25, 73, 8, 49, 0, 0); // @ G0712_s_Graphic558_Frame_Wall_D3R2 _doorFrameLeftD1C = Frame(43, 74, 14, 107, 16, 94, 0, 0); // @ G0170_s_Graphic558_Frame_DoorFrameLeft_D1C @@ -446,6 +623,7 @@ DisplayMan::~DisplayMan() { delete[] _packedItemPos; delete[] _packedBitmaps; delete[] _bitmapScreen; + delete[] _tmpBitmap; if (_bitmaps) { delete[] _bitmaps[0]; delete[] _bitmaps; @@ -520,12 +698,13 @@ void DisplayMan::initializeGraphicData() { _bitmapWallSetDoorFrameLeftD3C = new byte[32 * 44]; _bitmapWallSetDoorFrameLeftD2C = new byte[48 * 65]; _bitmapWallSetDoorFrameLeftD1C = new byte[32 * 94]; - _bitmapWallSetDoorFrameRightD1C = new byte[32 * 94]; + _bitmapWallSetDoorFrameRightD1C = new byte[32 * 94](); _bitmapWallSetDoorFrameFront = new byte[32 * 123]; - _bitmapViewport = new byte[224 * 136]; + _bitmapViewport = new byte[224 * 136](); - if (!_derivedBitmapByteCount) - _derivedBitmapByteCount = new uint16[k730_DerivedBitmapMaximumCount]; + if (!_derivedBitmapByteCount) { + _derivedBitmapByteCount = new uint16[k730_DerivedBitmapMaximumCount]; + } if (!_derivedBitmaps) { _derivedBitmaps = new byte *[k730_DerivedBitmapMaximumCount]; for (uint16 i = 0; i < k730_DerivedBitmapMaximumCount; ++i) @@ -753,16 +932,6 @@ void DisplayMan::drawDoorFrameBitmapFlippedHorizontally(byte *bitmap, Frame *fra } void DisplayMan::drawDoorButton(int16 doorButtonOrdinal, DoorButton doorButton) { - static byte doorButtonCoordSet[1] = {0}; // @ G0197_auc_Graphic558_DoorButtonCoordinateSet - static uint16 doorButtonCoordSets[1][4][6] = { // @ G0208_aaauc_Graphic558_DoorButtonCoordinateSets - // X1, X2, Y1, Y2, ByteWidth, Height - { {199, 204, 41, 44, 8, 4}, /* D3R */ - {136, 141, 41, 44, 8, 4}, /* D3C */ - {144, 155, 42, 47, 8, 6}, /* D2C */ - {160, 175, 44, 52, 8, 9} /* D1C */ - } - }; - DungeonMan &dungeon = *_vm->_dungeonMan; if (doorButtonOrdinal) { @@ -771,8 +940,8 @@ void DisplayMan::drawDoorButton(int16 doorButtonOrdinal, DoorButton doorButton) assert(doorButtonOrdinal == 0); int16 nativeBitmapIndex = doorButtonOrdinal + kDMGraphicIdxFirstDoorButton; - int coordSet = doorButtonCoordSet[doorButtonOrdinal]; - uint16 *coordSetRedEagle = doorButtonCoordSets[coordSet][doorButton]; + int coordSet = _doorButtonCoordSet[doorButtonOrdinal]; + uint16 *coordSetRedEagle = _doorButtonCoordSets[coordSet][doorButton]; byte *bitmap = nullptr; if (doorButton == kDMDoorButtonD1C) { @@ -785,7 +954,7 @@ void DisplayMan::drawDoorButton(int16 doorButtonOrdinal, DoorButton doorButton) } else { doorButtonOrdinal = kDMDerivedBitmapFirstDoorButton + (doorButtonOrdinal * 2) + ((doorButton != kDMDoorButtonD3R) ? 0 : (int16)doorButton - 1); if (!isDerivedBitmapInCache(doorButtonOrdinal)) { - uint16 *coordSetBlueGoat = doorButtonCoordSets[coordSet][kDMDoorButtonD1C]; + uint16 *coordSetBlueGoat = _doorButtonCoordSets[coordSet][kDMDoorButtonD1C]; byte *bitmapNative = getNativeBitmapOrGraphic(nativeBitmapIndex); blitToBitmapShrinkWithPalChange(bitmapNative, getDerivedBitmap(doorButtonOrdinal), coordSetBlueGoat[4] << 1, coordSetBlueGoat[5], @@ -843,7 +1012,7 @@ void DisplayMan::loadIntoBitmap(uint16 index, byte *destBitmap) { destBitmap[k++] = nibble2; } else if (nibble1 == 0xB) { uint8 byte1 = data[nextByteIndex++]; - for (int j = 0; j < byte1 + 1; ++j, ++k) +for (int j = 0; j < byte1 + 1; ++j, ++k) destBitmap[k] = destBitmap[k - width]; destBitmap[k++] = nibble2; } else if (nibble1 == 0xF) { @@ -1148,29 +1317,7 @@ void DisplayMan::drawDoor(uint16 doorThingIndex, DoorState doorState, int16 *doo void DisplayMan::drawDoorOrnament(int16 doorOrnOrdinal, DoorOrnament doorOrnament) { static byte palChangesDoorOrnD3[16] = {0, 120, 10, 30, 40, 30, 0, 60, 30, 90, 100, 110, 0, 20, 0, 130}; // @ G0200_auc_Graphic558_PaletteChanges_DoorOrnament_D3 static byte palChangesDoorOrnd2[16] = {0, 10, 20, 30, 40, 30, 60, 70, 50, 90, 100, 110, 120, 130, 140, 150}; // @ G0201_auc_Graphic558_PaletteChanges_DoorOrnament_D2 - static uint16 doorOrnCoordSets[4][3][6] = { // @ G0207_aaauc_Graphic558_DoorOrnamentCoordinateSets - /* { X1, X2, Y1, Y2, ByteWidth, Height } */ - { - {17, 31, 8, 17, 8, 10}, /* D3LCR */ - {22, 42, 11, 23, 16, 13}, /* D2LCR */ - {32, 63, 13, 31, 16, 19} /* D1LCR */ - }, - { - {0, 47, 0, 40, 24, 41}, /* D3LCR */ - {0, 63, 0, 60, 32, 61}, /* D2LCR */ - {0, 95, 0, 87, 48, 88} /* D1LCR */ - }, - { - {17, 31, 15, 24, 8, 10}, /* D3LCR */ - {22, 42, 22, 34, 16, 13}, /* D2LCR */ - {32, 63, 31, 49, 16, 19} /* D1LCR */ - }, - { - {23, 35, 31, 39, 8, 9}, /* D3LCR */ - {30, 48, 41, 52, 16, 12}, /* D2LCR */ - {44, 75, 61, 79, 16, 19} /* D1LCR */ - } - }; + int16 height = doorOrnOrdinal; @@ -1182,7 +1329,7 @@ void DisplayMan::drawDoorOrnament(int16 doorOrnOrdinal, DoorOrnament doorOrnamen int16 nativeBitmapIndex = _currMapDoorOrnInfo[height].nativeIndice; int16 coordSetGreenToad = _currMapDoorOrnInfo[height].coordinateSet; - uint16 *coordSetOrangeElk = &doorOrnCoordSets[coordSetGreenToad][doorOrnament][0]; + uint16 *coordSetOrangeElk = &_doorOrnCoordSets[coordSetGreenToad][doorOrnament][0]; byte *blitBitmap; if (doorOrnament == kDMDoorOrnamentD1LCR) { blitBitmap = getNativeBitmapOrGraphic(nativeBitmapIndex); @@ -1191,7 +1338,7 @@ void DisplayMan::drawDoorOrnament(int16 doorOrnOrdinal, DoorOrnament doorOrnamen } else { height = kDMDerivedBitmapFirstDoorOrnamentD3 + (height * 2) + doorOrnament; if (!isDerivedBitmapInCache(height)) { - uint16 *coordSetRedEagle = &doorOrnCoordSets[coordSetGreenToad][kDMDoorOrnamentD1LCR][0]; + uint16 *coordSetRedEagle = &_doorOrnCoordSets[coordSetGreenToad][kDMDoorOrnamentD1LCR][0]; byte *nativeBitmap = getNativeBitmapOrGraphic(nativeBitmapIndex); blitToBitmapShrinkWithPalChange(nativeBitmap, getDerivedBitmap(height), coordSetRedEagle[4] << 1, coordSetRedEagle[5], coordSetOrangeElk[1] - coordSetOrangeElk[0] + 1, coordSetOrangeElk[5], (doorOrnament == kDMDoorOrnamentD3LCR) ? palChangesDoorOrnD3 : palChangesDoorOrnd2); addDerivedBitmap(height); @@ -2438,9 +2585,9 @@ void DisplayMan::loadCurrentMapGraphics() { _currMapViAltarIndex = -1; for (int16 ornamentIndex = 0; ornamentIndex <= currMap._wallOrnCount; ornamentIndex++) { - int16 greenOrn = _currMapWallOrnIndices[ornamentIndex]; - int16 counter = k121_FirstWallOrn + greenOrn * 2; /* Each wall ornament has 2 graphics */ - _currMapWallOrnInfo[ornamentIndex].nativeIndice = counter; + uint16 greenOrn = _currMapWallOrnIndices[ornamentIndex]; + /* Each wall ornament has 2 graphics */ + _currMapWallOrnInfo[ornamentIndex].nativeIndice = k121_FirstWallOrn + greenOrn * 2; for (int16 ornamentCounter = 0; ornamentCounter < k3_AlcoveOrnCount; ornamentCounter++) { if (greenOrn == g192_AlcoveOrnIndices[ornamentCounter]) { _currMapAlcoveOrnIndices[alcoveCount++] = ornamentIndex; @@ -2454,8 +2601,18 @@ void DisplayMan::loadCurrentMapGraphics() { } _currMapWallOrnInfo[ornamentIndex].coordinateSet = g194_WallOrnCoordSetIndices[greenOrn]; - } + byte *coords = _wallOrnamentCoordSets[_currMapWallOrnInfo[ornamentIndex].coordinateSet][0]; + + for (uint16 counter = kDMDerivedBitmapFirstWallOrnament + (ornamentIndex * 4), + index = counter + 4; + counter < index; + coords += ((index - counter) == 2) ? 18 : 12) { + + releaseBlock(counter | 0x8000); + _derivedBitmapByteCount[counter++] = coords[4] * coords[5]; + } + } for (uint16 i = 0; i < currMap._floorOrnCount; ++i) { uint16 ornIndice = _currMapFloorOrnIndices[i]; @@ -2464,11 +2621,27 @@ void DisplayMan::loadCurrentMapGraphics() { _currMapFloorOrnInfo[i].coordinateSet = floorOrnCoordSetIndices[ornIndice]; } + + for (uint16 i = 0; i < currMap._doorOrnCount; ++i) { uint16 ornIndice = _currMapDoorOrnIndices[i]; - uint16 nativeIndice = k303_FirstDoorOrn + ornIndice; - _currMapDoorOrnInfo[i].nativeIndice = nativeIndice; + _currMapDoorOrnInfo[i].nativeIndice = k303_FirstDoorOrn + ornIndice; _currMapDoorOrnInfo[i].coordinateSet = doorOrnCoordIndices[ornIndice]; + + uint16 *coords = _doorOrnCoordSets[_currMapDoorOrnInfo[i].coordinateSet][0]; + + for (uint16 nativeIndice = kDMDerivedBitmapFirstDoorOrnamentD3 + i * 2, + index = nativeIndice + 2; nativeIndice < index; coords += 6) { + releaseBlock(nativeIndice | 0x8000); + _derivedBitmapByteCount[nativeIndice++] = coords[4] * coords[5]; + } + } + + for (uint16 index = kDMDerivedBitmapFirstDoorButton, counter = 0; counter < k1_DoorButtonCount; counter++) { + uint16 *coords = _doorButtonCoordSets[_doorButtonCoordSet[counter]][1]; + _derivedBitmapByteCount[index++] = coords[4] * coords[5]; + coords += 6; + _derivedBitmapByteCount[index++] = coords[4] * coords[5]; } applyCreatureReplColors(9, 8); @@ -2560,129 +2733,6 @@ bool DisplayMan::isDrawnWallOrnAnAlcove(int16 wallOrnOrd, ViewWall viewWallIndex 46, 57, 68 /* D1L Right, D1R Left */ }; - static byte wallOrnamentCoordSets[8][13][6] = { // @ G0205_aaauc_Graphic558_WallOrnamentCoordinateSets - /* { X1, X2, Y1, Y2, ByteWidth, Height } */ - { - {80, 83, 41, 45, 8, 5}, /* D3L */ - {140, 143, 41, 45, 8, 5}, /* D3R */ - {16, 29, 39, 50, 8, 12}, /* D3L */ - {107, 120, 39, 50, 8, 12}, /* D3C */ - {187, 200, 39, 50, 8, 12}, /* D3R */ - {67, 77, 40, 49, 8, 10}, /* D2L */ - {146, 156, 40, 49, 8, 10}, /* D2R */ - {0, 17, 38, 55, 16, 18}, /* D2L */ - {102, 123, 38, 55, 16, 18}, /* D2C */ - {206, 223, 38, 55, 16, 18}, /* D2R */ - {48, 63, 38, 56, 8, 19}, /* D1L */ - {160, 175, 38, 56, 8, 19}, /* D1R */ - {96, 127, 36, 63, 16, 28} /* D1C */ - }, - { - {74, 82, 41, 60, 8, 20}, /* D3L */ - {141, 149, 41, 60, 8, 20}, /* D3R */ - {1, 47, 37, 63, 24, 27}, /* D3L */ - {88, 134, 37, 63, 24, 27}, /* D3C */ - {171, 217, 37, 63, 24, 27}, /* D3R */ - {61, 76, 38, 67, 8, 30}, /* D2L */ - {147, 162, 38, 67, 8, 30}, /* D2R */ - {0, 43, 37, 73, 32, 37}, /* D2L */ - {80, 143, 37, 73, 32, 37}, /* D2C */ - {180, 223, 37, 73, 32, 37}, /* D2R */ - {32, 63, 36, 83, 16, 48}, /* D1L */ - {160, 191, 36, 83, 16, 48}, /* D1R */ - {64, 159, 36, 91, 48, 56} /* D1C */ - }, - { - {80, 83, 66, 70, 8, 5}, /* D3L */ - {140, 143, 66, 70, 8, 5}, /* D3R */ - {16, 29, 64, 75, 8, 12}, /* D3L */ - {106, 119, 64, 75, 8, 12}, /* D3C */ - {187, 200, 64, 75, 8, 12}, /* D3R */ - {67, 77, 74, 83, 8, 10}, /* D2L */ - {146, 156, 74, 83, 8, 10}, /* D2R */ - {0, 17, 73, 90, 16, 18}, /* D2L */ - {100, 121, 73, 90, 16, 18}, /* D2C */ - {206, 223, 73, 90, 16, 18}, /* D2R */ - {48, 63, 84, 102, 8, 19}, /* D1L */ - {160, 175, 84, 102, 8, 19}, /* D1R */ - {96, 127, 92, 119, 16, 28} /* D1C */ - }, - { - {80, 83, 49, 53, 8, 5}, /* D3L */ - {140, 143, 49, 53, 8, 5}, /* D3R */ - {16, 29, 50, 61, 8, 12}, /* D3L */ - {106, 119, 50, 61, 8, 12}, /* D3C */ - {187, 200, 50, 61, 8, 12}, /* D3R */ - {67, 77, 53, 62, 8, 10}, /* D2L */ - {146, 156, 53, 62, 8, 10}, /* D2R */ - {0, 17, 55, 72, 16, 18}, /* D2L */ - {100, 121, 55, 72, 16, 18}, /* D2C */ - {206, 223, 55, 72, 16, 18}, /* D2R */ - {48, 63, 57, 75, 8, 19}, /* D1L */ - {160, 175, 57, 75, 8, 19}, /* D1R */ - {96, 127, 64, 91, 16, 28} /* D1C */ - }, - { - {75, 90, 40, 44, 8, 5}, /* D3L */ - {133, 148, 40, 44, 8, 5}, /* D3R */ - {1, 48, 44, 49, 24, 6}, /* D3L */ - {88, 135, 44, 49, 24, 6}, /* D3C */ - {171, 218, 44, 49, 24, 6}, /* D3R */ - {60, 77, 40, 46, 16, 7}, /* D2L */ - {146, 163, 40, 46, 16, 7}, /* D2R */ - {0, 35, 43, 50, 32, 8}, /* D2L */ - {80, 143, 43, 50, 32, 8}, /* D2C */ - {184, 223, 43, 50, 32, 8}, /* D2R */ - {32, 63, 41, 52, 16, 12}, /* D1L */ - {160, 191, 41, 52, 16, 12}, /* D1R */ - {64, 159, 41, 52, 48, 12} /* D1C */ - }, - { - {78, 85, 36, 51, 8, 16}, /* D3L */ - {138, 145, 36, 51, 8, 16}, /* D3R */ - {10, 41, 34, 53, 16, 20}, /* D3L */ - {98, 129, 34, 53, 16, 20}, /* D3C */ - {179, 210, 34, 53, 16, 20}, /* D3R */ - {66, 75, 34, 56, 8, 23}, /* D2L */ - {148, 157, 34, 56, 8, 23}, /* D2R */ - {0, 26, 33, 61, 24, 29}, /* D2L */ - {91, 133, 33, 61, 24, 29}, /* D2C */ - {194, 223, 33, 61, 24, 29}, /* D2R */ - {41, 56, 31, 65, 8, 35}, /* D1L */ - {167, 182, 31, 65, 8, 35}, /* D1R */ - {80, 143, 29, 71, 32, 43} /* D1C */ - }, - { - {75, 82, 25, 75, 8, 51}, /* D3L */ - {142, 149, 25, 75, 8, 51}, /* D3R */ - {12, 60, 25, 75, 32, 51}, /* D3L */ - {88, 136, 25, 75, 32, 51}, /* D3C */ - {163, 211, 25, 75, 32, 51}, /* D3R */ - {64, 73, 20, 90, 8, 71}, /* D2L */ - {150, 159, 20, 90, 8, 71}, /* D2R */ - {0, 38, 20, 90, 32, 71}, /* D2L */ - {82, 142, 20, 90, 32, 71}, /* D2C */ - {184, 223, 20, 90, 32, 71}, /* D2R */ - {41, 56, 9, 119, 8, 111}, /* D1L */ - {169, 184, 9, 119, 8, 111}, /* D1R */ - {64, 159, 9, 119, 48, 111} /* D1C */ - }, - { - {74, 85, 25, 75, 8, 51}, /* D3L */ - {137, 149, 25, 75, 8, 51}, /* D3R */ - {0, 75, 25, 75, 40, 51}, /* D3L Atari ST: { 0, 83, 25, 75, 48, 51 } */ - {74, 149, 25, 75, 40, 51}, /* D3C Atari ST: { 74, 149, 25, 75, 48, 51 } */ - {148, 223, 25, 75, 40, 51}, /* D3R Atari ST: { 139, 223, 25, 75, 48, 51 } */ - {60, 77, 20, 90, 16, 71}, /* D2L */ - {146, 163, 20, 90, 16, 71}, /* D2R */ - {0, 74, 20, 90, 56, 71}, /* D2L */ - {60, 163, 20, 90, 56, 71}, /* D2C */ - {149, 223, 20, 90, 56, 71}, /* D2R */ - {32, 63, 9, 119, 16, 111}, /* D1L */ - {160, 191, 9, 119, 16, 111}, /* D1R */ - {32, 191, 9, 119, 80, 111} /* D1C */ - } - }; static Box boxChampionPortraitOnWall = Box(96, 127, 35, 63); // G0109_s_Graphic558_Box_ChampionPortraitOnWall @@ -2693,7 +2743,7 @@ bool DisplayMan::isDrawnWallOrnAnAlcove(int16 wallOrnOrd, ViewWall viewWallIndex int16 wallOrnamentIndex = wallOrnOrd; int16 ornNativeBitmapIndex = _currMapWallOrnInfo[wallOrnamentIndex].nativeIndice; int16 wallOrnamentCoordinateSetIndex = _currMapWallOrnInfo[wallOrnamentIndex].coordinateSet; - byte *ornCoordSet = wallOrnamentCoordSets[wallOrnamentCoordinateSetIndex][viewWallIndex]; + byte *ornCoordSet = _wallOrnamentCoordSets[wallOrnamentCoordinateSetIndex][viewWallIndex]; DungeonMan &dungeon = *_vm->_dungeonMan; @@ -2755,12 +2805,12 @@ bool DisplayMan::isDrawnWallOrnAnAlcove(int16 wallOrnOrd, ViewWall viewWallIndex int16 coordinateSetOffset = 0; bool flipHorizontal = (viewWallIndex == kDMViewWallD2RLeft) || (viewWallIndex == kDMViewWallD3RLeft); if (flipHorizontal) - ornBlitBitmap = wallOrnamentCoordSets[wallOrnamentCoordinateSetIndex][kDMViewWallD1RLeft]; + ornBlitBitmap = _wallOrnamentCoordSets[wallOrnamentCoordinateSetIndex][kDMViewWallD1RLeft]; else if ((viewWallIndex == kDMViewWallD2LRight) || (viewWallIndex == kDMViewWallD3LRight)) - ornBlitBitmap = wallOrnamentCoordSets[wallOrnamentCoordinateSetIndex][kDMViewWallD1LRight]; + ornBlitBitmap = _wallOrnamentCoordSets[wallOrnamentCoordinateSetIndex][kDMViewWallD1LRight]; else { ornNativeBitmapIndex++; - ornBlitBitmap = wallOrnamentCoordSets[wallOrnamentCoordinateSetIndex][kDMViewWallD1CFront]; + ornBlitBitmap = _wallOrnamentCoordSets[wallOrnamentCoordinateSetIndex][kDMViewWallD1CFront]; if (viewWallIndex == kDMViewWallD2LFront) coordinateSetOffset = 6; else if (viewWallIndex == kDMViewWallD2RFront) @@ -3844,7 +3894,7 @@ uint16 DisplayMan::getHorizontalOffsetM22(uint16 val) { bool DisplayMan::isDerivedBitmapInCache(int16 derivedBitmapIndex) { if (_derivedBitmaps[derivedBitmapIndex] == nullptr) { // * 2, because the original uses 4 bits instead of 8 bits to store a pixel - _derivedBitmaps[derivedBitmapIndex] = new byte[_derivedBitmapByteCount[derivedBitmapIndex] * 2]; + _derivedBitmaps[derivedBitmapIndex] = new byte[_derivedBitmapByteCount[derivedBitmapIndex] * 2 + 16]; return false; } diff --git a/engines/dm/gfx.h b/engines/dm/gfx.h index 8c58ed8cbf..c2ccea5626 100644 --- a/engines/dm/gfx.h +++ b/engines/dm/gfx.h @@ -671,6 +671,11 @@ private: bool _useFlippedWallAndFootprintsBitmap; // @ G0076_B_UseFlippedWallAndFootprintsBitmaps + byte _wallOrnamentCoordSets[8][13][6]; // @ G0205_aaauc_Graphic558_WallOrnamentCoordinateSets + uint16 _doorOrnCoordSets[4][3][6]; // @ G0207_aaauc_Graphic558_DoorOrnamentCoordinateSet + byte _doorButtonCoordSet[1]; // @ G0197_auc_Graphic558_DoorButtonCoordinateSet + uint16 _doorButtonCoordSets[1][4][6]; // @ G0208_aaauc_Graphic558_DoorButtonCoordinate + int16 _doorNativeBitmapIndexFrontD3LCR[2]; // @ G0693_ai_DoorNativeBitmapIndex_Front_D3LCR int16 _doorNativeBitmapIndexFrontD2LCR[2]; // @ G0694_ai_DoorNativeBitmapIndex_Front_D2LCR int16 _doorNativeBitmapIndexFrontD1LCR[2]; // @ G0695_ai_DoorNativeBitmapIndex_Front_D1LCR diff --git a/engines/sci/detection_tables.h b/engines/sci/detection_tables.h index 90b9412b9a..52fb703e13 100644 --- a/engines/sci/detection_tables.h +++ b/engines/sci/detection_tables.h @@ -4233,6 +4233,7 @@ static const struct ADGameDescription SciGameDescriptions[] = { Common::EN_ANY, Common::kPlatformDOS, 0, GUIO4(GUIO_NOSPEECH, GAMEOPTION_PREFER_DIGITAL_SFX, GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_FB01_MIDI) }, // Space Quest 4 1.052 - English DOS Floppy (supplied by markcoolio in bug report #2723865) + // Also matches floppies labeled "VER#1.1 INT#4.29.91" (tsoliman) // Executable scanning reports "1.000.753" // SCI interpreter version 1.000.200 (just a guess) {"sq4", "", { diff --git a/engines/sci/engine/file.cpp b/engines/sci/engine/file.cpp index 75aa4fa2ca..f4bd437d3e 100644 --- a/engines/sci/engine/file.cpp +++ b/engines/sci/engine/file.cpp @@ -201,6 +201,9 @@ reg_t file_open(EngineState *s, const Common::String &filename, kFileOpenMode mo isCompressed = false; break; #ifdef ENABLE_SCI32 + // Hoyle5 has no save games, but creates very simple text-based game options + // files that do not need to be compressed + case GID_HOYLE5: // Phantasmagoria game scripts create their own save files, so they are // interoperable with the original interpreter just by renaming them as long // as they are not compressed. They are also never larger than a couple diff --git a/engines/sci/engine/kernel.cpp b/engines/sci/engine/kernel.cpp index 1845ecaac5..c7732c6b15 100644 --- a/engines/sci/engine/kernel.cpp +++ b/engines/sci/engine/kernel.cpp @@ -905,6 +905,11 @@ void Kernel::loadKernelNames(GameFeatures *features) { } else { // Normal SCI2.1 kernel table _kernelNames = Common::StringArray(sci21_default_knames, kKernelEntriesSci21); + + // Used by script patcher to remove CPU spinning on kGetTime + if (g_sci->getGameId() == GID_HOYLE5) { + _kernelNames[0x4f] = "Wait"; + } } break; diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h index ac4987e603..af8e2d8f70 100644 --- a/engines/sci/engine/kernel_tables.h +++ b/engines/sci/engine/kernel_tables.h @@ -225,7 +225,7 @@ static const SciKernelMapSubEntry kDoAudio_subops[] = { { SIG_SCI32, 2, MAP_CALL(DoAudioPlay), "(i)(i)(i)(i)(i)(i)(i)", NULL }, { SIG_SCI32, 3, MAP_CALL(DoAudioStop), "(i)(i)(i)(i)(i)", NULL }, { SIG_SCI32, 4, MAP_CALL(DoAudioPause), "(i)(i)(i)(i)(i)", NULL }, - { SIG_SCI32, 5, MAP_CALL(DoAudioResume), "(i)(i)(i)(i)(i)", NULL }, + { SIG_SCI32, 5, MAP_CALL(DoAudioResume), "(i)(i)(i)(i)(i)", kDoAudioResume_workarounds }, { SIG_SCI32, 6, MAP_CALL(DoAudioPosition), "(i)(i)(i)(i)(i)", NULL }, { SIG_SCI32, 7, MAP_CALL(DoAudioRate), "(i)", NULL }, { SIG_SCI32, 8, MAP_CALL(DoAudioVolume), "(i)(i)(i)(i)(i)(i)", NULL }, @@ -930,6 +930,8 @@ static SciKernelMapEntry s_kernelMap[] = { { MAP_DUMMY(PointSize), SIG_EVERYWHERE, "(.*)", NULL, NULL }, // SCI2.1 Kernel Functions + { "CheckCDisc", kCheckCD, SIG_SCI21EARLY, SIGFOR_ALL, "(i)", NULL, NULL }, + { "GetSaveCDisc", kGetSavedCD, SIG_SCI21EARLY, SIGFOR_ALL, "", NULL, NULL }, { MAP_CALL(CD), SIG_SINCE_SCI21MID, SIGFOR_ALL, "(.*)", kCD_subops, NULL }, { MAP_CALL(IsOnMe), SIG_EVERYWHERE, "iioi", NULL, NULL }, { MAP_CALL(List), SIG_SINCE_SCI21, SIGFOR_ALL, "(.*)", kList_subops, NULL }, @@ -993,8 +995,6 @@ static SciKernelMapEntry s_kernelMap[] = { // Unused / debug functions in the in-between SCI2.1 interpreters { MAP_DUMMY(PreloadResource), SIG_EVERYWHERE, "(.*)", NULL, NULL }, - { MAP_DUMMY(CheckCDisc), SIG_EVERYWHERE, "(.*)", NULL, NULL }, - { MAP_DUMMY(GetSaveCDisc), SIG_EVERYWHERE, "(.*)", NULL, NULL }, { MAP_DUMMY(TestPoly), SIG_EVERYWHERE, "(.*)", NULL, NULL }, // Used by Phantasmagoria 1, script 64981 (used in the chase scene) @@ -1408,7 +1408,7 @@ static const char *const sci21_default_knames[] = { /*0x4c*/ "ScrollWindow", // Dummy in SCI3 /*0x4d*/ "Dummy", /*0x4e*/ "Dummy", - /*0x4f*/ "Dummy", + /*0x4f*/ "Dummy", // Replaced with kWait for Hoyle5 in ScummVM /*0x50*/ "GetEvent", /*0x51*/ "GlobalToLocal", /*0x52*/ "LocalToGlobal", diff --git a/engines/sci/engine/kfile.cpp b/engines/sci/engine/kfile.cpp index 7bc3c2d212..49ad4caedb 100644 --- a/engines/sci/engine/kfile.cpp +++ b/engines/sci/engine/kfile.cpp @@ -220,8 +220,9 @@ reg_t kCheckCD(EngineState *s, int argc, reg_t *argv) { } reg_t kGetSavedCD(EngineState *s, int argc, reg_t *argv) { - // TODO: This is wrong, CD number needs to be available prior to - // the save game being loaded + // Normally this code would read the CD number from the currently loaded + // save game file, but since we don't have one of those, just return the + // disc number from the resource manager return make_reg(0, g_sci->getResMan()->getCurrentDiscNo()); } diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index b2d66d0170..c542be7ef2 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -699,6 +699,43 @@ static const SciScriptPatcherEntry freddypharkasSignatures[] = { #ifdef ENABLE_SCI32 #pragma mark - +#pragma mark Hoyle 5 + +// Several scripts in Hoyle5 contain a subroutine which spins on kGetTime until +// a certain number of ticks elapse. Since this wastes CPU and makes ScummVM +// unresponsive, the kWait kernel function (which was removed in SCI2) is +// reintroduced at 0x4f in kernel.cpp only for Hoyle5, and the spin subroutines +// are patched here to call that function instead. +// Applies to at least: English Demo +static const uint16 hoyle5SignatureSpinLoop[] = { + SIG_MAGICDWORD, + 0x76, // push0 + 0x43, 0x79, SIG_UINT16(0x00), // callk GetTime, $0 + 0x36, // push + 0x87, 0x01, // lap param[1] + 0x02, // add + 0xa5, 0x00, // sat temp[0] + SIG_END +}; + +static const uint16 hoyle5PatchSpinLoop[] = { + 0x78, // push1 + 0x8f, 0x01, // lsp param[1] + 0x43, 0x4f, PATCH_UINT16(0x02), // callk Wait, $2 + 0x48, // ret + PATCH_END +}; + +// script, description, signature patch +static const SciScriptPatcherEntry hoyle5Signatures[] = { + { true, 3, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, + { true, 23, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, + { true, 500, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, + { true, 64937, "remove kGetTime spin", 1, hoyle5SignatureSpinLoop, hoyle5PatchSpinLoop }, + SCI_SIGNATUREENTRY_TERMINATOR +}; + +#pragma mark - #pragma mark Gabriel Knight 1 // =========================================================================== @@ -2925,9 +2962,31 @@ static const uint16 mothergooseHiresPatchLogo[] = { PATCH_END }; +// After finishing the rhyme at the fountain, a horse will appear and walk +// across the screen. The priority of the horse is set too high, so it is +// rendered in front of the fountain instead of behind the fountain. This patch +// corrects the priority so the horse draws behind the fountain. +// +// Applies to at least: English CD from King's Quest Collection +// Responsible method: rhymeScript::changeState +static const uint16 mothergooseHiresSignatureHorse[] = { + SIG_MAGICDWORD, + 0x39, 0x4a, // pushi $4a (setPri) + 0x78, // push1 + 0x38, SIG_UINT16(0xb7), // pushi $b7 + SIG_END +}; + +static const uint16 mothergooseHiresPatchHorse[] = { + PATCH_ADDTOOFFSET(3), + 0x38, PATCH_UINT16(0x59), + PATCH_END +}; + // script, description, signature patch static const SciScriptPatcherEntry mothergooseHiresSignatures[] = { { true, 108, "bad logo rendering", 1, mothergooseHiresSignatureLogo, mothergooseHiresPatchLogo }, + { true, 318, "bad horse z-index", 1, mothergooseHiresSignatureHorse, mothergooseHiresPatchHorse }, SCI_SIGNATUREENTRY_TERMINATOR }; @@ -5170,6 +5229,9 @@ void ScriptPatcher::processScript(uint16 scriptNr, byte *scriptData, const uint3 signatureTable = freddypharkasSignatures; break; #ifdef ENABLE_SCI32 + case GID_HOYLE5: + signatureTable = hoyle5Signatures; + break; case GID_GK1: signatureTable = gk1Signatures; break; diff --git a/engines/sci/engine/workarounds.cpp b/engines/sci/engine/workarounds.cpp index 560a383e24..7c41b1f4e5 100644 --- a/engines/sci/engine/workarounds.cpp +++ b/engines/sci/engine/workarounds.cpp @@ -321,6 +321,8 @@ const SciWorkaroundEntry uninitializedReadWorkarounds[] = { { GID_KQ6, -1, 928, 0, NULL, "startText", NULL, 0, { WORKAROUND_FAKE, 0 } }, // gets caused by Text+Audio support (see script patcher) { GID_KQ7, -1, 64996, 0, "User", "handleEvent", NULL, 1, { WORKAROUND_FAKE, 0 } }, // called when pushing a keyboard key { GID_KQ7, 2450, 2450, 0, "exBridge", "handleEvent", NULL, 0, { WORKAROUND_FAKE, 0 } }, // called when walking up to the throne in the cave in chapter 2 + { GID_KQ7, 2450, 2450, 0, "maliciaComes", "handleEvent", NULL, 0, { WORKAROUND_FAKE, 0 } }, // when malicia appears at the southeast exit of the main chamber near the end of chapter 2 + { GID_KQ7, 6060, 64964, 0, "DPath", "init", NULL, 1, { WORKAROUND_FAKE, 0 } }, // after entering the harp crystal in chapter 5 { GID_LAURABOW, 37, 0, 0, "CB1", "doit", NULL, 1, { WORKAROUND_FAKE, 0 } }, // when going up the stairs - bug #5084 { GID_LAURABOW, -1, 967, 0, "myIcon", "cycle", NULL, 1, { WORKAROUND_FAKE, 0 } }, // having any portrait conversation coming up - initial bug #4971 { GID_LAURABOW2, -1, 24, 0, "gcWin", "open", NULL, 5, { WORKAROUND_FAKE, 0xf } }, // is used as priority for game menu @@ -550,6 +552,7 @@ const SciWorkaroundEntry kDirLoop_workarounds[] = { const SciWorkaroundEntry kDisposeScript_workarounds[] = { { GID_LAURABOW, 777, 777, 0, "myStab", "changeState", NULL, 0, { WORKAROUND_IGNORE, 0 } }, // DEMO: after the will is signed, parameter 0 is an object - bug #4967 { GID_LSL2, -1, 54, 0, "rm54", "dispose", NULL, 0, { WORKAROUND_IGNORE, 0 } }, // Amiga: room 55, script tries to kDisposeScript an object (does not happen for DOS) - bug #6818 + { GID_MOTHERGOOSEHIRES,37, 337, 0, "rhymeScript", "changeState", NULL, 0, { WORKAROUND_IGNORE, 0 } }, // after the rhyme with the king { GID_QFG1, -1, 64, 0, "rm64", "dispose", NULL, 0, { WORKAROUND_IGNORE, 0 } }, // when leaving graveyard, parameter 0 is an object { GID_SQ4, 150, 151, 0, "fightScript", "dispose", NULL, 0, { WORKAROUND_IGNORE, 0 } }, // during fight with Vohaul, parameter 0 is an object { GID_SQ4, 150, 152, 0, "driveCloseUp", "dispose", NULL, 0, { WORKAROUND_IGNORE, 0 } }, // when choosing "beam download", parameter 0 is an object @@ -558,6 +561,12 @@ const SciWorkaroundEntry kDisposeScript_workarounds[] = { }; // gameID, room,script,lvl, object-name, method-name, local-call-signature, index, workaround +const SciWorkaroundEntry kDoAudioResume_workarounds[] = { + { GID_HOYLE5, -1, 17, 0, NULL, "startAudio", NULL, 0, { WORKAROUND_STILLCALL, 0 } }, // when a character talks during a game + SCI_WORKAROUNDENTRY_TERMINATOR +}; + +// gameID, room,script,lvl, object-name, method-name, local-call-signature, index, workaround const SciWorkaroundEntry kDoSoundPlay_workarounds[] = { { GID_LSL6HIRES, -1, 64989, 0, NULL, "play", NULL, 0, { WORKAROUND_STILLCALL, 0 } }, // always passes an extra null argument { GID_QFG4, -1, 64989, 0, NULL, "play", NULL, 0, { WORKAROUND_STILLCALL, 0 } }, // always passes an extra null argument diff --git a/engines/sci/engine/workarounds.h b/engines/sci/engine/workarounds.h index cb928faf09..960c01efdd 100644 --- a/engines/sci/engine/workarounds.h +++ b/engines/sci/engine/workarounds.h @@ -68,6 +68,7 @@ extern const SciWorkaroundEntry kDeviceInfo_workarounds[]; extern const SciWorkaroundEntry kDisplay_workarounds[]; extern const SciWorkaroundEntry kDirLoop_workarounds[]; extern const SciWorkaroundEntry kDisposeScript_workarounds[]; +extern const SciWorkaroundEntry kDoAudioResume_workarounds[]; extern const SciWorkaroundEntry kDoSoundPlay_workarounds[]; extern const SciWorkaroundEntry kDoSoundFade_workarounds[]; extern const SciWorkaroundEntry kFileIOOpen_workarounds[]; diff --git a/engines/sci/graphics/celobj32.h b/engines/sci/graphics/celobj32.h index 70cbd09e7d..3e3f81ac62 100644 --- a/engines/sci/graphics/celobj32.h +++ b/engines/sci/graphics/celobj32.h @@ -127,7 +127,7 @@ struct CelInfo32 { if (type == kCelTypeView) { return Common::String::format("view %u, loop %d, cel %d", resourceId, loopNo, celNo); } else if (type == kCelTypePic) { - return Common::String::format("pic %u", resourceId); + return Common::String::format("pic %u, cel %d", resourceId, celNo); } else if (kCelTypeColor) { return Common::String::format("color %d", color); } else if (type == kCelTypeMem) { diff --git a/engines/sci/graphics/cursor32.cpp b/engines/sci/graphics/cursor32.cpp index 6bb1323cac..34a6d547e1 100644 --- a/engines/sci/graphics/cursor32.cpp +++ b/engines/sci/graphics/cursor32.cpp @@ -291,8 +291,9 @@ void GfxCursor32::readVideo(DrawRegion &target) { copy(target, _vmapRegion); } else { // NOTE: SSCI would read the background for the cursor directly out of - // video memory here, but as far as can be determined, this does not - // seem to actually be necessary for proper cursor rendering + // video memory here, but this is not necessary in ScummVM because mouse + // events in ScummVM are polled so can never interrupt the renderer + // between frames } } diff --git a/engines/sci/graphics/screen_item32.cpp b/engines/sci/graphics/screen_item32.cpp index 4757770dc0..c07e07538e 100644 --- a/engines/sci/graphics/screen_item32.cpp +++ b/engines/sci/graphics/screen_item32.cpp @@ -236,7 +236,7 @@ void ScreenItem::setFromObject(SegManager *segMan, const reg_t object, const boo writeSelectorValue(segMan, object, SELECTOR(priority), _position.y); } - _z = readSelectorValue(segMan, object, SELECTOR(z)); + _z = (int16)readSelectorValue(segMan, object, SELECTOR(z)); _position.y -= _z; if (g_sci->_features->usesAlternateSelectors()) { diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp index d725e36a5a..20547f3601 100644 --- a/engines/sci/sci.cpp +++ b/engines/sci/sci.cpp @@ -1068,16 +1068,6 @@ void SciEngine::syncSoundSettings() { } } -// used by Script Patcher. Used to find out, if Laura Bow 2/King's Quest 6 need patching for Speech+Subtitles - or not -bool SciEngine::speechAndSubtitlesEnabled() { - bool subtitlesOn = ConfMan.getBool("subtitles"); - bool speechOn = !ConfMan.getBool("speech_mute"); - - if (isCD() && subtitlesOn && speechOn) - return true; - return false; -} - void SciEngine::syncIngameAudioOptions() { bool useGlobal90 = false; diff --git a/engines/sci/sci.h b/engines/sci/sci.h index b3ec3259a6..f5ccc19d7c 100644 --- a/engines/sci/sci.h +++ b/engines/sci/sci.h @@ -282,7 +282,6 @@ public: * script patches are needed: * - King's Quest 6 CD */ - bool speechAndSubtitlesEnabled(); void syncIngameAudioOptions(); void updateScummVMAudioOptions(); diff --git a/engines/titanic/carry/brain.cpp b/engines/titanic/carry/brain.cpp index 64b068697b..b00f026718 100644 --- a/engines/titanic/carry/brain.cpp +++ b/engines/titanic/carry/brain.cpp @@ -75,8 +75,7 @@ bool CBrain::UseWithOtherMsg(CUseWithOtherMsg *msg) { } return true; - } - else { + } else { return CCarry::UseWithOtherMsg(msg); } } diff --git a/engines/titanic/carry/carry_parrot.cpp b/engines/titanic/carry/carry_parrot.cpp index c97adc080c..3a2f2c9368 100644 --- a/engines/titanic/carry/carry_parrot.cpp +++ b/engines/titanic/carry/carry_parrot.cpp @@ -107,7 +107,7 @@ bool CCarryParrot::MouseDragEndMsg(CMouseDragEndMsg *msg) { petAddToInventory(); } else if (compareViewNameTo("ParrotLobby.Node 1.N")) { if (msg->_mousePos.x >= 75 && msg->_mousePos.x <= 565 && - !CParrot::_v2 && !CCage::_open) { + !CParrot::_takeOff && !CCage::_open) { setVisible(false); _canTake = false; CTreeItem *perchedParrot = findUnder(getRoot(), "PerchedParrot"); diff --git a/engines/titanic/carry/central_core.cpp b/engines/titanic/carry/central_core.cpp index afc3b85bf0..457428ccfc 100644 --- a/engines/titanic/carry/central_core.cpp +++ b/engines/titanic/carry/central_core.cpp @@ -57,9 +57,9 @@ bool CCentralCore::UseWithOtherMsg(CUseWithOtherMsg *msg) { bool CCentralCore::DropZoneLostObjectMsg(CDropZoneLostObjectMsg *msg) { CString name = msg->_object->getName(); if (name == "PerchCoreHolder") { - CParrot::_v2 = 1; + CParrot::_takeOff = true; if (isEquals("CentralCore")) - CParrot::_v5 = 0; + CParrot::_coreReplaced = false; CActMsg actMsg("LosePerch"); actMsg.execute("ParrotLobbyController"); @@ -75,7 +75,7 @@ bool CCentralCore::DropZoneGotObjectMsg(CDropZoneGotObjectMsg *msg) { CString name = msg->_object->getName(); if (name == "PerchCoreHolder") { if (isEquals("CentralCore")) { - CParrot::_v5 = 1; + CParrot::_coreReplaced = true; CActMsg actMsg("CoreReplaced"); actMsg.execute("ParrotCage"); } diff --git a/engines/titanic/carry/hose.cpp b/engines/titanic/carry/hose.cpp index 3bfb4eae47..ac7c7813ca 100644 --- a/engines/titanic/carry/hose.cpp +++ b/engines/titanic/carry/hose.cpp @@ -44,15 +44,14 @@ void CHose::deinit() { delete _statics; } -CHose::CHose() : CCarry(), - _string6(g_vm->_strings[HOSE_INCOMPATIBLE]) { +CHose::CHose() : CCarry() { } void CHose::save(SimpleFile *file, int indent) { file->writeNumberLine(1, indent); file->writeNumberLine(_statics->_actionVal, indent); file->writeQuotedLine(_statics->_actionTarget, indent); - file->writeQuotedLine(_string6, indent); + file->writeQuotedLine(_unused1, indent); CCarry::save(file, indent); } @@ -60,7 +59,7 @@ void CHose::load(SimpleFile *file) { file->readNumber(); _statics->_actionVal = file->readNumber(); _statics->_actionTarget = file->readString(); - _string6 = file->readString(); + _unused1 = file->readString(); CCarry::load(file); } @@ -70,7 +69,7 @@ bool CHose::DropZoneGotObjectMsg(CDropZoneGotObjectMsg *msg) { pumpingMsg._value = _statics->_actionVal; pumpingMsg.execute(_statics->_actionTarget); CHoseConnectedMsg connectedMsg; - connectedMsg._value = 1; + connectedMsg._connected = true; connectedMsg.execute(this); return true; @@ -99,11 +98,11 @@ bool CHose::UseWithCharMsg(CUseWithCharMsg *msg) { } bool CHose::HoseConnectedMsg(CHoseConnectedMsg *msg) { - if (msg->_value) { + if (msg->_connected) { CHose *hose = dynamic_cast<CHose *>(findChildInstanceOf(CHose::_type)); if (hose) { setVisible(true); - petAddToInventory(); + hose->petAddToInventory(); } } diff --git a/engines/titanic/carry/hose.h b/engines/titanic/carry/hose.h index 3c8c1549c1..0ec37b5b4d 100644 --- a/engines/titanic/carry/hose.h +++ b/engines/titanic/carry/hose.h @@ -41,7 +41,7 @@ class CHose : public CCarry { bool HoseConnectedMsg(CHoseConnectedMsg *msg); bool DropZoneLostObjectMsg(CDropZoneLostObjectMsg *msg); protected: - CString _string6; + CString _unused1; public: static CHoseStatics *_statics; public: diff --git a/engines/titanic/carry/hose_end.cpp b/engines/titanic/carry/hose_end.cpp index c9996437bb..6f8c965182 100644 --- a/engines/titanic/carry/hose_end.cpp +++ b/engines/titanic/carry/hose_end.cpp @@ -27,18 +27,17 @@ namespace Titanic { EMPTY_MESSAGE_MAP(CHoseEnd, CHose); CHoseEnd::CHoseEnd() : CHose() { - _string6 = "Connection refused by remote hose."; } void CHoseEnd::save(SimpleFile *file, int indent) { file->writeNumberLine(1, indent); - file->writeQuotedLine(_string6, indent); + file->writeQuotedLine(_unused1, indent); CHose::save(file, indent); } void CHoseEnd::load(SimpleFile *file) { file->readNumber(); - _string6 = file->readString(); + _unused1 = file->readString(); CHose::load(file); } diff --git a/engines/titanic/core/drop_target.cpp b/engines/titanic/core/drop_target.cpp index ffeab03545..d021705e05 100644 --- a/engines/titanic/core/drop_target.cpp +++ b/engines/titanic/core/drop_target.cpp @@ -34,7 +34,7 @@ BEGIN_MESSAGE_MAP(CDropTarget, CGameObject) END_MESSAGE_MAP() CDropTarget::CDropTarget() : CGameObject(), _itemFrame(0), - _itemMatchSize(0), _showItem(false), _dropEnabled(false), _dropFrame(0), + _itemMatchStartsWith(false), _showItem(false), _dropEnabled(false), _dropFrame(0), _dragFrame(0), _dragCursorId(CURSOR_ARROW), _dropCursorId(CURSOR_HAND), _clipFlags(20) { } @@ -44,7 +44,7 @@ void CDropTarget::save(SimpleFile *file, int indent) { file->writePoint(_pos1, indent); file->writeNumberLine(_itemFrame, indent); file->writeQuotedLine(_itemMatchName, indent); - file->writeNumberLine(_itemMatchSize, indent); + file->writeNumberLine(_itemMatchStartsWith, indent); file->writeQuotedLine(_soundName, indent); file->writeNumberLine(_showItem, indent); file->writeQuotedLine(_itemName, indent); @@ -64,7 +64,7 @@ void CDropTarget::load(SimpleFile *file) { _pos1 = file->readPoint(); _itemFrame = file->readNumber(); _itemMatchName = file->readString(); - _itemMatchSize = file->readNumber(); + _itemMatchStartsWith = file->readNumber(); _soundName = file->readString(); _showItem = file->readNumber(); _itemName = file->readString(); @@ -87,7 +87,7 @@ bool CDropTarget::DropObjectMsg(CDropObjectMsg *msg) { } } - if (!msg->_item->isEquals(_itemMatchName, _itemMatchSize)) + if (!msg->_item->isEquals(_itemMatchName, _itemMatchStartsWith)) return false; msg->_item->detach(); diff --git a/engines/titanic/core/drop_target.h b/engines/titanic/core/drop_target.h index bdf8891789..d77efb4ce3 100644 --- a/engines/titanic/core/drop_target.h +++ b/engines/titanic/core/drop_target.h @@ -38,7 +38,7 @@ protected: Point _pos1; int _itemFrame; CString _itemMatchName; - int _itemMatchSize; + bool _itemMatchStartsWith; CString _soundName; bool _showItem; CString _itemName; diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp index bcdf77b675..af7020532c 100644 --- a/engines/titanic/core/game_object.cpp +++ b/engines/titanic/core/game_object.cpp @@ -960,14 +960,14 @@ CGameObject *CGameObject::getMailManNextObject(CGameObject *prior) const { return mailMan ? mailMan->getNextObject(prior) : nullptr; } -CGameObject *CGameObject::findMailByFlags(int mode, uint roomFlags) { +CGameObject *CGameObject::findMailByFlags(RoomFlagsComparison compareType, uint roomFlags) { CMailMan *mailMan = getMailMan(); if (!mailMan) return nullptr; for (CGameObject *obj = mailMan->getFirstObject(); obj; obj = mailMan->getNextObject(obj)) { - if (compareRoomFlags(mode, roomFlags, obj->_roomFlags)) + if (compareRoomFlags(compareType, roomFlags, obj->_roomFlags)) return obj; } @@ -1151,7 +1151,15 @@ void CGameObject::lockMouse() { gameMan->lockInputHandler(); if (CScreenManager::_screenManagerPtr->_mouseCursor) - CScreenManager::_screenManagerPtr->_mouseCursor->hide(); + CScreenManager::_screenManagerPtr->_mouseCursor->incBusyCount(); +} + +void CGameObject::unlockMouse() { + if (CScreenManager::_screenManagerPtr->_mouseCursor) + CScreenManager::_screenManagerPtr->_mouseCursor->decBusyCount(); + + CGameManager *gameMan = getGameManager(); + gameMan->unlockInputHandler(); } void CGameObject::hideMouse() { @@ -1192,14 +1200,6 @@ void CGameObject::unlockInputHandler() { getGameManager()->unlockInputHandler(); } -void CGameObject::unlockMouse() { - if (CScreenManager::_screenManagerPtr->_mouseCursor) - CScreenManager::_screenManagerPtr->_mouseCursor->show(); - - CGameManager *gameMan = getGameManager(); - gameMan->unlockInputHandler(); -} - void CGameObject::loadSurface() { if (!_surface && !_resource.empty()) { loadResource(_resource); @@ -1413,15 +1413,15 @@ Common::SeekableReadStream *CGameObject::getResource(const CString &name) { return g_vm->_filesManager->getResource(name); } -bool CGameObject::compareRoomFlags(int mode, uint flags1, uint flags2) { - switch (mode) { - case 1: +bool CGameObject::compareRoomFlags(RoomFlagsComparison compareType, uint flags1, uint flags2) { + switch (compareType) { + case RFC_LOCATION: return CRoomFlags::compareLocation(flags1, flags2); - case 2: + case RFC_CLASS_ELEVATOR: return CRoomFlags::compareClassElevator(flags1, flags2); - case 3: + case RFC_TITANIA: return CRoomFlags::isTitania(flags1, flags2); default: diff --git a/engines/titanic/core/game_object.h b/engines/titanic/core/game_object.h index 629c6a038d..30b3321128 100644 --- a/engines/titanic/core/game_object.h +++ b/engines/titanic/core/game_object.h @@ -41,6 +41,7 @@ namespace Titanic { enum Find { FIND_GLOBAL = 1, FIND_ROOM = 2, FIND_PET = 4, FIND_MAILMAN = 8 }; enum Found { FOUND_NONE = 0, FOUND_GLOBAL = 1, FOUND_ROOM = 2, FOUND_PET = 3, FOUND_MAILMAN = 4 }; +enum RoomFlagsComparison { RFC_LOCATION = 1, RFC_CLASS_ELEVATOR = 2, RFC_TITANIA = 3 }; class CDontSaveFileItem; class CMailMan; @@ -337,7 +338,7 @@ protected: /** * Find mail by room flags */ - CGameObject *findMailByFlags(int mode, uint roomFlags); + CGameObject *findMailByFlags(RoomFlagsComparison compareType, uint roomFlags); /** * Find next mail from a given prior one @@ -712,7 +713,10 @@ public: */ CGameObject *getDraggingObject() const; - bool compareRoomFlags(int mode, uint flags1, uint flags2); + /** + * Compares two sets of room flags together + */ + static bool compareRoomFlags(RoomFlagsComparison compareType, uint flags1, uint flags2); /*--- Text display methods ---*/ diff --git a/engines/titanic/core/named_item.cpp b/engines/titanic/core/named_item.cpp index 9c4c28d04d..5fb4f8d6b4 100644 --- a/engines/titanic/core/named_item.cpp +++ b/engines/titanic/core/named_item.cpp @@ -51,9 +51,9 @@ void CNamedItem::load(SimpleFile *file) { CTreeItem::load(file); } -bool CNamedItem::isEquals(const CString &name, int maxLen) const { - if (maxLen) { - return getName().left(maxLen).compareToIgnoreCase(name) == 0; +bool CNamedItem::isEquals(const CString &name, bool startsWith) const { + if (startsWith) { + return getName().left(name.size()).compareToIgnoreCase(name) == 0; } else { return getName().compareToIgnoreCase(name) == 0; } diff --git a/engines/titanic/core/named_item.h b/engines/titanic/core/named_item.h index 9ee3d490ae..9d46fe0673 100644 --- a/engines/titanic/core/named_item.h +++ b/engines/titanic/core/named_item.h @@ -61,7 +61,7 @@ public: /** * Returns true if the item's name matches a passed name */ - virtual bool isEquals(const CString &name, int maxLen = 0) const; + virtual bool isEquals(const CString &name, bool startsWith = false) const; /** * Find a parent node for the item diff --git a/engines/titanic/core/saveable_object.cpp b/engines/titanic/core/saveable_object.cpp index f718ba79b3..8bb8a92b7f 100644 --- a/engines/titanic/core/saveable_object.cpp +++ b/engines/titanic/core/saveable_object.cpp @@ -1022,72 +1022,82 @@ DEFFN(CTimeEventInfo); void CSaveableObject::initClassList() { _classDefs = new ClassDefList(); _classList = new ClassListMap(); + + // Setup the type definitions for each class. Note that these have to be + // in order of hierarchy from ancestor class to descendent + ADDFN(CSaveableObject, CSaveableObject); + ADDFN(CMessage, CSaveableObject); + ADDFN(CMessageTarget, CSaveableObject); + ADDFN(CResourceKey, CSaveableObject); + ADDFN(ListItem, CSaveableObject); + ADDFN(CTreeItem, CMessageTarget); + ADDFN(CFileItem, CTreeItem); + ADDFN(CGameObjectDescItem, CTreeItem); + ADDFN(CDontSaveFileItem, CFileItem); + ADDFN(CProjectItem, CFileItem); + ADDFN(CNamedItem, CTreeItem); + ADDFN(CRoomItem, CNamedItem); + ADDFN(CGameObject, CNamedItem); + ADDFN(CLinkItem, CNamedItem); + ADDFN(CNodeItem, CNamedItem); + ADDFN(CPlaceHolderItem, CNamedItem); + ADDFN(CViewItem, CNamedItem); + ADDFN(CBackground, CGameObject); + ADDFN(CClickResponder, CGameObject); + ADDFN(CDropTarget, CGameObject); + ADDFN(CFileListItem, ListItem); + ADDFN(CMailMan, CGameObject); + ADDFN(CMovieClip, ListItem); + ADDFN(CMultiDropTarget, CDropTarget); + ADDFN(CStartAction, CBackground); + ADDFN(CEditControl, CGameObject); + ADDFN(CToggleButton, CBackground); + ADDFN(CToggleSwitch, CGameObject); + ADDFN(CPlaceHolder, CGameObject); + + ADDFN(CCarry, CGameObject); ADDFN(CArm, CCarry); - ADDFN(CAuditoryCentre, CBrain); - ADDFN(CBowlEar, CEar); ADDFN(CBrain, CCarry); ADDFN(CBridgePiece, CCarry); - ADDFN(CCarry, CGameObject); ADDFN(CCarryParrot, CCarry); - ADDFN(CCentralCore, CBrain); ADDFN(CChicken, CCarry); ADDFN(CCrushedTV, CCarry); - ADDFN(CEar, CHeadPiece); - ADDFN(CEye, CHeadPiece); ADDFN(CFeathers, CCarry); ADDFN(CFruit, CCarry); ADDFN(CGlass, CCarry); ADDFN(CHammer, CCarry); ADDFN(CHeadPiece, CCarry); ADDFN(CHose, CCarry); - ADDFN(CHoseEnd, CHose); ADDFN(CKey, CCarry); ADDFN(CLiftbotHead, CCarry); ADDFN(CLongStick, CCarry); ADDFN(CMagazine, CCarry); - ADDFN(CMaitreDLeftArm, CArm); - ADDFN(CMaitreDRightArm, CArm); - ADDFN(CMouth, CHeadPiece); ADDFN(CNapkin, CCarry); - ADDFN(CNose, CHeadPiece); ADDFN(CNote, CCarry); ADDFN(CParcel, CCarry); - ADDFN(CPerch, CCentralCore); ADDFN(CPhonographCylinder, CCarry); - ADDFN(CPhonographEar, CEar); ADDFN(CPhotograph, CCarry); ADDFN(CPlugIn, CCarry); - ADDFN(CSpeechCentre, CBrain); ADDFN(CSweets, CCarry); + ADDFN(CMaitreDLeftArm, CArm); + ADDFN(CMaitreDRightArm, CArm); + ADDFN(CCentralCore, CBrain); + ADDFN(CSpeechCentre, CBrain); ADDFN(CVisionCentre, CBrain); + ADDFN(CAuditoryCentre, CBrain); + ADDFN(CPerch, CCentralCore); + ADDFN(CEar, CHeadPiece); + ADDFN(CBowlEar, CEar); + ADDFN(CPhonographEar, CEar); + ADDFN(CEye, CHeadPiece); + ADDFN(CMouth, CHeadPiece); + ADDFN(CNose, CHeadPiece); + ADDFN(CHoseEnd, CHose); - ADDFN(CBackground, CGameObject); - ADDFN(CClickResponder, CGameObject); - ADDFN(CDontSaveFileItem, CFileItem); - ADDFN(CDropTarget, CGameObject); - ADDFN(CFileItem, CTreeItem); - ADDFN(CFileListItem, ListItem); - ADDFN(CGameObject, CNamedItem); - ADDFN(CGameObjectDescItem, CTreeItem); - ADDFN(CLinkItem, CNamedItem); - ADDFN(ListItem, CSaveableObject); - ADDFN(CMessageTarget, CSaveableObject); - ADDFN(CMailMan, CGameObject); - ADDFN(CMovieClip, ListItem); - ADDFN(CMultiDropTarget, CDropTarget); - ADDFN(CNamedItem, CTreeItem); - ADDFN(CNodeItem, CNamedItem); - ADDFN(CProjectItem, CFileItem); - ADDFN(CResourceKey, CSaveableObject); - ADDFN(CRoomItem, CNamedItem); - ADDFN(CSaveableObject, CSaveableObject); ADDFN(CStaticImage, CGameObject); ADDFN(CTurnOnObject, CBackground); - ADDFN(CTreeItem, CMessageTarget); ADDFN(CTurnOnPlaySound, CTurnOnObject); ADDFN(CTurnOnTurnOff, CBackground); - ADDFN(CViewItem, CNamedItem); - ADDFN(CAnnounce, CGameObject); ADDFN(CAnnoyBarbot, CGameObject); ADDFN(CArbBackground, CBackground); @@ -1097,7 +1107,6 @@ void CSaveableObject::initClassList() { ADDFN(CBarMenu, CGameObject); ADDFN(CBarMenuButton, CGameObject); ADDFN(CBelbotGetLight, CGameObject); - ADDFN(CBilgeSuccUBus, CSuccUBus); ADDFN(CBomb, CBackground); ADDFN(CBottomOfWellMonitor, CGameObject); ADDFN(CBowlUnlocker, CGameObject); @@ -1130,8 +1139,6 @@ void CSaveableObject::initClassList() { ADDFN(CDoorbotElevatorHandler, CGameObject); ADDFN(CDoorbotHomeHandler, CGameObject); ADDFN(CDropTarget, CGameObject); - ADDFN(CEarSweetBowl, CSweetBowl); - ADDFN(CEjectPhonographButton, CBackground); ADDFN(CElevatorActionArea, CGameObject); ADDFN(CEmmaControl, CBackground); ADDFN(CEmptyNutBowl, CGameObject); @@ -1167,9 +1174,6 @@ void CSaveableObject::initClassList() { ADDFN(CMissiveOMatButton, CEditControl); ADDFN(CMovieTester, CGameObject); ADDFN(CMusicalInstrument, CBackground); - ADDFN(CMusicConsoleButton, CMusicPlayer); - ADDFN(CMusicRoomPhonograph, CRestaurantPhonograph); - ADDFN(CMusicRoomStopPhonographButton, CEjectPhonographButton); ADDFN(CMusicSystemLock, CDropTarget); ADDFN(CNavHelmet, CGameObject); ADDFN(CNavHelmetOn, CGameObject); @@ -1180,9 +1184,7 @@ void CSaveableObject::initClassList() { ADDFN(CNullPortHole, CClickResponder); ADDFN(CNutReplacer, CGameObject); ADDFN(CPetDisabler, CGameObject); - ADDFN(CPhonograph, CMusicPlayer); ADDFN(CPhonographLid, CGameObject); - ADDFN(CPlaceHolderItem, CNamedItem); ADDFN(CPlayMusicButton, CBackground); ADDFN(CPlayOnAct, CBackground); ADDFN(CPortHole, CGameObject); @@ -1190,7 +1192,6 @@ void CSaveableObject::initClassList() { ADDFN(CReplacementEar, CBackground); ADDFN(CReservedTable, CGameObject); ADDFN(CRestaurantCylinderHolder, CDropTarget); - ADDFN(CRestaurantPhonograph, CPhonograph); ADDFN(CSauceDispensor, CBackground); ADDFN(CSearchPoint, CGameObject); ADDFN(CSeasonBackground, CBackground); @@ -1203,11 +1204,11 @@ void CSaveableObject::initClassList() { ADDFN(CSpeechDispensor, CBackground); ADDFN(CSplashAnimation, CGameObject); ADDFN(CStarlingPuret, CGameObject); - ADDFN(CStartAction, CBackground); ADDFN(CStopPhonographButton, CBackground); ADDFN(CSUBGlass, CGameObject); ADDFN(CSUBWrapper, CGameObject); ADDFN(CSweetBowl, CGameObject); + ADDFN(CEarSweetBowl, CSweetBowl); ADDFN(CTelevision, CBackground); ADDFN(CThirdClassCanal, CBackground); ADDFN(CThrowTVDownWell, CGameObject); @@ -1227,32 +1228,31 @@ void CSaveableObject::initClassList() { ADDFN(CGondolierMixer, CGondolierBase); ADDFN(CGondolierSlider, CGondolierBase); ADDFN(CMaitreDArmHolder, CDropTarget); + ADDFN(CMaitreDProdReceptor, CGameObject); ADDFN(CMaitreDBody, CMaitreDProdReceptor); ADDFN(CMaitreDLegs, CMaitreDProdReceptor); - ADDFN(CMaitreDProdReceptor, CGameObject); + ADDFN(CParrotLobbyObject, CGameObject); ADDFN(CParrotLobbyController, CParrotLobbyObject); ADDFN(CParrotLobbyLinkUpdater, CParrotLobbyObject); - ADDFN(CParrotLobbyObject, CGameObject); ADDFN(CParrotLobbyViewObject, CParrotLobbyObject); ADDFN(CParrotLoser, CGameObject); ADDFN(CParrotNutBowlActor, CGameObject); ADDFN(CParrotNutEater, CGameObject); ADDFN(CParrotPerchHolder, CMultiDropTarget); - ADDFN(CParrotSuccUBus, CSuccUBus); ADDFN(CParrotTrigger, CGameObject); ADDFN(CPlayerMeetsParrot, CGameObject); ADDFN(CPET, CGameObject); ADDFN(CPETClass1, CGameObject); ADDFN(CPETClass2, CGameObject); ADDFN(CPETClass3, CGameObject); - ADDFN(CPETLift, CPETTransport); ADDFN(CPETMonitor, CGameObject); - ADDFN(CPETPellerator, CPETTransport); ADDFN(CPETPosition, CGameObject); ADDFN(CPETSentinal, CGameObject); ADDFN(CPETSounds, CGameObject); ADDFN(CPETTransition, CGameObject); ADDFN(CPETTransport, CGameObject); + ADDFN(CPETPellerator, CPETTransport); + ADDFN(CPETLift, CPETTransport); ADDFN(CPickUp, CGameObject); ADDFN(CPickUpBarGlass, CPickUp); ADDFN(CPickUpHose, CPickUp); @@ -1261,8 +1261,8 @@ void CSaveableObject::initClassList() { ADDFN(CPickUpVisCentre, CPickUp); ADDFN(CBarShelfVisCentre, CPlaceHolder); ADDFN(CLemonOnBar, CPlaceHolder); - ADDFN(CPlaceHolder, CGameObject); ADDFN(CTVOnBar, CPlaceHolder); + ADDFN(CSGTStateRoom, CBackground); ADDFN(CArmchair, CSGTStateRoom); ADDFN(CBasin, CSGTStateRoom); ADDFN(CBedfoot, CSGTStateRoom); @@ -1276,40 +1276,34 @@ void CSaveableObject::initClassList() { ADDFN(CSGTNavigation, CGameObject); ADDFN(CSGTRestaurantDoors, CGameObject); ADDFN(CSGTStateControl, CBackground); - ADDFN(CSGTStateRoom, CBackground); ADDFN(CSGTTV, CSGTStateRoom); ADDFN(CSGTUpperDoorsSound, CClickResponder); ADDFN(CToilet, CSGTStateRoom); ADDFN(CVase, CSGTStateRoom); ADDFN(CWashstand, CSGTStateRoom); - ADDFN(CGondolier, CTransport); - ADDFN(CLift, CTransport); - ADDFN(CLiftindicator, CLift); - ADDFN(CPellerator, CTransport); - ADDFN(CServiceElevator, CTransport); - ADDFN(CTransport, CMobile); - + ADDFN(CPetGraphic, CGameObject); + ADDFN(CPetGraphic2, CGameObject); + ADDFN(CSTButton, CBackground); ADDFN(CActButton, CSTButton); ADDFN(CChangesSeasonButton, CSTButton); + ADDFN(CElevatorButton, CSTButton); + ADDFN(CIconNavButt, CPetGraphic); + ADDFN(CIconNavImage, CPetGraphic); + ADDFN(CIconNavReceive, CPetGraphic); + ADDFN(CIconNavSend, CPetGraphic); ADDFN(CChevLeftOff, CToggleSwitch); ADDFN(CChevLeftOn, CToggleSwitch); ADDFN(CChevRightOff, CToggleSwitch); ADDFN(CChevRightOn, CToggleSwitch); ADDFN(CChevSendRecSwitch, CToggleSwitch); - ADDFN(CEditControl, CGameObject); - ADDFN(CElevatorButton, CSTButton); ADDFN(CGetFromSucc, CToggleSwitch); ADDFN(CHelmetOnOff, CToggleSwitch); ADDFN(CHomePhoto, CToggleSwitch); ADDFN(CIconNavAction, CToggleSwitch); - ADDFN(CIconNavButt, CPetGraphic); ADDFN(CIconNavDown, CToggleSwitch); - ADDFN(CIconNavImage, CPetGraphic); ADDFN(CIconNavLeft, CToggleSwitch); - ADDFN(CIconNavReceive, CPetGraphic); ADDFN(CIconNavRight, CToggleSwitch); - ADDFN(CIconNavSend, CPetGraphic); ADDFN(CIconNavUp, CToggleSwitch); ADDFN(CKeybrdButt, CToggleSwitch); ADDFN(CMoveObjectButton, CSTButton); @@ -1323,8 +1317,6 @@ void CSaveableObject::initClassList() { ADDFN(CMusicVoiceMute, CMusicControl); ADDFN(CPetControl, CGameObject); ADDFN(CPetDragChev, CPetGraphic2); - ADDFN(CPetGraphic, CGameObject); - ADDFN(CPetGraphic2, CGameObject); ADDFN(PETLeaf, CGameObject); ADDFN(CPetModeOff, CToggleSwitch); ADDFN(CPetModeOn, CToggleSwitch); @@ -1341,12 +1333,9 @@ void CSaveableObject::initClassList() { ADDFN(CSmallChevRightOff, CToggleSwitch); ADDFN(CSmallChevRightOn, CToggleSwitch); ADDFN(CStatusChangeButton, CSTButton); - ADDFN(CSTButton, CBackground); ADDFN(CTextDown, CPetGraphic); ADDFN(CTextSkrew, CPetGraphic); ADDFN(CTextUp, CPetGraphic); - ADDFN(CToggleButton, CBackground); - ADDFN(CToggleSwitch, CGameObject); ADDFN(CActMsg, CMessage); ADDFN(CActivationmsg, CMessage); @@ -1415,7 +1404,6 @@ void CSaveableObject::initClassList() { ADDFN(CLockPhonographMsg, CMessage); ADDFN(CMaitreDDefeatedMsg, CMessage); ADDFN(CMaitreDHappyMsg, CMessage); - ADDFN(CMessage, CSaveableObject); ADDFN(CMissiveOMatActionMsg, CMessage); ADDFN(CMouseMsg, CMessage); ADDFN(CMouseMoveMsg, CMouseMsg); @@ -1551,33 +1539,35 @@ void CSaveableObject::initClassList() { ADDFN(CVirtualKeyCharMsg, CMessage); ADDFN(CVisibleMsg, CMessage); + ADDFN(CMovePlayerTo, CGameObject); + ADDFN(CMovePlayerToFrom, CGameObject); ADDFN(CEnterBombRoom, CMovePlayerTo); + ADDFN(CExitArboretum, CMovePlayerTo); + ADDFN(CExitBridge, CMovePlayerTo); + ADDFN(CExitStateRoom, CMovePlayerTo); + ADDFN(CMovePlayerInParrotRoom, CMovePlayerTo); + ADDFN(CExitTiania, CMovePlayerTo); + ADDFN(CMultiMove, CMovePlayerTo); + ADDFN(CRestaurantPanHandler, CMovePlayerTo); + ADDFN(CPanFromPel, CMovePlayerTo); + ADDFN(CRestrictedMove, CMovePlayerTo); + ADDFN(CTripDownCanal, CMovePlayerTo); ADDFN(CEnterBridge, CGameObject); ADDFN(CEnterExitFirstClassState, CGameObject); ADDFN(CEnterExitMiniLift, CSGTNavigation); ADDFN(CEnterExitSecClassMiniLift, CGameObject); ADDFN(CEnterExitView, CGameObject); ADDFN(CEnterSecClassState, CGameObject); - ADDFN(CExitArboretum, CMovePlayerTo); - ADDFN(CExitBridge, CMovePlayerTo); ADDFN(CExitLift, CGameObject); ADDFN(CExitPellerator, CGameObject); - ADDFN(CExitStateRoom, CMovePlayerTo); - ADDFN(CExitTiania, CMovePlayerTo); - ADDFN(CMovePlayerInParrotRoom, CMovePlayerTo); - ADDFN(CMovePlayerTo, CGameObject); - ADDFN(CMovePlayerToFrom, CGameObject); - ADDFN(CMultiMove, CMovePlayerTo); - ADDFN(CPanFromPel, CMovePlayerTo); - ADDFN(CRestaurantPanHandler, CMovePlayerTo); ADDFN(CScraliontisTable, CRestaurantPanHandler); - ADDFN(CRestrictedMove, CMovePlayerTo); - ADDFN(CTripDownCanal, CMovePlayerTo); + ADDFN(CCharacter, CGameObject); + ADDFN(CStarlings, CCharacter); + ADDFN(CTrueTalkNPC, CCharacter); ADDFN(CBarbot, CTrueTalkNPC); ADDFN(CBellBot, CTrueTalkNPC); ADDFN(CCallBot, CGameObject); - ADDFN(CCharacter, CGameObject); ADDFN(CDeskbot, CTrueTalkNPC); ADDFN(CDoorbot, CTrueTalkNPC); ADDFN(CMaitreD, CTrueTalkNPC); @@ -1585,36 +1575,48 @@ void CSaveableObject::initClassList() { ADDFN(CMobile, CCharacter); ADDFN(CParrot, CTrueTalkNPC); ADDFN(CRobotController, CGameObject); - ADDFN(CStarlings, CCharacter); ADDFN(CSuccUBus, CTrueTalkNPC); + ADDFN(CBilgeSuccUBus, CSuccUBus); + ADDFN(CParrotSuccUBus, CSuccUBus); ADDFN(CSummonBots, CRobotController); ADDFN(CTitania, CCharacter); - ADDFN(CTrueTalkNPC, CCharacter); + ADDFN(CTransport, CMobile); + ADDFN(CGondolier, CTransport); + ADDFN(CLift, CTransport); + ADDFN(CLiftindicator, CLift); + ADDFN(CPellerator, CTransport); + ADDFN(CServiceElevator, CTransport); - ADDFN(CAutoMusicPlayer, CAutoMusicPlayerBase); + ADDFN(CMusicPlayer, CGameObject); ADDFN(CAutoMusicPlayerBase, CGameObject); ADDFN(CAutoSoundPlayer, CGameObject); - ADDFN(CAutoSoundPlayerADSR, CAutoSoundPlayer); ADDFN(CBackgroundSoundMaker, CGameObject); - ADDFN(CBirdSong, CRoomAutoSoundPlayer); - ADDFN(CDomeFromTopOfWell, CViewAutoSoundPlayer); ADDFN(CGondolierSong, CGameObject); - ADDFN(CEnterViewTogglesOtherMusic, CTriggerAutoMusicPlayer); - ADDFN(CGondolierSong, CRoomAutoSoundPlayer); - ADDFN(CMusicPlayer, CGameObject); + ADDFN(CTriggerAutoMusicPlayer, CGameObject); + ADDFN(CMusicConsoleButton, CMusicPlayer); + ADDFN(CPhonograph, CMusicPlayer); + ADDFN(CRestaurantPhonograph, CPhonograph); + ADDFN(CMusicRoomPhonograph, CRestaurantPhonograph); + ADDFN(CEjectPhonographButton, CBackground); + ADDFN(CMusicRoomStopPhonographButton, CEjectPhonographButton); + ADDFN(CAutoMusicPlayer, CAutoMusicPlayerBase); + ADDFN(CAutoSoundPlayerADSR, CAutoSoundPlayer); ADDFN(CNodeAutoSoundPlayer, CAutoSoundPlayer); - ADDFN(CRestrictedAutoMusicPlayer, CAutoMusicPlayer); + ADDFN(CViewAutoSoundPlayer, CAutoSoundPlayer); ADDFN(CRoomAutoSoundPlayer, CAutoSoundPlayer); + ADDFN(CRestrictedAutoMusicPlayer, CAutoMusicPlayer); ADDFN(CRoomTriggerAutoMusicPlayer, CTriggerAutoMusicPlayer); + ADDFN(CEnterViewTogglesOtherMusic, CTriggerAutoMusicPlayer); + ADDFN(CViewTogglesOtherMusic, CEnterViewTogglesOtherMusic); + ADDFN(CWaterLappingSounds, CRoomAutoSoundPlayer); + ADDFN(CBirdSong, CRoomAutoSoundPlayer); + ADDFN(CDomeFromTopOfWell, CViewAutoSoundPlayer); + ADDFN(CGondolierSong, CRoomAutoSoundPlayer); ADDFN(CSeasonNoises, CViewAutoSoundPlayer); ADDFN(CSeasonalMusicPlayer, CAutoMusicPlayerBase); ADDFN(CAutoMusicPlayer, CAutoMusicPlayerBase); ADDFN(CAutoMusicPlayerBase, CAutoMusicPlayer); ADDFN(CTitaniaSpeech, CGameObject); - ADDFN(CTriggerAutoMusicPlayer, CGameObject); - ADDFN(CViewAutoSoundPlayer, CAutoSoundPlayer); - ADDFN(CViewTogglesOtherMusic, CEnterViewTogglesOtherMusic); - ADDFN(CWaterLappingSounds, CRoomAutoSoundPlayer); ADDFN(CStarControl, CGameObject); ADDFN(CTimeEventInfo, ListItem); } diff --git a/engines/titanic/core/tree_item.h b/engines/titanic/core/tree_item.h index e92f5cda49..498d2da4f4 100644 --- a/engines/titanic/core/tree_item.h +++ b/engines/titanic/core/tree_item.h @@ -127,7 +127,7 @@ public: /** * Returns true if the item's name matches a passed name */ - virtual bool isEquals(const CString &name, int maxLen = 0) const { return false; } + virtual bool isEquals(const CString &name, bool startsWith = false) const{ return false; } /** * Compares the name of the item to a passed name diff --git a/engines/titanic/game/cage.cpp b/engines/titanic/game/cage.cpp index 11f5837e4c..f51e935231 100644 --- a/engines/titanic/game/cage.cpp +++ b/engines/titanic/game/cage.cpp @@ -53,7 +53,7 @@ void CCage::load(SimpleFile *file) { } bool CCage::MouseButtonDownMsg(CMouseButtonDownMsg *msg) { - if (CParrot::_state != PARROT_IN_CAGE && !CParrot::_v5) { + if (CParrot::_state != PARROT_IN_CAGE && !CParrot::_coreReplaced) { CActMsg actMsg(_open ? "Open" : "Shut"); actMsg.execute(this); } @@ -103,7 +103,7 @@ bool CCage::PreEnterViewMsg(CPreEnterViewMsg *msg) { } bool CCage::MouseMoveMsg(CMouseMoveMsg *msg) { - _cursorId = CParrot::_state != PARROT_IN_CAGE && !CParrot::_v5 ? CURSOR_ACTIVATE : CURSOR_ARROW; + _cursorId = CParrot::_state != PARROT_IN_CAGE && !CParrot::_coreReplaced ? CURSOR_ACTIVATE : CURSOR_ARROW; return true; } diff --git a/engines/titanic/game/light.cpp b/engines/titanic/game/light.cpp index 76dc9a44b0..30fc53463f 100644 --- a/engines/titanic/game/light.cpp +++ b/engines/titanic/game/light.cpp @@ -37,18 +37,18 @@ BEGIN_MESSAGE_MAP(CLight, CBackground) ON_MESSAGE(EnterRoomMsg) END_MESSAGE_MAP() -CLight::CLight() : CBackground(), _unused1(0), _upRight(false), - _upLeft(false), _downLeft(false), _downRight(false), _unused2(0), +CLight::CLight() : CBackground(), _unused1(0), _topRight(false), + _topLeft(false), _bottomLeft(false), _bottomRight(false), _unused2(0), _unused3(0), _eyePresent(false) { } void CLight::save(SimpleFile *file, int indent) { file->writeNumberLine(1, indent); file->writeNumberLine(_unused1, indent); - file->writeNumberLine(_upRight, indent); - file->writeNumberLine(_upLeft, indent); - file->writeNumberLine(_downLeft, indent); - file->writeNumberLine(_downRight, indent); + file->writeNumberLine(_topRight, indent); + file->writeNumberLine(_topLeft, indent); + file->writeNumberLine(_bottomLeft, indent); + file->writeNumberLine(_bottomRight, indent); file->writeNumberLine(_unused2, indent); file->writeNumberLine(_unused3, indent); file->writeNumberLine(_eyePresent, indent); @@ -59,10 +59,10 @@ void CLight::save(SimpleFile *file, int indent) { void CLight::load(SimpleFile *file) { file->readNumber(); _unused1 = file->readNumber(); - _upRight = file->readNumber(); - _upLeft = file->readNumber(); - _downLeft = file->readNumber(); - _downRight = file->readNumber(); + _topRight = file->readNumber(); + _topLeft = file->readNumber(); + _bottomLeft = file->readNumber(); + _bottomRight = file->readNumber(); _unused2 = file->readNumber(); _unused3 = file->readNumber(); _eyePresent = file->readNumber(); @@ -76,8 +76,15 @@ bool CLight::TurnOff(CTurnOff *msg) { } bool CLight::LightsMsg(CLightsMsg *msg) { - if ((msg->_upLeft && _upLeft) || (msg->_downLeft && _downLeft) - || (msg->_upRight && _upRight) || (msg->_downRight && _downRight)) { + // WORKAROUND: Since solving the puzzle to get Titania's eye explicitly + // requires referring to the "broken light", don't allow the top left + // light to be turned on in the player's stateroom until it's gotten/fixed + if (msg->_topLeft && _topLeft) { + bool showFlag = !getPetControl()->isFirstClassSuite() || + getRoom()->findByName("Eye1") == nullptr; + setVisible(showFlag); + } else if ((msg->_bottomLeft && _bottomLeft) || (msg->_topRight && _topRight) || + (msg->_bottomRight && _bottomRight)) { setVisible(true); } else { setVisible(false); @@ -98,9 +105,9 @@ bool CLight::TurnOn(CTurnOn *msg) { bool CLight::StatusChangeMsg(CStatusChangeMsg *msg) { CPetControl *pet = getPetControl(); - bool flag = pet ? pet->isRoom59706() : false; + bool isYourStateroom = pet ? pet->isFirstClassSuite() : false; - if (_eyePresent && flag) { + if (_eyePresent && isYourStateroom) { petDisplayMessage(1, LIGHT_IS_LOOSE); playSound("z#144.wav", 70); } else { @@ -113,9 +120,9 @@ bool CLight::StatusChangeMsg(CStatusChangeMsg *msg) { bool CLight::MouseButtonDownMsg(CMouseButtonDownMsg *msg) { CPetControl *pet = getPetControl(); - bool flag = pet ? pet->isRoom59706() : false; + bool isYourStateroom = pet ? pet->isFirstClassSuite() : false; - if (_eyePresent && flag) { + if (_eyePresent && isYourStateroom) { petDisplayMessage(1, LIGHT_IS_LOOSE); playSound("z#144.wav", 70); } else { @@ -138,11 +145,11 @@ bool CLight::EnterRoomMsg(CEnterRoomMsg *msg) { setVisible(true); if (isEquals("6WTL")) { - CLightsMsg lightsMsg(1, 1, 1, 1); + CLightsMsg lightsMsg(true, true, true, true); lightsMsg.execute("1stClassState", CLight::_type, MSGFLAG_SCAN); - bool flag = pet ? pet->isRoom59706() : false; - if (flag) + bool isYourStateroom = pet ? pet->isFirstClassSuite() : false; + if (isYourStateroom) CTelevision::_turnOn = true; } diff --git a/engines/titanic/game/light.h b/engines/titanic/game/light.h index 12f7d88bcb..2e5dbfaee6 100644 --- a/engines/titanic/game/light.h +++ b/engines/titanic/game/light.h @@ -40,10 +40,10 @@ class CLight : public CBackground { bool EnterRoomMsg(CEnterRoomMsg *msg); private: int _unused1; - bool _upRight; - bool _upLeft; - bool _downLeft; - bool _downRight; + bool _topRight; + bool _topLeft; + bool _bottomLeft; + bool _bottomRight; int _unused2; int _unused3; bool _eyePresent; diff --git a/engines/titanic/game/light_switch.cpp b/engines/titanic/game/light_switch.cpp index 0137ff9965..a5b44d2351 100644 --- a/engines/titanic/game/light_switch.cpp +++ b/engines/titanic/game/light_switch.cpp @@ -144,7 +144,7 @@ bool CLightSwitch::EnterRoomMsg(CEnterRoomMsg *msg) { _flag = true; CPetControl *pet = getPetControl(); if (pet) - _turnOnTV = pet->isRoom59706(); + _turnOnTV = pet->isFirstClassSuite(); return true; } diff --git a/engines/titanic/game/parrot/parrot_lobby_link_updater.cpp b/engines/titanic/game/parrot/parrot_lobby_link_updater.cpp index 47311c31f5..c32a06db39 100644 --- a/engines/titanic/game/parrot/parrot_lobby_link_updater.cpp +++ b/engines/titanic/game/parrot/parrot_lobby_link_updater.cpp @@ -80,9 +80,9 @@ bool CParrotLobbyLinkUpdater::ActMsg(CActMsg *msg) { if (isEquals("ParrotLobbyUpdater_TOW")) { entriesP = &_entries[4]; } else { - if (node->_nodeNumber > 3) + if (node->_nodeNumber < 1 || node->_nodeNumber > 4) return true; - entriesP = &_entries[node->_nodeNumber]; + entriesP = &_entries[node->_nodeNumber - 1]; } int count = entriesP->size(); diff --git a/engines/titanic/game/parrot/parrot_perch_holder.cpp b/engines/titanic/game/parrot/parrot_perch_holder.cpp index 557f70437a..fb7564ea17 100644 --- a/engines/titanic/game/parrot/parrot_perch_holder.cpp +++ b/engines/titanic/game/parrot/parrot_perch_holder.cpp @@ -45,7 +45,7 @@ void CParrotPerchHolder::load(SimpleFile *file) { } bool CParrotPerchHolder::MouseButtonDownMsg(CMouseButtonDownMsg *msg) { - if (!CParrot::_v1) { + if (!CParrot::_eatingChicken) { if (CCage::_open) { petDisplayMessage(CANNOT_TAKE_CAGE_LOCKED); } else if (CParrot::_state == PARROT_IN_CAGE) { diff --git a/engines/titanic/game/television.cpp b/engines/titanic/game/television.cpp index ba48d8061a..dbef81151c 100644 --- a/engines/titanic/game/television.cpp +++ b/engines/titanic/game/television.cpp @@ -283,12 +283,12 @@ bool CTelevision::TurnOn(CTurnOn *msg) { bool CTelevision::LightsMsg(CLightsMsg *msg) { CPetControl *pet = getPetControl(); - bool flag = false; + bool isYourStateroom = false; if (pet) - flag = pet->isRoom59706(); + isYourStateroom = pet->isFirstClassSuite(); - if (msg->_upLeft || !flag) + if (msg->_topLeft || !isYourStateroom) _turnOn = true; return true; diff --git a/engines/titanic/game/throw_tv_down_well.cpp b/engines/titanic/game/throw_tv_down_well.cpp index 9de028cbde..be61f6e9ab 100644 --- a/engines/titanic/game/throw_tv_down_well.cpp +++ b/engines/titanic/game/throw_tv_down_well.cpp @@ -48,9 +48,9 @@ void CThrowTVDownWell::load(SimpleFile *file) { bool CThrowTVDownWell::ActMsg(CActMsg *msg) { if (msg->_action == "ThrowTVDownWell" && !_flag) { - CString viewName = getFullViewName(); + _viewName = getFullViewName(); lockMouse(); - addTimer(1, 8000, 0); + addTimer(1, 4000, 0); CActMsg actMsg("ThrownTVDownWell"); actMsg.execute("BOWTelevisionMonitor"); diff --git a/engines/titanic/game_state.cpp b/engines/titanic/game_state.cpp index 49779ad745..964d6e604a 100644 --- a/engines/titanic/game_state.cpp +++ b/engines/titanic/game_state.cpp @@ -83,11 +83,11 @@ void CGameState::setMode(GameStateMode newMode) { _gameManager->lockInputHandler(); if (sm && sm->_mouseCursor) - sm->_mouseCursor->setBusy(); + sm->_mouseCursor->incBusyCount(); } else if (newMode != GSMODE_CUTSCENE && _mode == GSMODE_CUTSCENE) { if (sm && sm->_mouseCursor) - sm->_mouseCursor->clearBusy(); + sm->_mouseCursor->decBusyCount(); if (_gameManager) _gameManager->unlockInputHandler(); diff --git a/engines/titanic/messages/messages.h b/engines/titanic/messages/messages.h index 123003fee5..6832c69f3c 100644 --- a/engines/titanic/messages/messages.h +++ b/engines/titanic/messages/messages.h @@ -270,7 +270,7 @@ MESSAGE1(CGetChevLiftBits, int, liftBits, 0); MESSAGE1(CGetChevLiftNum, int, liftNum, 0); MESSAGE1(CGetChevRoomBits, int, roomNum, 0); MESSAGE1(CGetChevRoomNum, int, roomNum, 0); -MESSAGE2(CHoseConnectedMsg, int, value, 1, CGameObject *, object, nullptr); +MESSAGE2(CHoseConnectedMsg, bool, connected, true, CGameObject *, object, nullptr); MESSAGE0(CInitializeAnimMsg); MESSAGE1(CIsEarBowlPuzzleDone, int, value, 0); MESSAGE3(CIsHookedOnMsg, Rect, rect, Rect(), bool, result, false, CString, string1, ""); @@ -280,7 +280,7 @@ MESSAGE2(CLeaveNodeMsg, CNodeItem *, oldNode, nullptr, CNodeItem *, newNode, nul MESSAGE2(CLeaveRoomMsg, CRoomItem *, oldRoom, nullptr, CRoomItem *, newRoom, nullptr); MESSAGE2(CLeaveViewMsg, CViewItem *, oldView, nullptr, CViewItem *, newView, nullptr); MESSAGE1(CLemonFallsFromTreeMsg, Point, pt, Point()); -MESSAGE4(CLightsMsg, bool, upRight, false, bool, upLeft, false, bool, downLeft, false, bool, downRight, false); +MESSAGE4(CLightsMsg, bool, topRight, false, bool, topLeft, false, bool, bottomLeft, false, bool, bottomRight, false); MESSAGE1(CLoadSuccessMsg, int, ticks, 0); MESSAGE1(CLockPhonographMsg, int, value, 0); MESSAGE0(CMaitreDDefeatedMsg); diff --git a/engines/titanic/npcs/bellbot.cpp b/engines/titanic/npcs/bellbot.cpp index 1326655299..26c9b13e40 100644 --- a/engines/titanic/npcs/bellbot.cpp +++ b/engines/titanic/npcs/bellbot.cpp @@ -62,7 +62,7 @@ void CBellBot::load(SimpleFile *file) { bool CBellBot::OnSummonBotMsg(COnSummonBotMsg *msg) { if (msg->_value == 1) { - _npcFlags |= NPCFLAG_40000; + _npcFlags |= NPCFLAG_MOVE_LOOP; } else { static const char *const ROOM_WAVES[8][2] = { { "EmbLobby", "z#193.wav" }, @@ -86,18 +86,18 @@ bool CBellBot::OnSummonBotMsg(COnSummonBotMsg *msg) { playSound("z#147.wav"); sleep(2000); - _npcFlags &= ~NPCFLAG_40000; + _npcFlags &= ~NPCFLAG_MOVE_LOOP; } playClip("Walk On", MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE); movieEvent(); - _npcFlags |= NPCFLAG_10000; + _npcFlags |= NPCFLAG_MOVING; return true; } bool CBellBot::LeaveViewMsg(CLeaveViewMsg *msg) { - if (_npcFlags & NPCFLAG_10000) { + if (_npcFlags & NPCFLAG_MOVING) { performAction(1); _npcFlags &= ~NPCFLAG_START_IDLING; CDismissBotMsg dismissMsg; @@ -108,15 +108,15 @@ bool CBellBot::LeaveViewMsg(CLeaveViewMsg *msg) { } bool CBellBot::MovieEndMsg(CMovieEndMsg *msg) { - if (!(_npcFlags & NPCFLAG_10000)) { + if (!(_npcFlags & NPCFLAG_MOVING)) { CTrueTalkNPC::MovieEndMsg(msg); } else if (clipExistsByEnd("Walk On", msg->_endFrame)) { setPosition(Point(80, 10)); loadFrame(543); _npcFlags |= NPCFLAG_START_IDLING; - if (_npcFlags & NPCFLAG_40000) { + if (_npcFlags & NPCFLAG_MOVE_LOOP) { startTalking(this, 157); - _npcFlags &= ~NPCFLAG_40000; + _npcFlags &= ~NPCFLAG_MOVE_LOOP; } setTalking(this, true); @@ -125,7 +125,7 @@ bool CBellBot::MovieEndMsg(CMovieEndMsg *msg) { CPutBotBackInHisBoxMsg boxMsg; boxMsg.execute(this); - if (_npcFlags & NPCFLAG_20000) + if (_npcFlags & NPCFLAG_MOVE_START) startAnimTimer("SummonDoorbot", 1500); } else { CTrueTalkNPC::MovieEndMsg(msg); @@ -140,7 +140,7 @@ bool CBellBot::Use(CUse *msg) { } bool CBellBot::DismissBotMsg(CDismissBotMsg *msg) { - if (_npcFlags & NPCFLAG_10000) { + if (_npcFlags & NPCFLAG_MOVING) { playClip("Walk Off", MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE); if (_npcFlags & NPCFLAG_START_IDLING) { _npcFlags &= ~NPCFLAG_START_IDLING; @@ -167,7 +167,7 @@ bool CBellBot::TrueTalkTriggerActionMsg(CTrueTalkTriggerActionMsg *msg) { } case 5: - _npcFlags &= ~NPCFLAG_20000; + _npcFlags &= ~NPCFLAG_MOVE_START; playClip("Walk Off", MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE); movieEvent(); break; @@ -246,7 +246,7 @@ bool CBellBot::TimerMsg(CTimerMsg *msg) { botMsg.execute(room); } - _npcFlags &= ~NPCFLAG_20000; + _npcFlags &= ~NPCFLAG_MOVE_START; } else { CTrueTalkNPC::TimerMsg(msg); } @@ -256,10 +256,10 @@ bool CBellBot::TimerMsg(CTimerMsg *msg) { bool CBellBot::TrueTalkGetStateValueMsg(CTrueTalkGetStateValueMsg *msg) { CPetControl *pet = getPetControl(); - bool flag = pet ? pet->isRoom59706() : false; + bool isYourStateroom = pet ? pet->isFirstClassSuite() : false; if (msg->_stateNum == 7) - msg->_stateVal = flag ? 1 : 0; + msg->_stateVal = isYourStateroom ? 1 : 0; return true; } diff --git a/engines/titanic/npcs/bilge_succubus.cpp b/engines/titanic/npcs/bilge_succubus.cpp index 628f2eb24b..d5436ebc55 100644 --- a/engines/titanic/npcs/bilge_succubus.cpp +++ b/engines/titanic/npcs/bilge_succubus.cpp @@ -88,7 +88,7 @@ bool CBilgeSuccUBus::PETReceiveMsg(CPETReceiveMsg *msg) { } else { uint roomFlags = pet->getRoomFlags(); CGameObject *mailObject = findMailByFlags( - _v3 && compareRoomNameTo("Titania") ? 3 : _field140, + _v3 && compareRoomNameTo("Titania") ? RFC_TITANIA : _flagsComparison, roomFlags); if (mailObject) { @@ -184,7 +184,7 @@ bool CBilgeSuccUBus::MovieEndMsg(CMovieEndMsg *msg) { if (_offStartFrame >= 0) playSound("z#27.wav"); } else if (msg->_endFrame == _offEndFrame) { - if (_startFrame11 >= 0) + if (_endingStartFrame >= 0) playSound("z#30.wav"); } else { if (msg->_endFrame == _onEndFrame && pet) { @@ -378,8 +378,8 @@ bool CBilgeSuccUBus::EnterViewMsg(CEnterViewMsg *msg) { petSetRemoteTarget(); _mailP = nullptr; - if (_startFrame8 >= 0) - loadFrame(_startFrame8); + if (_initialStartFrame >= 0) + loadFrame(_initialStartFrame); return true; } diff --git a/engines/titanic/npcs/deskbot.cpp b/engines/titanic/npcs/deskbot.cpp index 20dc3af39b..56f4d98f18 100644 --- a/engines/titanic/npcs/deskbot.cpp +++ b/engines/titanic/npcs/deskbot.cpp @@ -87,7 +87,7 @@ bool CDeskbot::TurnOn(CTurnOn *msg) { playSound("b#69.wav"); petSetArea(PET_CONVERSATION); - _npcFlags |= NPCFLAG_20000; + _npcFlags |= NPCFLAG_MOVE_START; _deskbotActive = true; } @@ -113,7 +113,7 @@ bool CDeskbot::ActMsg(CActMsg *msg) { bool CDeskbot::MovieEndMsg(CMovieEndMsg *msg) { bool flag = false; - if (_npcFlags & NPCFLAG_10000) { + if (_npcFlags & NPCFLAG_MOVING) { if (_classNum) { petSetArea(PET_ROOMS); decTransitions(); @@ -122,32 +122,32 @@ bool CDeskbot::MovieEndMsg(CMovieEndMsg *msg) { _classNum = NO_CLASS; } - _npcFlags &= ~NPCFLAG_10000; + _npcFlags &= ~NPCFLAG_MOVING; flag = true; } - if (_npcFlags & NPCFLAG_40000) { + if (_npcFlags & NPCFLAG_MOVE_LOOP) { _deskbotActive = false; - _npcFlags &= ~(NPCFLAG_40000 | NPCFLAG_20000); + _npcFlags &= ~(NPCFLAG_MOVE_LOOP | NPCFLAG_MOVE_START); - if (_npcFlags & NPCFLAG_80000) { + if (_npcFlags & NPCFLAG_MOVE_FINISH) { CTurnOn turnOn; turnOn.execute("EmbBellbotTrigger"); unlockMouse(); changeView("EmbLobby.Node 4.N", ""); - } else if (_npcFlags & NPCFLAG_100000) { + } else if (_npcFlags & NPCFLAG_MOVE_LEFT) { CTurnOn turnOn; turnOn.execute("EmbDoorBotTrigger"); unlockMouse(); changeView("EmbLobby.Node 4.N", ""); } - _npcFlags &= ~(NPCFLAG_80000 | NPCFLAG_100000); + _npcFlags &= ~(NPCFLAG_MOVE_FINISH | NPCFLAG_MOVE_LEFT); flag = true; } - if (_npcFlags & NPCFLAG_20000) { - _npcFlags &= ~(NPCFLAG_40000 | NPCFLAG_20000); + if (_npcFlags & NPCFLAG_MOVE_START) { + _npcFlags &= ~(NPCFLAG_MOVE_LOOP | NPCFLAG_MOVE_START); setTalking(this, true, findView()); _npcFlags |= NPCFLAG_START_IDLING; @@ -176,7 +176,7 @@ bool CDeskbot::TrueTalkTriggerActionMsg(CTrueTalkTriggerActionMsg *msg) { lockMouse(); petSetArea(PET_CONVERSATION); playClip("ReprogramPETInHand", MOVIE_NOTIFY_OBJECT); - _npcFlags |= NPCFLAG_10000; + _npcFlags |= NPCFLAG_MOVING; _classNum = (PassengerClass)msg->_param1; switch (_classNum) { @@ -231,7 +231,7 @@ bool CDeskbot::TrueTalkTriggerActionMsg(CTrueTalkTriggerActionMsg *msg) { break; case 26: - _npcFlags |= NPCFLAG_80000; + _npcFlags |= NPCFLAG_MOVE_FINISH; CTurnOff turnOff; turnOff.execute(this); lockMouse(); @@ -254,7 +254,7 @@ bool CDeskbot::NPCPlayIdleAnimationMsg(CNPCPlayIdleAnimationMsg *msg) { } bool CDeskbot::TrueTalkNotifySpeechStartedMsg(CTrueTalkNotifySpeechStartedMsg *msg) { - if (_npcFlags & NPCFLAG_40000) + if (_npcFlags & NPCFLAG_MOVE_LOOP) return true; CTrueTalkNPC::TrueTalkNotifySpeechStartedMsg(msg); @@ -274,7 +274,7 @@ bool CDeskbot::TrueTalkNotifySpeechStartedMsg(CTrueTalkNotifySpeechStartedMsg *m } bool CDeskbot::TrueTalkNotifySpeechEndedMsg(CTrueTalkNotifySpeechEndedMsg *msg) { - if (_npcFlags & NPCFLAG_40000) + if (_npcFlags & NPCFLAG_MOVE_LOOP) return true; CTurnOff turnOff; @@ -285,11 +285,11 @@ bool CDeskbot::TrueTalkNotifySpeechEndedMsg(CTrueTalkNotifySpeechEndedMsg *msg) case 41787: case 41788: case 41789: - _npcFlags |= NPCFLAG_80000; + _npcFlags |= NPCFLAG_MOVE_FINISH; turnOff.execute(this); case 41686: - _npcFlags |= NPCFLAG_100000; + _npcFlags |= NPCFLAG_MOVE_LEFT; turnOff.execute(this); break; @@ -305,7 +305,7 @@ bool CDeskbot::TurnOff(CTurnOff *msg) { stopMovie(); performAction(1, findView()); - _npcFlags = (_npcFlags & ~(NPCFLAG_SPEAKING | NPCFLAG_IDLING | NPCFLAG_START_IDLING)) | NPCFLAG_40000; + _npcFlags = (_npcFlags & ~(NPCFLAG_SPEAKING | NPCFLAG_IDLING | NPCFLAG_START_IDLING)) | NPCFLAG_MOVE_LOOP; playClip("Closing", MOVIE_GAMESTATE | MOVIE_NOTIFY_OBJECT); } diff --git a/engines/titanic/npcs/doorbot.cpp b/engines/titanic/npcs/doorbot.cpp index ae59497ee8..79e3dafed4 100644 --- a/engines/titanic/npcs/doorbot.cpp +++ b/engines/titanic/npcs/doorbot.cpp @@ -120,9 +120,9 @@ bool CDoorbot::MovieEndMsg(CMovieEndMsg *msg) { } CTrueTalkNPC::MovieEndMsg(msg); - } else if (_npcFlags & NPCFLAG_100000) { + } else if (_npcFlags & NPCFLAG_MOVE_LEFT) { if (clipExistsByEnd("Cloak Off", msg->_endFrame)) { - _npcFlags = (_npcFlags & ~NPCFLAG_8) | NPCFLAG_START_IDLING; + _npcFlags = (_npcFlags & ~NPCFLAG_DOORBOT_IN_HOME) | NPCFLAG_START_IDLING; setTalking(this, false); startTalking(this, 221474); _npcFlags |= NPCFLAG_DOORBOT_INTRO; @@ -134,7 +134,7 @@ bool CDoorbot::MovieEndMsg(CMovieEndMsg *msg) { } else { CTrueTalkNPC::MovieEndMsg(msg); } - } else if (_npcFlags & NPCFLAG_400000) { + } else if (_npcFlags & NPCFLAG_MOVE_END) { if (clipExistsByEnd("Whizz On Left", msg->_endFrame) || clipExistsByEnd("Whizz On Right", msg->_endFrame)) { setPosition(Point((600 - _bounds.width()) / 2 + 18, 42)); @@ -146,7 +146,7 @@ bool CDoorbot::MovieEndMsg(CMovieEndMsg *msg) { || clipExistsByEnd("Whizz Off Right", msg->_endFrame)) { CPutBotBackInHisBoxMsg boxMsg; boxMsg.execute(this); - if (_npcFlags & NPCFLAG_4000000) + if (_npcFlags & NPCFLAG_SUMMON_BELLBOT) startAnimTimer("SummonBellbot", 1500); } else { CTrueTalkNPC::MovieEndMsg(msg); @@ -187,7 +187,7 @@ bool CDoorbot::OnSummonBotMsg(COnSummonBotMsg *msg) { playClip(getRandomNumber(1) ? "Whizz On Left" : "Whizz On Right", MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE); movieEvent(); - _npcFlags |= NPCFLAG_400000; + _npcFlags |= NPCFLAG_MOVE_END; return true; } @@ -199,7 +199,7 @@ bool CDoorbot::TrueTalkTriggerActionMsg(CTrueTalkTriggerActionMsg *msg) { break; case 4: - _npcFlags = (_npcFlags & ~NPCFLAG_IDLING) | NPCFLAG_4000000; + _npcFlags = (_npcFlags & ~NPCFLAG_IDLING) | NPCFLAG_SUMMON_BELLBOT; playClip("Whizz Off Left", MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE); break; @@ -217,12 +217,12 @@ bool CDoorbot::TrueTalkTriggerActionMsg(CTrueTalkTriggerActionMsg *msg) { bool CDoorbot::DoorbotNeededInHomeMsg(CDoorbotNeededInHomeMsg *msg) { moveToView(); setPosition(Point(90, 42)); - _npcFlags = NPCFLAG_100000; + _npcFlags = NPCFLAG_MOVE_LEFT; stopMovie(); playClip("Cloak Off", MOVIE_NOTIFY_OBJECT); - _npcFlags |= NPCFLAG_8; + _npcFlags |= NPCFLAG_DOORBOT_IN_HOME; return true; } @@ -232,7 +232,7 @@ bool CDoorbot::DoorbotNeededInElevatorMsg(CDoorbotNeededInElevatorMsg *msg) { if (_npcFlags & NPCFLAG_DOORBOT_INTRO) { _introMovieNum = 7; - _npcFlags |= NPCFLAG_200000; + _npcFlags |= NPCFLAG_MOVE_RIGHT; loadFrame(797); } else { _npcFlags = 0; @@ -244,7 +244,7 @@ bool CDoorbot::DoorbotNeededInElevatorMsg(CDoorbotNeededInElevatorMsg *msg) { } bool CDoorbot::LeaveViewMsg(CLeaveViewMsg *msg) { - if (!(_npcFlags & NPCFLAG_DOORBOT_INTRO) && (_npcFlags & NPCFLAG_400000)) { + if (!(_npcFlags & NPCFLAG_DOORBOT_INTRO) && (_npcFlags & NPCFLAG_MOVE_END)) { performAction(true); _npcFlags &= ~NPCFLAG_START_IDLING; } @@ -320,7 +320,7 @@ bool CDoorbot::TimerMsg(CTimerMsg *msg) { botMsg.execute(room); } - _npcFlags &= ~NPCFLAG_4000000; + _npcFlags &= ~NPCFLAG_SUMMON_BELLBOT; } return true; @@ -342,7 +342,7 @@ bool CDoorbot::NPCPlayTalkingAnimationMsg(CNPCPlayTalkingAnimationMsg *msg) { }; if (msg->_value2 != 2) { - if (_npcFlags & NPCFLAG_200000) { + if (_npcFlags & NPCFLAG_MOVE_RIGHT) { switch (_introMovieNum) { case 8: case 10: @@ -355,7 +355,7 @@ bool CDoorbot::NPCPlayTalkingAnimationMsg(CNPCPlayTalkingAnimationMsg *msg) { default: break; } - } else if (_npcFlags & (NPCFLAG_100000 | NPCFLAG_400000)) { + } else if (_npcFlags & (NPCFLAG_MOVE_LEFT | NPCFLAG_MOVE_END)) { msg->_names = NAMES1; } } @@ -368,8 +368,8 @@ bool CDoorbot::NPCPlayIdleAnimationMsg(CNPCPlayIdleAnimationMsg *msg) { "Hand swivel", "Prompt Push", "Eye Roll", "Say something", nullptr }; - if (!(_npcFlags & (NPCFLAG_100000 | NPCFLAG_200000)) - && (_npcFlags & NPCFLAG_400000)) + if (!(_npcFlags & (NPCFLAG_MOVE_LEFT | NPCFLAG_MOVE_RIGHT)) + && (_npcFlags & NPCFLAG_MOVE_END)) msg->_names = NAMES; return true; @@ -377,7 +377,7 @@ bool CDoorbot::NPCPlayIdleAnimationMsg(CNPCPlayIdleAnimationMsg *msg) { bool CDoorbot::PutBotBackInHisBoxMsg(CPutBotBackInHisBoxMsg *msg) { petMoveToHiddenRoom(); - _npcFlags &= ~(NPCFLAG_START_IDLING | NPCFLAG_100000 | NPCFLAG_200000 | NPCFLAG_DOORBOT_INTRO); + _npcFlags &= ~(NPCFLAG_START_IDLING | NPCFLAG_MOVE_LEFT | NPCFLAG_MOVE_RIGHT | NPCFLAG_DOORBOT_INTRO); if (msg->_value) performAction(true); @@ -385,7 +385,7 @@ bool CDoorbot::PutBotBackInHisBoxMsg(CPutBotBackInHisBoxMsg *msg) { } bool CDoorbot::DismissBotMsg(CDismissBotMsg *msg) { - if (_npcFlags & NPCFLAG_400000) { + if (_npcFlags & NPCFLAG_MOVE_END) { playClip(getRandomNumber(1) ? "Whizz Off Left" : "Whizz Off Right", MOVIE_STOP_PREVIOUS | MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE); movieEvent(); diff --git a/engines/titanic/npcs/parrot.cpp b/engines/titanic/npcs/parrot.cpp index 9e6366ace2..b570bea6ae 100644 --- a/engines/titanic/npcs/parrot.cpp +++ b/engines/titanic/npcs/parrot.cpp @@ -45,69 +45,23 @@ BEGIN_MESSAGE_MAP(CParrot, CTrueTalkNPC) ON_MESSAGE(LeaveRoomMsg) END_MESSAGE_MAP() -int CParrot::_v1; -int CParrot::_v2; -int CParrot::_v3; +bool CParrot::_eatingChicken; +bool CParrot::_takeOff; +bool CParrot::_unused; ParrotState CParrot::_state; -int CParrot::_v5; +bool CParrot::_coreReplaced; CParrot::CParrot() : CTrueTalkNPC() { - _field108 = 0; - _string2 = "CarryParrot"; - _field118 = 1; - _field11C = 25; + _unused1 = 0; + _carryParrot = "CarryParrot"; + _canDrag = true; + _unused2 = 25; _lastSpeakTime = 0; _newXp = 73; _newXc = 58; - _field12C = 0; - _field130 = 0; + _canEatChicken = false; + _eatOffsetX = 0; _panTarget = nullptr; - _field138 = 851; - _field13C = 851; - _field140 = 265; - _field144 = 274; - _field148 = 726; - _field14C = 730; - _field150 = 510; - _field154 = 570; - _field158 = 569; - _field15C = 689; - _field160 = 690; - _field164 = 725; - _field168 = 375; - _field16C = 508; - _field170 = 363; - _field174 = 375; - _field178 = 303; - _field17C = 313; - _field180 = 279; - _field184 = 302; - _field188 = 260; - _field18C = 264; - _field190 = 315; - _field194 = 327; - _field198 = 330; - _field19C = 360; - _field1A0 = 175; - _field1A4 = 259; - _field1A8 = 175; - _field1AC = 175; - _field1B0 = 162; - _field1B4 = 175; - _field1B8 = 150; - _field1BC = 162; - _field1C0 = 135; - _field1C4 = 150; - _field1C8 = 95; - _field1CC = 135; - _field1D0 = 76; - _field1D4 = 95; - _field1D8 = 55; - _field1DC = 76; - _field1E0 = 30; - _field1E4 = 55; - _field1E8 = 0; - _field1EC = 30; _assetName = "z454.dlg"; _assetNumber = 0x13880; @@ -118,21 +72,21 @@ void CParrot::save(SimpleFile *file, int indent) { file->writeNumberLine(_assetNumber, indent); file->writeQuotedLine(_assetName, indent); - file->writeNumberLine(_field108, indent); - file->writeNumberLine(_v1, indent); - file->writeNumberLine(_v2, indent); - file->writeNumberLine(_v3, indent); - - file->writeQuotedLine(_string2, indent); - file->writeNumberLine(_field118, indent); - file->writeNumberLine(_field11C, indent); + file->writeNumberLine(_unused1, indent); + file->writeNumberLine(_eatingChicken, indent); + file->writeNumberLine(_takeOff, indent); + file->writeNumberLine(_unused, indent); + + file->writeQuotedLine(_carryParrot, indent); + file->writeNumberLine(_canDrag, indent); + file->writeNumberLine(_unused2, indent); file->writeNumberLine(_lastSpeakTime, indent); file->writeNumberLine(_newXp, indent); file->writeNumberLine(_newXc, indent); - file->writeNumberLine(_field12C, indent); - file->writeNumberLine(_field130, indent); + file->writeNumberLine(_canEatChicken, indent); + file->writeNumberLine(_eatOffsetX, indent); file->writeNumberLine(_state, indent); - file->writeNumberLine(_v5, indent); + file->writeNumberLine(_coreReplaced, indent); CTrueTalkNPC::save(file, indent); } @@ -142,21 +96,21 @@ void CParrot::load(SimpleFile *file) { _assetNumber = file->readNumber(); _assetName = file->readString(); - _field108 = file->readNumber(); - _v1 = file->readNumber(); - _v2 = file->readNumber(); - _v3 = file->readNumber(); - - _string2 = file->readString(); - _field118 = file->readNumber(); - _field11C = file->readNumber(); + _unused1 = file->readNumber(); + _eatingChicken = file->readNumber(); + _takeOff = file->readNumber(); + _unused = file->readNumber(); + + _carryParrot = file->readString(); + _canDrag = file->readNumber(); + _unused2 = file->readNumber(); _lastSpeakTime = file->readNumber(); _newXp = file->readNumber(); _newXc = file->readNumber(); - _field12C = file->readNumber(); - _field130 = file->readNumber(); + _canEatChicken = file->readNumber(); + _eatOffsetX = file->readNumber(); _state = (ParrotState)file->readNumber(); - _v5 = file->readNumber(); + _coreReplaced = file->readNumber(); CTrueTalkNPC::load(file); } @@ -168,8 +122,8 @@ bool CParrot::ActMsg(CActMsg *msg) { } else if (msg->_action == "Chicken") { // Nothing to do } else if (msg->_action == "CarryParrotLeftView") { - if (!_v2) { - _v1 = 0; + if (!_takeOff) { + _eatingChicken = false; CStatusChangeMsg statusMsg; statusMsg._newStatus = 1; statusMsg.execute("PerchCoreHolder"); @@ -178,12 +132,12 @@ bool CParrot::ActMsg(CActMsg *msg) { if (_state == PARROT_IN_CAGE) { stopMovie(); startTalking(this, 280275, findView()); - _field12C = 0; + _canEatChicken = false; } } else if (msg->_action == "EnteringFromTOW" && (_state == PARROT_IN_CAGE || _state == PARROT_ESCAPED)) { - if (_v2) { - _v2 = 2; + if (_takeOff) { + _state = PARROT_ESCAPED; } else { setVisible(true); CTreeItem *cageBar = getRoot()->findByName("CageBar"); @@ -202,7 +156,7 @@ bool CParrot::ActMsg(CActMsg *msg) { } bool CParrot::MouseButtonDownMsg(CMouseButtonDownMsg *msg) { - if (!(_npcFlags & NPCFLAG_2000000) && _speechCounter == 0) { + if (!(_npcFlags & NPCFLAG_TAKE_OFF) && _speechCounter == 0) { CTrueTalkTriggerActionMsg triggerMsg(280250, 280250, 1); triggerMsg.execute(this); } @@ -211,7 +165,7 @@ bool CParrot::MouseButtonDownMsg(CMouseButtonDownMsg *msg) { } bool CParrot::MovieEndMsg(CMovieEndMsg *msg) { - if ((_npcFlags & NPCFLAG_2000000) && clipExistsByEnd("Take Off", msg->_endFrame)) { + if ((_npcFlags & NPCFLAG_TAKE_OFF) && clipExistsByEnd("Take Off", msg->_endFrame)) { setVisible(false); moveUnder(findRoom()); stopMovie(); @@ -228,21 +182,23 @@ bool CParrot::MovieEndMsg(CMovieEndMsg *msg) { actMsg2.execute("ParrotCage"); } - _npcFlags &= ~NPCFLAG_2000000; + _npcFlags &= ~NPCFLAG_TAKE_OFF; _state = PARROT_ESCAPED; - } else if (_npcFlags & NPCFLAG_10000) { - if (_npcFlags & NPCFLAG_20000) { - _npcFlags = (_npcFlags & ~NPCFLAG_20000) | NPCFLAG_40000; - if (_npcFlags & NPCFLAG_100000) { + } else if (_npcFlags & NPCFLAG_MOVING) { + if (_npcFlags & NPCFLAG_MOVE_START) { + // Parrot is about to loop + _npcFlags = (_npcFlags & ~NPCFLAG_MOVE_START) | NPCFLAG_MOVE_LOOP; + if (_npcFlags & NPCFLAG_MOVE_LEFT) { playClip("Walk Left Loop", MOVIE_NOTIFY_OBJECT); movieEvent(236); } else { playClip("Walk Right Loop", MOVIE_NOTIFY_OBJECT); } - } else if (_npcFlags & NPCFLAG_40000) { + } else if (_npcFlags & NPCFLAG_MOVE_LOOP) { + // In progress movement loop int xp = _bounds.left + _bounds.width() / 2; - if (_npcFlags & NPCFLAG_100000) { + if (_npcFlags & NPCFLAG_MOVE_LEFT) { if ((xp - _newXc) > 32) { setPosition(Point(_bounds.left - 40, _bounds.top)); playClip("Walk Left Loop", MOVIE_NOTIFY_OBJECT); @@ -250,7 +206,7 @@ bool CParrot::MovieEndMsg(CMovieEndMsg *msg) { } else { setPosition(Point(_bounds.left - 10, _bounds.top)); playClip("Walk Left Outro", MOVIE_NOTIFY_OBJECT); - _npcFlags = (_npcFlags & ~NPCFLAG_40000) | NPCFLAG_80000; + _npcFlags = (_npcFlags & ~NPCFLAG_MOVE_LOOP) | NPCFLAG_MOVE_FINISH; } } else { if ((_newXc - xp) > 32) { @@ -258,86 +214,92 @@ bool CParrot::MovieEndMsg(CMovieEndMsg *msg) { movieEvent(244); } else { playClip("Walk Right Outro", MOVIE_NOTIFY_OBJECT); - _npcFlags = (_npcFlags & NPCFLAG_40000) | NPCFLAG_80000; + _npcFlags = (_npcFlags & ~NPCFLAG_MOVE_LOOP) | NPCFLAG_MOVE_FINISH; } } - } else if (_npcFlags & NPCFLAG_80000) { + } else if (_npcFlags & NPCFLAG_MOVE_FINISH) { + // Finishing movement loadFrame(0); - if (_npcFlags & NPCFLAG_100000) + if (_npcFlags & NPCFLAG_MOVE_LEFT) setPosition(Point(_bounds.left - 30, _bounds.top)); else setPosition(Point(_bounds.left + 14, _bounds.top)); - _npcFlags &= ~(NPCFLAG_10000 | NPCFLAG_80000 | NPCFLAG_100000 | NPCFLAG_200000); + _npcFlags &= ~(NPCFLAG_MOVING | NPCFLAG_MOVE_FINISH | NPCFLAG_MOVE_LEFT | NPCFLAG_MOVE_RIGHT); CTrueTalkNPC::MovieEndMsg(msg); - } else { - if (_npcFlags & NPCFLAG_1000000) { - Point pt = getMousePos(); - if (pt.x > 70 || pt.y < 90 || pt.y > 280) { - stopMovie(); - loadFrame(0); - _npcFlags &= ~NPCFLAG_1000000; - } + } + } else if (_npcFlags & NPCFLAG_CHICKEN_OUTSIDE_CAGE) { + Point pt = getMousePos(); + if (pt.x > 70 || pt.y < 90 || pt.y > 280) { + stopMovie(); + loadFrame(0); + _npcFlags &= ~NPCFLAG_CHICKEN_OUTSIDE_CAGE; + } - if (clipExistsByEnd("Walk Left Loop", msg->_endFrame)) { - playClip("Lean Over To Chicken", MOVIE_NOTIFY_OBJECT); - setPosition(Point(_bounds.left - 55, _bounds.top)); - _field130 = (-100 - _bounds.left) / 5; - movieEvent(261); - movieEvent(262); - movieEvent(265); - movieEvent(268); - movieEvent(271); - return true; - - } else if (clipExistsByEnd("Lean Over To Chicken", msg->_endFrame)) { - playClip("Eat Chicken"); - playClip("Eat Chicken 2", MOVIE_NOTIFY_OBJECT); - _v1 = 1; - - CStatusChangeMsg statusMsg; - statusMsg._newStatus = 0; - statusMsg.execute("PerchCoreHolder"); - - CTrueTalkTriggerActionMsg actionMsg; - actionMsg._param1 = 280266; - actionMsg._param2 = 1; - actionMsg.execute(this); - - CCarry *chicken = dynamic_cast<CCarry *>(findUnder(getRoot(), "Chicken")); - if (chicken) { - CActMsg actMsg("Eaten"); - actMsg.execute(chicken); - } - - _npcFlags &= ~NPCFLAG_1000000; - return true; - } - } + if (clipExistsByEnd("Walk Left Loop", msg->_endFrame)) { + playClip("Lean Over To Chicken", MOVIE_NOTIFY_OBJECT); + setPosition(Point(_bounds.left - 55, _bounds.top)); + _eatOffsetX = (-100 - _bounds.left) / 5; + movieEvent(261); + movieEvent(262); + movieEvent(265); + movieEvent(268); + movieEvent(271); + return true; - if (clipExistsByEnd("Eat Chicken 2", msg->_endFrame)) { - CStatusChangeMsg statusMsg; - statusMsg._newStatus = 1; - statusMsg.execute("PerchCoreHolder"); + } else if (clipExistsByEnd("Lean Over To Chicken", msg->_endFrame)) { + // Leaning left out of cage to eat the chicken + playClip("Eat Chicken"); + playClip("Eat Chicken 2", MOVIE_NOTIFY_OBJECT); + _eatingChicken = true; - if (_v2) { - loadMovie("z168.avi", false); - playClip("Take Off", MOVIE_NOTIFY_OBJECT); - setPosition(Point(20, 10)); - _npcFlags |= NPCFLAG_2000000; - } else { - _npcFlags &= ~(NPCFLAG_10000 | NPCFLAG_20000 | NPCFLAG_40000 | NPCFLAG_80000 | NPCFLAG_100000 | NPCFLAG_200000); - _npcFlags |= NPCFLAG_400000; - stopMovie(); - loadFrame(0); - setPosition(Point(-90, _bounds.top)); - } - } else { - CTrueTalkNPC::MovieEndMsg(msg); + CStatusChangeMsg statusMsg; + statusMsg._newStatus = 0; + statusMsg.execute("PerchCoreHolder"); + + CTrueTalkTriggerActionMsg actionMsg; + actionMsg._action = 280266; + actionMsg._param2 = 1; + actionMsg.execute(this); + + CCarry *chicken = dynamic_cast<CCarry *>(findUnder(getRoot(), "Chicken")); + if (chicken) { + CActMsg actMsg("Eaten"); + actMsg.execute(chicken); } + + _npcFlags &= ~NPCFLAG_CHICKEN_OUTSIDE_CAGE; + return true; } } + if (clipExistsByEnd("Eat Chicken 2", msg->_endFrame)) { + // Parrot has finished eating Chicken + _eatingChicken = false; + + CStatusChangeMsg statusMsg; + statusMsg._newStatus = 1; + statusMsg.execute("PerchCoreHolder"); + + if (_takeOff) { + // Perch has been taken, so take off + loadMovie("z168.avi", false); + playClip("Take Off", MOVIE_NOTIFY_OBJECT); + setPosition(Point(20, 10)); + _npcFlags |= NPCFLAG_TAKE_OFF; + } else { + // Resetting back to standing + _npcFlags &= ~(NPCFLAG_MOVING | NPCFLAG_MOVE_START | NPCFLAG_MOVE_LOOP + | NPCFLAG_MOVE_FINISH | NPCFLAG_MOVE_LEFT | NPCFLAG_MOVE_RIGHT); + _npcFlags |= NPCFLAG_MOVE_END; + stopMovie(); + loadFrame(0); + setPosition(Point(-90, _bounds.top)); + } + } else { + return CTrueTalkNPC::MovieEndMsg(msg); + } + return true; } @@ -349,8 +311,9 @@ bool CParrot::EnterViewMsg(CEnterViewMsg *msg) { if (_state == PARROT_IN_CAGE) { setPosition(Point(_newXp, _bounds.top)); - _field118 = 1; - _npcFlags &= ~(NPCFLAG_10000 | NPCFLAG_20000 | NPCFLAG_40000 | NPCFLAG_80000 | NPCFLAG_100000 | NPCFLAG_200000 | NPCFLAG_400000); + _canDrag = true; + _npcFlags &= ~(NPCFLAG_MOVING | NPCFLAG_MOVE_START | NPCFLAG_MOVE_LOOP + | NPCFLAG_MOVE_FINISH | NPCFLAG_MOVE_LEFT | NPCFLAG_MOVE_RIGHT | NPCFLAG_MOVE_END); loadFrame(0); setTalking(this, true, findView()); @@ -361,7 +324,7 @@ bool CParrot::EnterViewMsg(CEnterViewMsg *msg) { } petSetArea(PET_CONVERSATION); - _field12C = 0; + _canEatChicken = false; _npcFlags |= NPCFLAG_START_IDLING; } @@ -378,7 +341,7 @@ bool CParrot::TrueTalkTriggerActionMsg(CTrueTalkTriggerActionMsg *msg) { } bool CParrot::MouseDragStartMsg(CMouseDragStartMsg *msg) { - if (_field118 && _state == PARROT_IN_CAGE && checkPoint(msg->_mousePos, false, true)) { + if (_canDrag && _state == PARROT_IN_CAGE && checkPoint(msg->_mousePos, false, true)) { setVisible(false); CRoomItem *room = findRoom(); @@ -386,7 +349,7 @@ bool CParrot::MouseDragStartMsg(CMouseDragStartMsg *msg) { startTalking(this, 280129); performAction(true); - CCarry *item = dynamic_cast<CCarry *>(getRoot()->findByName(_string2)); + CCarry *item = dynamic_cast<CCarry *>(getRoot()->findByName(_carryParrot)); if (item) { item->_canTake = true; CPassOnDragStartMsg passMsg; @@ -483,7 +446,8 @@ bool CParrot::NPCPlayTalkingAnimationMsg(CNPCPlayTalkingAnimationMsg *msg) { "Talking5", "Talking6", "Talking7", nullptr }; - if (!(_npcFlags & (NPCFLAG_10000 | NPCFLAG_20000 | NPCFLAG_40000 | NPCFLAG_80000 | NPCFLAG_100000 | NPCFLAG_200000 | NPCFLAG_400000)) + if (!(_npcFlags & (NPCFLAG_MOVING | NPCFLAG_MOVE_START | NPCFLAG_MOVE_LOOP | NPCFLAG_MOVE_FINISH + | NPCFLAG_MOVE_LEFT | NPCFLAG_MOVE_RIGHT | NPCFLAG_MOVE_END)) && _visible && _state == PARROT_IN_CAGE) { if (!compareViewNameTo("ParrotLobby.Node 1.N")) msg->_names = NAMES; @@ -498,11 +462,12 @@ bool CParrot::NPCPlayIdleAnimationMsg(CNPCPlayIdleAnimationMsg *msg) { "Peck At Feet Right", nullptr }; - if (!(_npcFlags & (NPCFLAG_10000 | NPCFLAG_20000 | NPCFLAG_40000 | NPCFLAG_80000 | NPCFLAG_100000 | NPCFLAG_200000 | NPCFLAG_400000)) + if (!(_npcFlags & (NPCFLAG_MOVING | NPCFLAG_MOVE_START | NPCFLAG_MOVE_LOOP | NPCFLAG_MOVE_FINISH + | NPCFLAG_MOVE_LEFT | NPCFLAG_MOVE_RIGHT | NPCFLAG_MOVE_END)) && _visible && _state == PARROT_IN_CAGE && !compareViewNameTo("ParrotLobby.Node 1.N")) { CGameObject *dragItem = getDraggingObject(); if (!dragItem || dragItem->getName() == "Chicken") { - if (!_v5 ||getRandomNumber(3) != 0) { + if (!_coreReplaced ||getRandomNumber(3) != 0) { if (getRandomNumber(1)) { startTalking(this, 280267, findView()); } else { @@ -572,8 +537,9 @@ bool CParrot::FrameMsg(CFrameMsg *msg) { Point pt = getMousePos(); CGameObject *dragObject = getDraggingObject(); int xp = _bounds.left + _bounds.width() / 2; + bool chickenFlag = false; - if ((_npcFlags & NPCFLAG_400000) && !hasActiveMovie()) { + if ((_npcFlags & NPCFLAG_MOVE_END) && !hasActiveMovie()) { _newXc = _newXp + _bounds.width() / 2; int xDiff = ABS(xp - _newXc); @@ -584,78 +550,84 @@ bool CParrot::FrameMsg(CFrameMsg *msg) { _panTarget = nullptr; } - _npcFlags &= ~(NPCFLAG_10000 | NPCFLAG_20000 | NPCFLAG_40000 - | NPCFLAG_80000 | NPCFLAG_100000 | NPCFLAG_200000 | NPCFLAG_400000); + _npcFlags &= ~(NPCFLAG_MOVING | NPCFLAG_MOVE_START | NPCFLAG_MOVE_LOOP + | NPCFLAG_MOVE_FINISH | NPCFLAG_MOVE_LEFT | NPCFLAG_MOVE_RIGHT | NPCFLAG_MOVE_END); return true; } - } - - bool chickenFlag = dragObject && dragObject->isEquals("Chicken"); - - if (_npcFlags & NPCFLAG_1000000) { - if (!chickenFlag || pt.x > 70 || pt.y < 90 || pt.y > 280) { - stopMovie(); - loadFrame(0); - setPosition(Point(-90, _bounds.top)); - } } else { - if (!chickenFlag) - return false; + if (dragObject) + chickenFlag = dragObject && dragObject->isEquals("Chicken"); + + if (_npcFlags & NPCFLAG_CHICKEN_OUTSIDE_CAGE) { + if (!chickenFlag || pt.x > 70 || pt.y < 90 || pt.y > 280) { + // A start of eating the chicken outside the cage has to be + // aborted because the chicken has been moved out of range + stopMovie(); + loadFrame(0); + setPosition(Point(-90, _bounds.top)); + _npcFlags &= ~NPCFLAG_CHICKEN_OUTSIDE_CAGE; + } + } else { + if (!chickenFlag) + return false; + } + + _newXc = CLIP((int)pt.x, 230, 480); } - _newXc = CLIP((int)pt.x, 230, 480); - if ((_npcFlags & NPCFLAG_10000) || hasActiveMovie()) + if ((_npcFlags & NPCFLAG_MOVING) || hasActiveMovie()) return true; - if (_newXc > 64) { - _npcFlags |= NPCFLAG_10000 | NPCFLAG_20000; + if (ABS(_newXc - xp) > 64) { + _npcFlags |= NPCFLAG_MOVING | NPCFLAG_MOVE_START; if (_newXc >= xp) { setPosition(Point(_bounds.left + 30, _bounds.top)); - _npcFlags |= NPCFLAG_200000; + _npcFlags |= NPCFLAG_MOVE_RIGHT; playClip("Walk Right Intro", MOVIE_NOTIFY_OBJECT); } else { - _npcFlags |= NPCFLAG_100000; + _npcFlags |= NPCFLAG_MOVE_LEFT; playClip("Walk Left Intro", MOVIE_NOTIFY_OBJECT); } - } else if (chickenFlag && pt.y >= 90 && pt.y <= 280 && !_field12C) { + } else if (chickenFlag && pt.y >= 90 && pt.y <= 280 && !_canEatChicken) { CParrotTriesChickenMsg triesMsg; triesMsg.execute(dragObject); CTrueTalkTriggerActionMsg triggerMsg; - int id; + int &action = triggerMsg._action; switch (triesMsg._value2) { case 1: - id = 280056 + (triesMsg._value1 ? 234 : 0); + action = 280056 + (triesMsg._value1 ? 234 : 0); break; case 2: - id = 280055 + (triesMsg._value1 ? 234 : 0); + action = 280055 + (triesMsg._value1 ? 234 : 0); break; case 3: - id = 280054 + (triesMsg._value1 ? 234 : 0); + action = 280054 + (triesMsg._value1 ? 234 : 0); break; default: - id = 280053 + (triesMsg._value1 ? 234 : 0); + action = 280053 + (triesMsg._value1 ? 234 : 0); break; } - if (id < 280266) { + if (action != 280266) { if (pt.x < 75) { - _npcFlags |= NPCFLAG_1000000; + // Parrot needs to reach outside the cage + _npcFlags |= NPCFLAG_CHICKEN_OUTSIDE_CAGE; playClip("Walk Left Intro", MOVIE_STOP_PREVIOUS); playClip("Walk Left Loop", MOVIE_NOTIFY_OBJECT); movieEvent(236); chickenFlag = false; } else if ((pt.x - xp) > 15) { - _npcFlags |= NPCFLAG_800000; + _npcFlags |= NPCFLAG_PECKING; playClip("Peck At Feet Right", MOVIE_NOTIFY_OBJECT); movieEvent(170); } else if ((xp - pt.x) > 15) { - _npcFlags |= NPCFLAG_800000; + _npcFlags |= NPCFLAG_PECKING; playClip("Peck At Feet Left", MOVIE_NOTIFY_OBJECT); movieEvent(142); } else { - _npcFlags |= NPCFLAG_800000; + _npcFlags |= NPCFLAG_PECKING; playClip("Peck At Feet", MOVIE_NOTIFY_OBJECT); movieEvent(157); } @@ -664,7 +636,7 @@ bool CParrot::FrameMsg(CFrameMsg *msg) { if (chickenFlag) { triggerMsg._param2 = 1; triggerMsg.execute(this); - _field12C = 1; + _canEatChicken = true; } } @@ -672,26 +644,27 @@ bool CParrot::FrameMsg(CFrameMsg *msg) { } bool CParrot::MovieFrameMsg(CMovieFrameMsg *msg) { - if (_npcFlags & NPCFLAG_800000) { + if (_npcFlags & NPCFLAG_PECKING) { + // Whoopsy, the Parrot got your chicken CCarry *chicken = dynamic_cast<CCarry *>(findUnder(getRoot(), "Chicken")); if (chicken) { CActMsg actMsg("Eaten"); actMsg.execute(chicken); } - _npcFlags &= ~NPCFLAG_800000; + _npcFlags &= ~NPCFLAG_PECKING; } switch (msg->_frameNumber) { case 244: - setPosition(Point(_bounds.left, _bounds.top + 45)); + setPosition(Point(_bounds.left + 45, _bounds.top)); break; case 261: case 262: case 265: case 268: case 271: - setPosition(Point(_bounds.left + _field130, _bounds.top)); + setPosition(Point(_bounds.left + _eatOffsetX, _bounds.top)); break; default: break; @@ -734,14 +707,14 @@ bool CParrot::PanningAwayFromParrotMsg(CPanningAwayFromParrotMsg *msg) { CActMsg actMsg("PanAwayFromParrot"); actMsg.execute(msg->_target); _panTarget = nullptr; - } else if (_v2) { + } else if (_takeOff) { _panTarget = msg->_target; loadMovie("z168.avi", false); stopMovie(); playClip("Take Off", MOVIE_NOTIFY_OBJECT); - _npcFlags |= NPCFLAG_2000000; + _npcFlags |= NPCFLAG_TAKE_OFF; } else { - _npcFlags |= NPCFLAG_400000; + _npcFlags |= NPCFLAG_MOVE_END; _panTarget = msg->_target; stopMovie(); } diff --git a/engines/titanic/npcs/parrot.h b/engines/titanic/npcs/parrot.h index ce0397fb71..c178a2086a 100644 --- a/engines/titanic/npcs/parrot.h +++ b/engines/titanic/npcs/parrot.h @@ -52,68 +52,22 @@ class CParrot : public CTrueTalkNPC { bool PanningAwayFromParrotMsg(CPanningAwayFromParrotMsg *msg); bool LeaveRoomMsg(CLeaveRoomMsg *msg); public: - static int _v1; - static int _v2; - static int _v3; + static bool _eatingChicken; + static bool _takeOff; + static bool _unused; static ParrotState _state; - static int _v5; + static bool _coreReplaced; private: - int _field108; - CString _string2; - int _field118; - int _field11C; + int _unused1; + CString _carryParrot; + bool _canDrag; + int _unused2; uint _lastSpeakTime; int _newXp; int _newXc; - int _field12C; - int _field130; + bool _canEatChicken; + int _eatOffsetX; CMovePlayerTo *_panTarget; - int _field138; - int _field13C; - int _field140; - int _field144; - int _field148; - int _field14C; - int _field150; - int _field154; - int _field158; - int _field15C; - int _field160; - int _field164; - int _field168; - int _field16C; - int _field170; - int _field174; - int _field178; - int _field17C; - int _field180; - int _field184; - int _field188; - int _field18C; - int _field190; - int _field194; - int _field198; - int _field19C; - int _field1A0; - int _field1A4; - int _field1A8; - int _field1AC; - int _field1B0; - int _field1B4; - int _field1B8; - int _field1BC; - int _field1C0; - int _field1C4; - int _field1C8; - int _field1CC; - int _field1D0; - int _field1D4; - int _field1D8; - int _field1DC; - int _field1E0; - int _field1E4; - int _field1E8; - int _field1EC; public: CLASSDEF; CParrot(); diff --git a/engines/titanic/npcs/parrot_succubus.cpp b/engines/titanic/npcs/parrot_succubus.cpp index 08866f187d..2fa5b2f844 100644 --- a/engines/titanic/npcs/parrot_succubus.cpp +++ b/engines/titanic/npcs/parrot_succubus.cpp @@ -34,13 +34,13 @@ BEGIN_MESSAGE_MAP(CParrotSuccUBus, CSuccUBus) ON_MESSAGE(LeaveNodeMsg) END_MESSAGE_MAP() -CParrotSuccUBus::CParrotSuccUBus() : CSuccUBus(), _field1DC(0), +CParrotSuccUBus::CParrotSuccUBus() : CSuccUBus(), _hoseConnected(false), _field1EC(0), _field1F0(376), _field1F4(393) { } void CParrotSuccUBus::save(SimpleFile *file, int indent) { file->writeNumberLine(1, indent); - file->writeNumberLine(_field1DC, indent); + file->writeNumberLine(_hoseConnected, indent); file->writeQuotedLine(_string3, indent); file->writeNumberLine(_field1EC, indent); @@ -49,7 +49,7 @@ void CParrotSuccUBus::save(SimpleFile *file, int indent) { void CParrotSuccUBus::load(SimpleFile *file) { file->readNumber(); - _field1DC = file->readNumber(); + _hoseConnected = file->readNumber(); _string3 = file->readString(); _field1EC = file->readNumber(); @@ -58,13 +58,13 @@ void CParrotSuccUBus::load(SimpleFile *file) { bool CParrotSuccUBus::HoseConnectedMsg(CHoseConnectedMsg *msg) { CPetControl *pet = getPetControl(); - if (msg->_value == _field1DC) + if (msg->_connected == _hoseConnected) return true; if (mailExists(pet->getRoomFlags())) return false; - _field1DC = msg->_value; - if (_field1DC) { + _hoseConnected = msg->_connected; + if (_hoseConnected) { CGameObject *item = msg->_object; _string3 = item->getName(); CHoseConnectedMsg hoseMsg(1, this); @@ -73,7 +73,7 @@ bool CParrotSuccUBus::HoseConnectedMsg(CHoseConnectedMsg *msg) { CPumpingMsg pumpingMsg(1, this); pumpingMsg.execute(this); - _field1DC = 1; + _hoseConnected = true; if (_enabled) { _enabled = false; @@ -82,7 +82,7 @@ bool CParrotSuccUBus::HoseConnectedMsg(CHoseConnectedMsg *msg) { playSound("z#26.wav"); } - playMovie(_field1C4, _field1C8, MOVIE_NOTIFY_OBJECT); + playMovie(_hoseStartFrame, _hoseEndFrame, MOVIE_NOTIFY_OBJECT); } else { stopMovie(); stopSound(_field1EC); @@ -106,8 +106,8 @@ bool CParrotSuccUBus::HoseConnectedMsg(CHoseConnectedMsg *msg) { } bool CParrotSuccUBus::EnterViewMsg(CEnterViewMsg *msg) { - if (_field1DC) { - playMovie(_field1CC, _field1D0, MOVIE_REPEAT); + if (_hoseConnected) { + playMovie(_pumpingStartFrame, _pumpingEndFrame, MOVIE_REPEAT); return true; } else { return CSuccUBus::EnterViewMsg(msg); @@ -115,8 +115,8 @@ bool CParrotSuccUBus::EnterViewMsg(CEnterViewMsg *msg) { } bool CParrotSuccUBus::MovieEndMsg(CMovieEndMsg *msg) { - if (msg->_endFrame == _field1C8) { - playMovie(_field1CC, _field1D0, MOVIE_REPEAT); + if (msg->_endFrame == _hoseEndFrame) { + playMovie(_pumpingStartFrame, _pumpingEndFrame, MOVIE_REPEAT); _field1EC = playSound("z#472.wav"); return true; } else { @@ -125,9 +125,9 @@ bool CParrotSuccUBus::MovieEndMsg(CMovieEndMsg *msg) { } bool CParrotSuccUBus::MouseButtonDownMsg(CMouseButtonDownMsg *msg) { - if (_field1DC) { + if (_hoseConnected) { CHoseConnectedMsg hoseMsg; - hoseMsg._value = 0; + hoseMsg._connected = false; hoseMsg.execute(this); return true; } else { @@ -136,12 +136,12 @@ bool CParrotSuccUBus::MouseButtonDownMsg(CMouseButtonDownMsg *msg) { } bool CParrotSuccUBus::LeaveNodeMsg(CLeaveNodeMsg *msg) { - if (_field1DC) { + if (_hoseConnected) { getHiddenObject(_string3); if (CHose::_statics->_actionTarget.empty()) { playSound("z#51.wav"); CHoseConnectedMsg hoseMsg; - hoseMsg._value = 0; + hoseMsg._connected = false; hoseMsg.execute(this); } } diff --git a/engines/titanic/npcs/parrot_succubus.h b/engines/titanic/npcs/parrot_succubus.h index 74a4a032eb..69a076c622 100644 --- a/engines/titanic/npcs/parrot_succubus.h +++ b/engines/titanic/npcs/parrot_succubus.h @@ -35,7 +35,7 @@ class CParrotSuccUBus : public CSuccUBus { bool MouseButtonDownMsg(CMouseButtonDownMsg *msg); bool LeaveNodeMsg(CLeaveNodeMsg *msg); public: - int _field1DC; + bool _hoseConnected; CString _string3; int _field1EC; int _field1F0; diff --git a/engines/titanic/npcs/succubus.cpp b/engines/titanic/npcs/succubus.cpp index 3534ba03e3..de3c3793e1 100644 --- a/engines/titanic/npcs/succubus.cpp +++ b/engines/titanic/npcs/succubus.cpp @@ -53,10 +53,10 @@ int CSuccUBus::_v3; int CSuccUBus::_v4; CSuccUBus::CSuccUBus() : CTrueTalkNPC() { - _startFrame8 = -1; - _endFrame8 = -1; - _startFrame11 = -1; - _endFrame11 = -1; + _initialStartFrame = -1; + _initialEndFrame = -1; + _endingStartFrame = -1; + _endingEndFrame = -1; _sendStartFrame = 68; _sendEndFrame = 168; _receiveStartFrame = 168; @@ -67,7 +67,7 @@ CSuccUBus::CSuccUBus() : CTrueTalkNPC() { _offEndFrame = 27; _okStartFrame = 40; _okEndFrame = 68; - _field140 = 1; + _flagsComparison = RFC_LOCATION; _mailP = nullptr; _afterReceiveStartFrame = 0; _afterReceiveEndFrame = 0; @@ -86,28 +86,28 @@ CSuccUBus::CSuccUBus() : CTrueTalkNPC() { _soundHandle = -1; _isChicken = false; _isFeathers = false; - _field1AC = 0; - _field1B0 = 0; + _priorRandomVal1 = 0; + _priorRandomVal2 = 0; _emptyStartFrame = 303; _emptyEndFrame = 312; _smokeStartFrame = 313; _smokeEndFrame = 325; - _field1C4 = 326; - _field1C8 = 347; - _field1CC = 348; - _field1D0 = 375; - _field1D4 = 1; - _field1D8 = 0; + _hoseStartFrame = 326; + _hoseEndFrame = 347; + _pumpingStartFrame = 348; + _pumpingEndFrame = 375; + _destRoomFlags = 1; + _inProgress = false; } void CSuccUBus::save(SimpleFile *file, int indent) { file->writeNumberLine(1, indent); file->writeNumberLine(_enabled, indent); - file->writeNumberLine(_startFrame8, indent); - file->writeNumberLine(_endFrame8, indent); - file->writeNumberLine(_startFrame11, indent); - file->writeNumberLine(_endFrame11, indent); + file->writeNumberLine(_initialStartFrame, indent); + file->writeNumberLine(_initialEndFrame, indent); + file->writeNumberLine(_endingStartFrame, indent); + file->writeNumberLine(_endingEndFrame, indent); file->writeNumberLine(_sendStartFrame, indent); file->writeNumberLine(_sendEndFrame, indent); file->writeNumberLine(_receiveStartFrame, indent); @@ -118,7 +118,7 @@ void CSuccUBus::save(SimpleFile *file, int indent) { file->writeNumberLine(_offEndFrame, indent); file->writeNumberLine(_okStartFrame, indent); file->writeNumberLine(_okEndFrame, indent); - file->writeNumberLine(_field140, indent); + file->writeNumberLine(_flagsComparison, indent); file->writeNumberLine(_v2, indent); file->writeNumberLine(_afterReceiveStartFrame, indent); @@ -145,20 +145,20 @@ void CSuccUBus::save(SimpleFile *file, int indent) { file->writeNumberLine(_soundHandle, indent); file->writeNumberLine(_isChicken, indent); file->writeNumberLine(_isFeathers, indent); - file->writeNumberLine(_field1AC, indent); - file->writeNumberLine(_field1B0, indent); + file->writeNumberLine(_priorRandomVal1, indent); + file->writeNumberLine(_priorRandomVal2, indent); file->writeNumberLine(_emptyStartFrame, indent); file->writeNumberLine(_emptyEndFrame, indent); file->writeNumberLine(_smokeStartFrame, indent); file->writeNumberLine(_smokeEndFrame, indent); - file->writeNumberLine(_field1C4, indent); - file->writeNumberLine(_field1C8, indent); - file->writeNumberLine(_field1CC, indent); - file->writeNumberLine(_field1D0, indent); - file->writeNumberLine(_field1D4, indent); + file->writeNumberLine(_hoseStartFrame, indent); + file->writeNumberLine(_hoseEndFrame, indent); + file->writeNumberLine(_pumpingStartFrame, indent); + file->writeNumberLine(_pumpingEndFrame, indent); + file->writeNumberLine(_destRoomFlags, indent); file->writeNumberLine(_v3, indent); - file->writeNumberLine(_field1D8, indent); + file->writeNumberLine(_inProgress, indent); file->writeNumberLine(_field104, indent); CTrueTalkNPC::save(file, indent); @@ -168,10 +168,10 @@ void CSuccUBus::load(SimpleFile *file) { file->readNumber(); _enabled = file->readNumber(); - _startFrame8 = file->readNumber(); - _endFrame8 = file->readNumber(); - _startFrame11 = file->readNumber(); - _endFrame11 = file->readNumber(); + _initialStartFrame = file->readNumber(); + _initialEndFrame = file->readNumber(); + _endingStartFrame = file->readNumber(); + _endingEndFrame = file->readNumber(); _sendStartFrame = file->readNumber(); _sendEndFrame = file->readNumber(); _receiveStartFrame = file->readNumber(); @@ -182,7 +182,7 @@ void CSuccUBus::load(SimpleFile *file) { _offEndFrame = file->readNumber(); _okStartFrame = file->readNumber(); _okEndFrame = file->readNumber(); - _field140 = file->readNumber(); + _flagsComparison = (RoomFlagsComparison)file->readNumber(); _v2 = file->readNumber(); _afterReceiveStartFrame = file->readNumber(); @@ -209,27 +209,27 @@ void CSuccUBus::load(SimpleFile *file) { _soundHandle = file->readNumber(); _isChicken = file->readNumber(); _isFeathers = file->readNumber(); - _field1AC = file->readNumber(); - _field1B0 = file->readNumber(); + _priorRandomVal1 = file->readNumber(); + _priorRandomVal2 = file->readNumber(); _emptyStartFrame = file->readNumber(); _emptyEndFrame = file->readNumber(); _smokeStartFrame = file->readNumber(); _smokeEndFrame = file->readNumber(); - _field1C4 = file->readNumber(); - _field1C8 = file->readNumber(); - _field1CC = file->readNumber(); - _field1D0 = file->readNumber(); - _field1D4 = file->readNumber(); + _hoseStartFrame = file->readNumber(); + _hoseEndFrame = file->readNumber(); + _pumpingStartFrame = file->readNumber(); + _pumpingEndFrame = file->readNumber(); + _destRoomFlags = file->readNumber(); _v3 = file->readNumber(); - _field1D8 = file->readNumber(); + _inProgress = file->readNumber(); _field104 = file->readNumber(); CTrueTalkNPC::load(file); } bool CSuccUBus::MouseButtonDownMsg(CMouseButtonDownMsg *msg) { - if (!_field1D8) { + if (!_inProgress) { Rect tempRect = _rect1; tempRect.translate(_bounds.left, _bounds.top); @@ -242,7 +242,7 @@ bool CSuccUBus::MouseButtonDownMsg(CMouseButtonDownMsg *msg) { CTurnOff offMsg; offMsg.execute(this); } else { - switch (getRandomNumber(2)) { + switch (getRandomNumber(2, &_priorRandomVal1)) { case 0: startTalking(this, 230055, findView()); break; @@ -340,16 +340,16 @@ bool CSuccUBus::EnterViewMsg(CEnterViewMsg *msg) { petSetRemoteTarget(); _mailP = nullptr; - if (_startFrame8 >= 0) - loadFrame(_startFrame8); + if (_initialStartFrame >= 0) + loadFrame(_initialStartFrame); return true; } bool CSuccUBus::LeaveViewMsg(CLeaveViewMsg *msg) { petDisplayMessage(2, BLANK); - if (_startFrame8 >= 0) - loadFrame(_startFrame8); + if (_initialStartFrame >= 0) + loadFrame(_initialStartFrame); else if (!_field15C && _onStartFrame >= 0) loadFrame(_onStartFrame); @@ -376,7 +376,7 @@ bool CSuccUBus::LeaveViewMsg(CLeaveViewMsg *msg) { } bool CSuccUBus::PETDeliverMsg(CPETDeliverMsg *msg) { - if (_field1D8) + if (_inProgress) return true; if (!_enabled) { @@ -409,7 +409,7 @@ bool CSuccUBus::PETDeliverMsg(CPETDeliverMsg *msg) { } else { _sendLost = false; - CRoomFlags roomFlags = _roomFlags; + CRoomFlags roomFlags = _destRoomFlags; if (!pet->isSuccUBusDest(roomFlags) || pet->getMailDestClass(roomFlags) < getPassengerClass()) { roomFlags = pet->getSpecialRoomFlags("BilgeRoom"); _sendLost = true; @@ -419,7 +419,7 @@ bool CSuccUBus::PETDeliverMsg(CPETDeliverMsg *msg) { _isChicken = mailObject->getName() == "Chicken"; _field158 = 0; _field188 = 0; - _field1D8 = 1; + _inProgress = true; incTransitions(); if (_isFeathers) { @@ -466,7 +466,7 @@ bool CSuccUBus::PETDeliverMsg(CPETDeliverMsg *msg) { bool CSuccUBus::PETReceiveMsg(CPETReceiveMsg *msg) { CPetControl *pet = getPetControl(); - if (_field1D8 || !pet) + if (_inProgress || !pet) return true; if (!_enabled) { petDisplayMessage(2, SUCCUBUS_IS_IN_STANDBY); @@ -491,7 +491,7 @@ bool CSuccUBus::PETReceiveMsg(CPETReceiveMsg *msg) { } } else { CGameObject *mailObject = findMailByFlags( - _v3 && compareRoomNameTo("Titania") ? 3 : _field140, petRoomFlags); + _v3 && compareRoomNameTo("Titania") ? RFC_TITANIA : _flagsComparison, petRoomFlags); if (!mailObject) { // No mail for this SuccUBus if (getRandomNumber(1) == 0) { @@ -510,7 +510,7 @@ bool CSuccUBus::PETReceiveMsg(CPETReceiveMsg *msg) { if (_receiveStartFrame >= 0) { _field158 = 1; - _field1D8 = 1; + _inProgress = true; incTransitions(); playMovie(_receiveStartFrame, _receiveEndFrame, MOVIE_NOTIFY_OBJECT); } @@ -525,7 +525,7 @@ bool CSuccUBus::MovieEndMsg(CMovieEndMsg *msg) { uint petRoomFlags = pet ? pet->getRoomFlags() : 0; if (msg->_endFrame == _offEndFrame) { - if (_startFrame11 >= 0) + if (_endingStartFrame >= 0) playSound("z#30.wav", 100); if (_field15C) { @@ -542,8 +542,8 @@ bool CSuccUBus::MovieEndMsg(CMovieEndMsg *msg) { if (pet && !mailExists(petRoomFlags)) { CGameObject *mailObject = _v3 && compareRoomNameTo("Titania") ? - findMailByFlags(3, petRoomFlags) : - findMailByFlags(_field140, petRoomFlags); + findMailByFlags(RFC_TITANIA, petRoomFlags) : + findMailByFlags(_flagsComparison, petRoomFlags); if (mailObject) { switch (getRandomNumber(4)) { @@ -573,7 +573,7 @@ bool CSuccUBus::MovieEndMsg(CMovieEndMsg *msg) { stopSound(_soundHandle); _soundHandle = -1; - switch (getRandomNumber(_v2 ? 7 : 5, &_field1B0)) { + switch (getRandomNumber(_v2 ? 7 : 5, &_priorRandomVal2)) { case 2: startTalking(this, 230001, findView()); break; @@ -613,8 +613,8 @@ bool CSuccUBus::MovieEndMsg(CMovieEndMsg *msg) { startTalking(this, 230013, findView()); } - if (_field1D8) { - _field1D8 = 0; + if (_inProgress) { + _inProgress = false; decTransitions(); } @@ -629,9 +629,9 @@ bool CSuccUBus::MovieEndMsg(CMovieEndMsg *msg) { } _field188 = 1; - _mailP = 0; - if (_field1D8) { - _field1D8 = 0; + _mailP = nullptr; + if (_inProgress) { + _inProgress = false; decTransitions(); } @@ -669,8 +669,8 @@ bool CSuccUBus::TurnOn(CTurnOn *msg) { CPetControl *pet = getPetControl(); if (pet) { - if (!_field15C && _startFrame8 >= 0) { - playMovie(_startFrame8, _endFrame8, 0); + if (!_field15C && _initialStartFrame >= 0) { + playMovie(_initialStartFrame, _initialEndFrame, 0); playSound("z#30.wav", 100); } @@ -707,8 +707,8 @@ bool CSuccUBus::TurnOff(CTurnOff *msg) { playMovie(_offStartFrame, _offEndFrame, MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE); } - if (!_field15C && _startFrame11 >= 0) - playMovie(_startFrame11, _endFrame11, MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE); + if (!_field15C && _endingStartFrame >= 0) + playMovie(_endingStartFrame, _endingEndFrame, MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE); _enabled = false; performAction(true); @@ -743,7 +743,7 @@ bool CSuccUBus::SUBTransition(CSUBTransition *msg) { bool CSuccUBus::SetChevRoomBits(CSetChevRoomBits *msg) { if (_enabled) { - _roomFlags = msg->_roomFlags; + _destRoomFlags = msg->_roomFlags; playSound("z#98.wav", 100); } @@ -764,7 +764,7 @@ bool CSuccUBus::MouseDragStartMsg(CMouseDragStartMsg *msg) { Rect tempRect = _rect1; tempRect.translate(_bounds.left, _bounds.top); - if (_field1D8 || !_enabled || !_field188 || !tempRect.contains(msg->_mousePos) + if (_inProgress || !_enabled || !_field188 || !tempRect.contains(msg->_mousePos) || !pet) return true; diff --git a/engines/titanic/npcs/succubus.h b/engines/titanic/npcs/succubus.h index d996bcdc68..7c0edf711a 100644 --- a/engines/titanic/npcs/succubus.h +++ b/engines/titanic/npcs/succubus.h @@ -52,10 +52,10 @@ protected: static int _v3; static int _v4; protected: - int _startFrame8; - int _endFrame8; - int _startFrame11; - int _endFrame11; + int _initialStartFrame; + int _initialEndFrame; + int _endingStartFrame; + int _endingEndFrame; int _sendStartFrame; int _sendEndFrame; int _receiveStartFrame; @@ -66,7 +66,7 @@ protected: int _offEndFrame; int _okStartFrame; int _okEndFrame; - int _field140; + RoomFlagsComparison _flagsComparison; CGameObject *_mailP; int _afterReceiveStartFrame; int _afterReceiveEndFrame; @@ -88,18 +88,18 @@ protected: int _soundHandle; bool _isChicken; bool _isFeathers; - int _field1AC; - int _field1B0; + int _priorRandomVal1; + int _priorRandomVal2; int _emptyStartFrame; int _emptyEndFrame; int _smokeStartFrame; int _smokeEndFrame; - int _field1C4; - int _field1C8; - int _field1CC; - int _field1D0; - int _field1D4; - int _field1D8; + int _hoseStartFrame; + int _hoseEndFrame; + int _pumpingStartFrame; + int _pumpingEndFrame; + uint _destRoomFlags; + bool _inProgress; public: CLASSDEF; CSuccUBus(); diff --git a/engines/titanic/npcs/true_talk_npc.cpp b/engines/titanic/npcs/true_talk_npc.cpp index 8d08600c9b..768ce46338 100644 --- a/engines/titanic/npcs/true_talk_npc.cpp +++ b/engines/titanic/npcs/true_talk_npc.cpp @@ -102,7 +102,7 @@ bool CTrueTalkNPC::TrueTalkNotifySpeechStartedMsg(CTrueTalkNotifySpeechStartedMs _npcFlags |= NPCFLAG_SPEAKING; ++_speechCounter; - if (!(_npcFlags & NPCFLAG_8)) { + if (!(_npcFlags & NPCFLAG_DOORBOT_IN_HOME)) { // Stop any previous animation if (_speechTimerId) stopAnimTimer(_speechTimerId); @@ -134,7 +134,7 @@ bool CTrueTalkNPC::TrueTalkNotifySpeechEndedMsg(CTrueTalkNotifySpeechEndedMsg *m --_speechCounter; _speechDuration = 0; - if (!(_npcFlags & NPCFLAG_8)) { + if (!(_npcFlags & NPCFLAG_DOORBOT_IN_HOME)) { CNPCPlayTalkingAnimationMsg msg1(0, 2, nullptr); msg1.execute(this); CNPCQueueIdleAnimMsg msg2; diff --git a/engines/titanic/npcs/true_talk_npc.h b/engines/titanic/npcs/true_talk_npc.h index d9ea037a72..03a463474d 100644 --- a/engines/titanic/npcs/true_talk_npc.h +++ b/engines/titanic/npcs/true_talk_npc.h @@ -31,12 +31,12 @@ namespace Titanic { enum NpcFlag { NPCFLAG_SPEAKING = 1, NPCFLAG_IDLING = 2, NPCFLAG_START_IDLING = 4, - NPCFLAG_8 = 8, NPCFLAG_10000 = 0x10000, NPCFLAG_20000 = 0x20000, - NPCFLAG_40000 = 0x40000, NPCFLAG_80000 = 0x80000, - NPCFLAG_100000 = 0x100000, NPCFLAG_200000 = 0x200000, - NPCFLAG_400000 = 0x400000, NPCFLAG_800000 = 0x800000, - NPCFLAG_1000000 = 0x1000000, NPCFLAG_2000000 = 0x2000000, - NPCFLAG_4000000 = 0x4000000, NPCFLAG_DOORBOT_INTRO = 0x8000000 + NPCFLAG_DOORBOT_IN_HOME = 8, NPCFLAG_MOVING = 0x10000, NPCFLAG_MOVE_START = 0x20000, + NPCFLAG_MOVE_LOOP = 0x40000, NPCFLAG_MOVE_FINISH = 0x80000, + NPCFLAG_MOVE_LEFT = 0x100000, NPCFLAG_MOVE_RIGHT = 0x200000, + NPCFLAG_MOVE_END = 0x400000, NPCFLAG_PECKING = 0x800000, + NPCFLAG_CHICKEN_OUTSIDE_CAGE = 0x1000000, NPCFLAG_TAKE_OFF = 0x2000000, + NPCFLAG_SUMMON_BELLBOT = 0x4000000, NPCFLAG_DOORBOT_INTRO = 0x8000000 }; class CViewItem; diff --git a/engines/titanic/pet_control/pet_control.h b/engines/titanic/pet_control/pet_control.h index a63c29d6b3..a60e386525 100644 --- a/engines/titanic/pet_control/pet_control.h +++ b/engines/titanic/pet_control/pet_control.h @@ -561,8 +561,11 @@ public: _rooms.setElevatorBroken(flag); } - bool isRoom59706() const { - return CRoomFlags(getRoomFlags()).is59706(); + /** + * Returns true if the player is in their 1st class stateroom + */ + bool isFirstClassSuite() const { + return CRoomFlags(getRoomFlags()).isFirstClassSuite(); } /** diff --git a/engines/titanic/room_flags.h b/engines/titanic/room_flags.h index e2fb91015a..79b673b7da 100644 --- a/engines/titanic/room_flags.h +++ b/engines/titanic/room_flags.h @@ -225,7 +225,12 @@ public: bool not5() const { return getConditionally() != 5; } - bool is59706() const { return _data == 0x59706; } + /** + * Returns true if the player is in their 1st class stateroom + */ + bool isFirstClassSuite() const { + return _data == 0x59706; + } }; } // End of namespace Titanic diff --git a/engines/titanic/support/avi_surface.cpp b/engines/titanic/support/avi_surface.cpp index 36a5891f0d..42e3618b97 100644 --- a/engines/titanic/support/avi_surface.cpp +++ b/engines/titanic/support/avi_surface.cpp @@ -47,6 +47,7 @@ AVISurface::AVISurface(const CResourceKey &key) : _movieName(key.getString()) { // since it needs to be able to go beyond the frame count or to negative to allow // correct detection of when range playbacks have finished _currentFrame = -1; + _priorFrame = -1; _isReversed = false; // Create a decoder @@ -55,6 +56,10 @@ AVISurface::AVISurface(const CResourceKey &key) : _movieName(key.getString()) { error("Could not open video - %s", key.getString().c_str()); _streamCount = _decoder->videoTrackCount(); + + _soundManager = nullptr; + _hasAudio = false; + _frameRate = 0.0; } AVISurface::~AVISurface() { @@ -154,7 +159,7 @@ void AVISurface::seekToFrame(uint frameNumber) { if (_isReversed && frameNumber == _decoder->getFrameCount()) --frameNumber; - if ((int)frameNumber != getFrame()) { + if ((int)frameNumber != _currentFrame) { _decoder->seekToFrame(frameNumber); _currentFrame = _priorFrame = (int)frameNumber; } @@ -401,21 +406,22 @@ bool AVISurface::renderFrame() { return false; } -bool AVISurface::addEvent(int frameNumber, CGameObject *obj) { +bool AVISurface::addEvent(int *frameNumber, CGameObject *obj) { if (!_movieRangeInfo.empty()) { CMovieRangeInfo *tail = _movieRangeInfo.back(); - if (frameNumber == -1) - frameNumber = tail->_startFrame; + assert(frameNumber); + if (*frameNumber == -1) + *frameNumber = tail->_startFrame; CMovieEvent *me = new CMovieEvent(); me->_type = MET_FRAME; me->_startFrame = 0; me->_endFrame = 0; - me->_initialFrame = frameNumber; + me->_initialFrame = *frameNumber; me->_gameObject = obj; tail->addEvent(me); - return _movieRangeInfo.size() == 1 && frameNumber == getFrame(); + return _movieRangeInfo.size() == 1 && *frameNumber == getFrame(); } return false; diff --git a/engines/titanic/support/avi_surface.h b/engines/titanic/support/avi_surface.h index 099a257361..f45db3599e 100644 --- a/engines/titanic/support/avi_surface.h +++ b/engines/titanic/support/avi_surface.h @@ -181,7 +181,7 @@ public: /** * Add a movie event */ - bool addEvent(int frameNumber, CGameObject *obj); + bool addEvent(int *frameNumber, CGameObject *obj); /** * Set the frame rate diff --git a/engines/titanic/support/mouse_cursor.cpp b/engines/titanic/support/mouse_cursor.cpp index 86623da044..eb58296502 100644 --- a/engines/titanic/support/mouse_cursor.cpp +++ b/engines/titanic/support/mouse_cursor.cpp @@ -55,7 +55,7 @@ CMouseCursor::CursorEntry::~CursorEntry() { CMouseCursor::CMouseCursor(CScreenManager *screenManager) : _screenManager(screenManager), _cursorId(CURSOR_HOURGLASS), _hideCounter(0), - _hiddenCount(0), _cursorSuppressed(false), _setCursorCount(0), _inputEnabled(true), _fieldE8(0) { + _busyCount(0), _cursorSuppressed(false), _setCursorCount(0), _inputEnabled(true), _fieldE8(0) { loadCursorImages(); setCursor(CURSOR_ARROW); CursorMan.showMouse(true); @@ -87,45 +87,45 @@ void CMouseCursor::loadCursorImages() { } } -void CMouseCursor::show() { - assert(_hiddenCount > 0); - - if (--_hiddenCount == 0) - CursorMan.showMouse(!_cursorSuppressed); +void CMouseCursor::incBusyCount() { + if (_busyCount == 0) + setCursor(CURSOR_HOURGLASS); + ++_busyCount; } -void CMouseCursor::hide() { - CursorMan.showMouse(false); - ++_hiddenCount; +void CMouseCursor::decBusyCount() { + assert(_busyCount > 0); + if (--_busyCount == 0) + setCursor(CURSOR_ARROW); } void CMouseCursor::incHideCounter() { if (_hideCounter++ == 0) - hide(); + CursorMan.showMouse(false); } void CMouseCursor::decHideCounter() { --_hideCounter; assert(_hideCounter >= 0); if (_hideCounter == 0) - show(); + CursorMan.showMouse(true); } void CMouseCursor::suppressCursor() { _cursorSuppressed = true; - hide(); + CursorMan.showMouse(false); } void CMouseCursor::unsuppressCursor() { _cursorSuppressed = false; if (_hideCounter == 0) - show(); + CursorMan.showMouse(true); } void CMouseCursor::setCursor(CursorId cursorId) { ++_setCursorCount; - if (cursorId != _cursorId) { + if (cursorId != _cursorId && _busyCount == 0) { // The original cursors supported partial alpha when rendering the cursor. // Since we're using the ScummVM CursorMan, we can't do that, so we need // to build up a surface of the cursor with even partially transparent @@ -192,14 +192,6 @@ void CMouseCursor::enableControl() { CScreenManager::_screenManagerPtr->_inputHandler->decLockCount(); } -void CMouseCursor::setBusy() { - setCursor(CURSOR_HOURGLASS); -} - -void CMouseCursor::clearBusy() { - setCursor(CURSOR_ARROW); -} - void CMouseCursor::setPosition(const Point &pt, double duration) { _moveStartPos = g_vm->_events->getMousePos(); _moveDestPos = pt; diff --git a/engines/titanic/support/mouse_cursor.h b/engines/titanic/support/mouse_cursor.h index cd5e49fb90..325e31de96 100644 --- a/engines/titanic/support/mouse_cursor.h +++ b/engines/titanic/support/mouse_cursor.h @@ -67,7 +67,7 @@ private: CursorEntry _cursors[NUM_CURSORS]; uint _setCursorCount; int _hideCounter; - int _hiddenCount; + int _busyCount; bool _cursorSuppressed; int _fieldE8; Common::Point _moveStartPos; @@ -85,14 +85,15 @@ public: ~CMouseCursor(); /** - * Make the mouse cursor visible + * Increment the busy count for the cursor, showing an hourglass */ - void show(); + void incBusyCount(); /** - * Hide the mouse cursor + * Decrements the busy count, resetting back to an arrow cursor + * when the count reaches zero */ - void hide(); + void decBusyCount(); /** * Decrements the hide counter, and shows the mouse if @@ -143,17 +144,6 @@ public: void enableControl(); /** - * Shows the busy cursor - */ - void setBusy(); - - /** - * Resets the cursor back to normal - */ - void clearBusy(); - - - /** * Move the mouse to a new position */ void setPosition(const Point &pt, double duration); diff --git a/engines/titanic/support/movie.cpp b/engines/titanic/support/movie.cpp index 8863e94e14..3095715bc9 100644 --- a/engines/titanic/support/movie.cpp +++ b/engines/titanic/support/movie.cpp @@ -140,7 +140,7 @@ void OSMovie::stop() { } void OSMovie::addEvent(int frameNumber, CGameObject *obj) { - if (_aviSurface.addEvent(frameNumber, obj)) { + if (_aviSurface.addEvent(&frameNumber, obj)) { CMovieFrameMsg frameMsg(frameNumber, 0); frameMsg.execute(obj); } diff --git a/engines/titanic/support/video_surface.cpp b/engines/titanic/support/video_surface.cpp index e24063188d..b886dc094c 100644 --- a/engines/titanic/support/video_surface.cpp +++ b/engines/titanic/support/video_surface.cpp @@ -206,6 +206,7 @@ void CVideoSurface::transBlitRect(const Rect &srcRect, const Rect &destRect, CVi Graphics::ManagedSurface *srcSurface = src->_rawSurface; Graphics::ManagedSurface *destSurface = _rawSurface; Graphics::Surface destArea = destSurface->getSubArea(destRect); + uint transColor = getTransparencyColor(); const uint16 *srcPtr = (const uint16 *)srcSurface->getBasePtr( srcRect.left, flipFlag ? srcRect.top : srcRect.bottom - 1); @@ -223,7 +224,8 @@ void CVideoSurface::transBlitRect(const Rect &srcRect, const Rect &destRect, CVi transSurface.setCol(srcRect.left); for (int srcX = srcRect.left; srcX < srcRect.right; ++srcX) { - copyPixel(lineDestP, lineSrcP, transSurface.getAlpha() >> 3, srcSurface->format, isAlpha); + if (*lineSrcP != transColor) + copyPixel(lineDestP, lineSrcP, transSurface.getAlpha() >> 3, srcSurface->format, isAlpha); ++lineSrcP; ++lineDestP; diff --git a/engines/titanic/true_talk/bellbot_script.cpp b/engines/titanic/true_talk/bellbot_script.cpp index 44fa961fcc..c958727a8b 100644 --- a/engines/titanic/true_talk/bellbot_script.cpp +++ b/engines/titanic/true_talk/bellbot_script.cpp @@ -169,19 +169,21 @@ int BellbotScript::process(const TTroomScript *roomScript, const TTsentence *sen || sentence->localWord("smash") || sentence->localWord("destroy") || sentence->localWord("toss") || sentence->localWord("put") || sentence->localWord("pitch") || sentence->localWord("heft")) { + // You've instructed the Bellbot to go all Pete Townshend on a TV if (getValue(40) == 1) { + // Won't smash addResponse(getDialogueId(201687)); applyResponse(); return 2; - } - else if (roomScript->_scriptId == 111) { - addResponse(getDialogueId(201687)); + } else if (roomScript->_scriptId == 111) { + // Within the Parrot Lobby + addResponse(getDialogueId(200914)); applyResponse(); CTrueTalkManager::triggerAction(17, 0); CTrueTalkManager::setFlags(40, 1); return 2; - } - else { + } else { + // In any other room other than the Parrot Lobby addResponse(getDialogueId(200710)); addResponse(getDialogueId(201334)); applyResponse(); diff --git a/engines/titanic/true_talk/liftbot_script.cpp b/engines/titanic/true_talk/liftbot_script.cpp index e52e47d99d..c77885e3ab 100644 --- a/engines/titanic/true_talk/liftbot_script.cpp +++ b/engines/titanic/true_talk/liftbot_script.cpp @@ -506,7 +506,7 @@ int LiftbotScript::addResponse1(int index, bool flag, int id) { return 1; } else if (index == getCurrentFloor()) { if (index == 1) { - addResponse(30558 - getRandomBit() ? 290 : 0); + addResponse(30558 - (getRandomBit() ? 290 : 0)); addResponse(getDialogueId(210589)); } else { if (index == 39) @@ -535,7 +535,7 @@ int LiftbotScript::addResponse1(int index, bool flag, int id) { if (flag) { if (index == 1) { - selectResponse(30558 - getRandomBit() ? 290 : 0); + selectResponse(30558 - (getRandomBit() ? 290 : 0)); } else if (index == 39) { addResponse(30346); } else { @@ -619,7 +619,7 @@ int LiftbotScript::sentence1(const TTsentence *sentence) { } else if (sentence->localWord("titaniaroom")) { newId = 210723; } else if (sentence->localWord("restaurant")) { - if (classNum == 1) { + if (classNum == FIRST_CLASS) { newId = 210719; diff = 1; } else { diff --git a/engines/titanic/true_talk/parrot_script.cpp b/engines/titanic/true_talk/parrot_script.cpp index 25b54f0715..f44b9d3be2 100644 --- a/engines/titanic/true_talk/parrot_script.cpp +++ b/engines/titanic/true_talk/parrot_script.cpp @@ -76,7 +76,7 @@ ScriptChangedResult ParrotScript::scriptChanged(const TTroomScript *roomScript, } else { if ((id == 280146 || id == 280147) && CTrueTalkManager::_currentNPC) { CGameObject *chicken; - if (CTrueTalkManager::_currentNPC->find("Chicken", &chicken, FIND_PET)) + if (!CTrueTalkManager::_currentNPC->find("Chicken", &chicken, FIND_PET)) id = 280142; } @@ -90,7 +90,7 @@ ScriptChangedResult ParrotScript::scriptChanged(const TTroomScript *roomScript, if (id >= 80000 && id <= 80244) { if ((id == 80155 || id == 80156) && CTrueTalkManager::_currentNPC) { CGameObject *chicken; - if (CTrueTalkManager::_currentNPC->find("Chicken", &chicken, FIND_PET)) + if (!CTrueTalkManager::_currentNPC->find("Chicken", &chicken, FIND_PET)) id = 80151; } diff --git a/engines/titanic/true_talk/tt_vocab.cpp b/engines/titanic/true_talk/tt_vocab.cpp index 6748d6535b..b37d30e65e 100644 --- a/engines/titanic/true_talk/tt_vocab.cpp +++ b/engines/titanic/true_talk/tt_vocab.cpp @@ -202,11 +202,12 @@ TTword *TTvocab::getPrimeWord(TTstring &str, TTword **srcWord) const { newWord = new TTword(str, WC_ABSTRACT, 300);
} else {
// Standard word
- for (vocabP = _headP; vocabP && !newWord; vocabP = vocabP->_nextP) {
+ for (vocabP = _headP; vocabP; vocabP = vocabP->_nextP) {
if (_vocabMode == 3 && !strcmp(str.c_str(), vocabP->c_str())) {
newWord = vocabP->copy();
newWord->_nextP = nullptr;
newWord->setSyn(nullptr);
+ break;
} else if (vocabP->findSynByName(str, &tempSyn, _vocabMode)) {
// Create a copy of the word and the found synonym
TTsynonym *newSyn = new TTsynonym(tempSyn);
@@ -214,6 +215,7 @@ TTword *TTvocab::getPrimeWord(TTstring &str, TTword **srcWord) const { newWord = vocabP->copy();
newWord->_nextP = nullptr;
newWord->setSyn(newSyn);
+ break;
}
}
}
diff --git a/graphics/font.cpp b/graphics/font.cpp index 4f53dfe858..7768b7362d 100644 --- a/graphics/font.cpp +++ b/graphics/font.cpp @@ -227,7 +227,7 @@ int wordWrapTextImpl(const Font &font, const StringType &str, int maxWidth, Comm if (lineWidth > 0) { wrapper.add(line, lineWidth); } - return MAX(wrapper.actualMaxLineWidth, maxWidth); + return wrapper.actualMaxLineWidth; } } // End of anonymous namespace diff --git a/graphics/fonts/macfont.cpp b/graphics/fonts/macfont.cpp new file mode 100644 index 0000000000..f20b64eb63 --- /dev/null +++ b/graphics/fonts/macfont.cpp @@ -0,0 +1,497 @@ +/* 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/stream.h" +#include "common/textconsole.h" +#include "graphics/surface.h" +#include "graphics/fonts/macfont.h" + +namespace Graphics { + +enum { + kFontTypeImageHeightTable = (1 << 0), + kFontTypeGlyphWidthTable = (1 << 1), + kFontTypeFontColorTable = (1 << 7), + kFontTypeSyntheticFont = (1 << 8), + kFontTypeFixedWidthFont = (1 << 13), + kFontTypeNotExpandable = (1 << 14) +}; + +enum { + kFamilyGlyphWidthTable = (1 << 1), + kFamilyFractEnable = (1 << 12), + kFamilyIntegerExtra = (1 << 13), + kFamilyNoFractionalTable = (1 << 14), + kFamilyFixedWidthFonts = (1 << 15) +}; + +enum { + kStylePropertyPlain = 0, + kStylePropertyBold = 1, + kStylePropertyItalic = 2, + kStylePropertyUnderline = 3, + kStylePropertyOutline = 4, + kStylePropertyShadow = 5, + kStylePropertyCondensed = 6, + kStylePropertyExtended = 7, + kStylePropertyUnused = 8 +}; + +static int getDepth(uint16 _fontType) { + // Returns 1, 2, 4, 8 + + return 1 << ((_fontType >> 2) & 3); +} + +MacFontFamily::MacFontFamily() { + _ffFlags = 0; + _ffFamID = 0; + _ffFirstChar = 0; + _ffLastChar = 0; + _ffAscent = 0; + _ffDescent = 0; + _ffLeading = 0; + _ffWidMax = 0; + _ffWTabOff = 0; + _ffKernOff = 0; + _ffStylOff = 0; + + for (int i = 0; i < 9; i++) + _ffProperty[i] = 0; + + _ffIntl[0] = 0; + _ffIntl[1] = 0; + _ffVersion = 0; + + _ffNumAssoc = 0; + _ffNumOffsets = 0; + _ffOffsets = nullptr; + _ffNumBBoxes = 0; +} + +MacFontFamily::~MacFontFamily() { + free(_ffOffsets); +} + +bool MacFontFamily::load(Common::SeekableReadStream &stream) { + _ffFlags = stream.readUint16BE(); // flags for family + _ffFamID = stream.readUint16BE(); // family ID number + _ffFirstChar = stream.readUint16BE(); // ASCII code of first character + _ffLastChar = stream.readUint16BE(); // ASCII code of last character + _ffAscent = stream.readSint16BE(); // maximum ascent for 1-pt font + _ffDescent = stream.readSint16BE(); // maximum descent for 1-pt font + _ffLeading = stream.readSint16BE(); // maximum leading for 1-pt font + _ffWidMax = stream.readSint16BE(); // maximum glyph width for 1-pt font + _ffWTabOff = stream.readUint32BE(); // offset to family glyph-width table + _ffKernOff = stream.readUint32BE(); // offset to kerning table + _ffStylOff = stream.readUint32BE(); // offset to style-mapping table + + debug(10, "flags: %x famid: %d first: %d last: %d", _ffFlags, _ffFamID, _ffFirstChar, _ffLastChar); + debug(10, "ascent: %g descent: %g, leading: %g, widmax: %g", _ffAscent / (double)(1<<12), + _ffDescent / (double)(1<<12), _ffLeading / (double)(1<<12), _ffWidMax / (double)(1<<12)); + + debug(10, "wtaboff: %d kernoff: %d styloff: %d", _ffWTabOff, _ffKernOff, _ffStylOff); + + debugN(10, "Extra width: "); + for (int i = 0; i < 9; i++) { // style properties info + _ffProperty[i] = stream.readUint16BE(); + debugN(10, "%d ", _ffProperty[i]); + } + debug(10, "%s", ""); + + _ffIntl[0] = stream.readUint16BE(); // for international use + _ffIntl[1] = stream.readUint16BE(); // for international use + _ffVersion = stream.readUint16BE(); // version number + + debug(10, "version: %d", _ffVersion); + + _ffNumAssoc = stream.readUint16BE(); // number of entries - 1 + _ffAssocEntries.resize(_ffNumAssoc + 1); + + debug(10, "association cnt: %d", _ffNumAssoc + 1); + + for (uint i = 0; i <= _ffNumAssoc; i++) { + _ffAssocEntries[i]._fontSize = stream.readUint16BE(); // point size of font + _ffAssocEntries[i]._fontStyle = stream.readUint16BE(); // style of font + _ffAssocEntries[i]._fontID = stream.readUint16BE(); // font resource ID + + debug(10, " size: %d style: %d id: %d", _ffAssocEntries[i]._fontSize, _ffAssocEntries[i]._fontStyle, + _ffAssocEntries[i]._fontID); + } + + if (_ffWTabOff || _ffStylOff || _ffKernOff) { + _ffNumOffsets = stream.readUint16BE(); // number of entries - 1 + _ffOffsets = (uint32 *)calloc(_ffNumOffsets + 1, sizeof(uint32)); + debugN(10, "offset cnt: %d, OFF: ", _ffNumOffsets + 1); + for (uint i = 0; i <= _ffNumOffsets; i++) { + _ffOffsets[i] = stream.readUint32BE(); + debugN(10, "%d ", _ffOffsets[i]); + } + debug(10, "%s", ""); + + _ffNumBBoxes = stream.readUint16BE(); // number of entries - 1 + _ffBBoxes.resize(_ffNumBBoxes + 1); + debug(10, "num BBoxes: %d", _ffNumBBoxes + 1); + for (uint i = 0; i <= _ffNumBBoxes; i++) { + _ffBBoxes[i]._style = stream.readUint16BE(); + _ffBBoxes[i]._left = stream.readSint16BE(); + _ffBBoxes[i]._bottom = stream.readSint16BE(); + _ffBBoxes[i]._right = stream.readSint16BE(); + _ffBBoxes[i]._top = stream.readSint16BE(); + + debug(10, "style: %d left: %g bottom: %g rigth: %g top: %g", _ffBBoxes[i]._style, + _ffBBoxes[i]._left / (double)(1<<12), _ffBBoxes[i]._bottom / (double)(1<<12), + _ffBBoxes[i]._right / (double)(1<<12), _ffBBoxes[i]._top / (double)(1<<12)); + } + } + + if (_ffWTabOff) { + // TODO: Read widths table + } + + if (_ffStylOff) { + // TODO: Read styles table + } + + if (_ffKernOff) { + stream.seek(_ffKernOff); + + _ffNumKerns = stream.readUint16BE(); // number of entries - 1 + _ffKernEntries.resize(_ffNumKerns + 1); + + debug(10, "kern entries: %d", _ffNumKerns + 1); + + for (uint i = 0; i <= _ffNumKerns; i++) { + _ffKernEntries[i]._style = stream.readUint16BE(); + _ffKernEntries[i]._entryLength = stream.readUint16BE(); + _ffKernEntries[i]._kernPairs.resize(_ffKernEntries[i]._entryLength); + + debug(10, " style: %x kernpairs: %d", _ffKernEntries[i]._style, _ffKernEntries[i]._entryLength); + + for (uint j = 0; j < _ffKernEntries[i]._entryLength; j++) { + byte f, s; + int16 d; + f = _ffKernEntries[i]._kernPairs[j]._firstChar = stream.readByte(); + s = _ffKernEntries[i]._kernPairs[j]._secondChar = stream.readByte(); + d = _ffKernEntries[i]._kernPairs[j]._distance = stream.readSint16BE(); + + _ffKernEntries[i]._kernTable[(f << 8) | s] = d; + } + } + } + + return true; + } + + int MacFontFamily::getKerningOffset(uint style, int32 left, uint32 right) const { + uint16 idx = ((left & 0xff) << 8) | (right & 0xff); + + for (uint i = 0; i < _ffKernEntries.size(); i++) { + if (_ffKernEntries[i]._style == style) + if (_ffKernEntries[i]._kernTable.contains(idx)) + return _ffKernEntries[i]._kernTable[idx]; + } + + return 0; + } + + + MacFONTFont::MacFONTFont() { + _data._fontType = 0; + _data._firstChar = 0; + _data._lastChar = 0; + _data._maxWidth = 0; + _data._kernMax = 0; + _data._nDescent = 0; + _data._fRectWidth = 0; + _data._fRectHeight = 0; + _data._owTLoc = 0; + _data._ascent = 0; + _data._descent = 0; + _data._leading = 0; + _data._rowWords = 0; + _data._bitImage = nullptr; + + _data._family = nullptr; + _data._size = 12; + _data._style = 0; + } + + MacFONTFont::MacFONTFont(const MacFONTdata &data) { + _data = data; + } + + MacFONTFont::~MacFONTFont() { + free(_data._bitImage); + } + +bool MacFONTFont::loadFont(Common::SeekableReadStream &stream, MacFontFamily *family, int size, int style) { + _data._family = family; + _data._size = size; + _data._style = style; + + _data._fontType = stream.readUint16BE(); // font type + _data._firstChar = stream.readUint16BE(); // character code of first glyph + _data._lastChar = stream.readUint16BE(); // character code of last glyph + _data._maxWidth = stream.readUint16BE(); // maximum glyph width + _data._kernMax = stream.readSint16BE(); // maximum glyph kern + _data._nDescent = stream.readSint16BE(); // negative of descent + _data._fRectWidth = stream.readUint16BE(); // width of font rectangle + _data._fRectHeight = stream.readUint16BE(); // height of font rectangle + _data._owTLoc = stream.readUint16BE(); // offset to width/offset table + _data._ascent = stream.readUint16BE(); // maximum ascent measurement + _data._descent = stream.readUint16BE(); // maximum descent measurement + _data._leading = stream.readUint16BE(); // leading measurement + _data._rowWords = stream.readUint16BE() * 2; // row width of bit image in 16-bit wds + + if (getDepth(_data._fontType) != 1) { + warning("MacFONTFont: %dbpp fonts are not supported", getDepth(_data._fontType)); + + return false; + } + + // If positive, _nDescent holds the high bits of the offset to the + // width/offset table. + // http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/Text/Text-252.html + if (_data._nDescent > 0) + _data._owTLoc |= _data._nDescent << 16; + + // Alignment is by word + _data._owTLoc *= 2; + _data._owTLoc += 16; + + uint16 glyphCount = _data._lastChar - _data._firstChar + 1; + _data._glyphs.resize(glyphCount); + + // Bit image table + uint16 bitImageSize = _data._rowWords * _data._fRectHeight; + _data._bitImage = new byte[bitImageSize]; + stream.read(_data._bitImage, bitImageSize); + + // Bitmap location table + // Last glyph is the pic for the missing glyph + // One more word for determinig width + uint16 *bitmapOffsets = (uint16 *)calloc(glyphCount + 2, sizeof(uint16)); + + for (uint16 i = 0; i < glyphCount + 2; i++) + bitmapOffsets[i] = stream.readUint16BE(); + + for (uint16 i = 0; i < glyphCount + 1; i++) { + MacGlyph *glyph = (i == glyphCount) ? &_data._defaultChar : &_data._glyphs[i]; + glyph->bitmapOffset = bitmapOffsets[i]; + glyph->bitmapWidth = bitmapOffsets[i + 1] - bitmapOffsets[i]; + } + + // Width/offset table + stream.seek(_data._owTLoc); + + for (uint16 i = 0; i < glyphCount; i++) { + byte kerningOffset = stream.readByte(); + byte width = stream.readByte(); + + // 0xFF designates missing glyph + if (kerningOffset == 0xFF && width == 0xFF) + continue; + + _data._glyphs[i].kerningOffset = _data._kernMax + kerningOffset; + _data._glyphs[i].width = width; + } + + _data._defaultChar.kerningOffset = _data._kernMax + stream.readByte(); + _data._defaultChar.width = _data._kernMax + stream.readByte(); + + if (_data._fontType & kFontTypeGlyphWidthTable) { + warning("Skipping glyph-width table"); + + for (uint16 i = 0; i < glyphCount; i++) + stream.readUint16BE(); + } + + if (_data._fontType & kFontTypeImageHeightTable) { + warning("Skipping image height table"); + + for (uint16 i = 0; i < glyphCount; i++) + stream.readUint16BE(); + } + + return true; +} + +int MacFONTFont::getCharWidth(uint32 chr) const { + const MacGlyph *glyph = findGlyph(chr); + + if (!glyph) + return _data._maxWidth; + + return glyph->width; +} + +void MacFONTFont::drawChar(Surface *dst, uint32 chr, int x, int y, uint32 color) const { + assert(dst != 0); + assert(dst->format.bytesPerPixel == 1 || dst->format.bytesPerPixel == 2 || dst->format.bytesPerPixel == 4); + + const MacGlyph *glyph = findGlyph(chr); + if (!glyph || glyph->width == 0) + return; + + for (uint16 i = 0; i < _data._fRectHeight; i++) { + byte *srcRow = _data._bitImage + i * _data._rowWords; + + for (uint16 j = 0; j < glyph->bitmapWidth; j++) { + uint16 bitmapOffset = glyph->bitmapOffset + j; + + if (srcRow[bitmapOffset / 8] & (1 << (7 - (bitmapOffset % 8)))) { + if (dst->format.bytesPerPixel == 1) + *((byte *)dst->getBasePtr(x + j, y + i)) = color; + else if (dst->format.bytesPerPixel == 2) + *((uint16 *)dst->getBasePtr(x + j, y + i)) = color; + else if (dst->format.bytesPerPixel == 4) + *((uint32 *)dst->getBasePtr(x + j, y + i)) = color; + } + } + } +} + +const MacGlyph *MacFONTFont::findGlyph(uint32 c) const { + if (_data._glyphs.empty()) + return 0; + + if (c < _data._firstChar || c > _data._lastChar) + return &_data._defaultChar; + + return &_data._glyphs[c - _data._firstChar]; +} + +int MacFONTFont::getKerningOffset(uint32 left, uint32 right) const { + if (_data._family) { + int kerning = _data._family->getKerningOffset(_data._style, left, right); + kerning *= _data._size; + + return (int)(kerning / (double)(1 << 12)); + } + + return 0; +} + +MacFONTFont *MacFONTFont::scaleFont(MacFONTFont *src, int newSize) { + if (!src) { + warning("Empty font reference in scale font"); + return NULL; + } + + if (src->getFontSize() == 0) { + warning("Requested to scale 0 size font"); + return NULL; + } + + float scale = (float)newSize / (float)src->getFontSize(); + + MacFONTdata data; + + data._fontType = src->_data._fontType; + data._firstChar = src->_data._firstChar; + data._lastChar = src->_data._firstChar; + data._maxWidth = (int)((float)src->_data._maxWidth * scale); + data._kernMax = (int)((float)src->_data._kernMax * scale); + data._nDescent = (int)((float)src->_data._nDescent * scale); + data._fRectWidth = (int)((float)src->_data._fRectWidth * scale); + data._fRectHeight = (int)((float)src->_data._fRectHeight * scale); + data._owTLoc = src->_data._owTLoc; + data._ascent = (int)((float)src->_data._ascent * scale); + data._descent = (int)((float)src->_data._descent * scale); + data._leading = (int)((float)src->_data._leading * scale); + + data._family = src->_data._family; + data._size = src->_data._size; + data._style = src->_data._style; + + // Dtermine width of the bit image table + int newBitmapWidth = 0; + for (uint i = 0; i < src->_data._glyphs.size() + 1; i++) { + MacGlyph *glyph = (i == src->_data._glyphs.size()) ? &_data._defaultChar : &_data._glyphs[i]; + + glyph->width = (int)((float)src->_data._glyphs[i].width * scale); + glyph->kerningOffset = (int)((float)src->_data._glyphs[i].kerningOffset * scale); + glyph->bitmapWidth = (int)((float)src->_data._glyphs[i].bitmapWidth * scale); + glyph->bitmapOffset = newBitmapWidth; + + newBitmapWidth += ((glyph->bitmapWidth + 7) / 8); + } + + data._rowWords = newBitmapWidth; + + uint16 bitImageSize = data._rowWords * _data._fRectHeight; + _data._bitImage = new byte[bitImageSize]; + +#if 0 + for (int i = 0; i < data.numCharacters; i++) { + const BdfBoundingBox &box = data.boxes ? data.boxes[i] : data.defaultBox; + const BdfBoundingBox &srcBox = data.boxes ? src->_data.boxes[i] : src->_data.defaultBox; + + if (src->_data.bitmaps[i]) { + const int bytes = ((box.width + 7) / 8) * box.height; // Dimensions have been already corrected + bitmaps[i] = new byte[bytes]; + + int srcPitch = (srcBox.width + 7) / 8; + int dstPitch = (box.width + 7) / 8; + + byte *ptr = bitmaps[i]; + + for (int y = 0; y < box.height; y++) { + const byte *srcd = (const byte *)&src->_data.bitmaps[i][((int)((float)y / scale)) * srcPitch]; + byte *dst = ptr; + byte b = 0; + + for (int x = 0; x < box.width; x++) { + int sx = (int)((float)x / scale); + + if (srcd[sx / 8] & (0x80 >> (sx % 8))) + b |= 1; + + if (!(x % 8) && x) { + *dst++ = b; + b = 0; + } + + b <<= 1; + } + + if (((box.width - 1) % 8)) { + b <<= 7 - ((box.width - 1) % 8); + *dst = b; + } + + ptr += dstPitch; + } + + } else { + bitmaps[i] = 0; + } + } + + data.bitmaps = bitmaps; +#endif + + return new MacFONTFont(data); +} + +} // End of namespace Graphics diff --git a/graphics/fonts/macfont.h b/graphics/fonts/macfont.h new file mode 100644 index 0000000000..ab285ed905 --- /dev/null +++ b/graphics/fonts/macfont.h @@ -0,0 +1,169 @@ +/* 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 GRAPHICS_FONTS_MACFONT_H +#define GRAPHICS_FONTS_MACFONT_H + +#include "common/array.h" +#include "common/hashmap.h" +#include "graphics/font.h" + +namespace Graphics { + +class MacFontFamily { +public: + MacFontFamily(); + ~MacFontFamily(); + + bool load(Common::SeekableReadStream &stream); + int getKerningOffset(uint style, int32 left, uint32 right) const; + + struct AsscEntry { + uint16 _fontSize; + uint16 _fontStyle; + uint16 _fontID; + }; + + Common::Array<AsscEntry> *getAssocTable() { return &_ffAssocEntries; } + +private: + // FOND + uint16 _ffFlags; + uint16 _ffFamID; + uint16 _ffFirstChar; + uint16 _ffLastChar; + int16 _ffAscent; + int16 _ffDescent; + int16 _ffLeading; + int16 _ffWidMax; + uint32 _ffWTabOff; + uint32 _ffKernOff; + uint32 _ffStylOff; + uint16 _ffProperty[9]; + uint16 _ffIntl[2]; + uint16 _ffVersion; + + uint16 _ffNumAssoc; + Common::Array<AsscEntry> _ffAssocEntries; + + uint16 _ffNumOffsets; + uint32 *_ffOffsets; + + struct BBoxEntry { + uint16 _style; + int16 _left; + int16 _bottom; + int16 _right; + int16 _top; + }; + + uint16 _ffNumBBoxes; + Common::Array<BBoxEntry> _ffBBoxes; + + struct KernPair { + byte _firstChar; + byte _secondChar; + uint16 _distance; + }; + + struct KernEntry { + uint16 _style; + uint16 _entryLength; + Common::Array<KernPair> _kernPairs; + + Common::HashMap<uint16, int16> _kernTable; + }; + + uint16 _ffNumKerns; + Common::Array<KernEntry> _ffKernEntries; +}; + +struct MacGlyph { + void clear() { + bitmapOffset = 0; + width = 0; + bitmapWidth = 0; + kerningOffset = 0; + } + + uint16 bitmapOffset; + byte width; + uint16 bitmapWidth; + int kerningOffset; +}; + +struct MacFONTdata { + uint16 _fontType; + uint16 _firstChar; + uint16 _lastChar; + uint16 _maxWidth; + int16 _kernMax; + int16 _nDescent; + uint16 _fRectWidth; + uint16 _fRectHeight; + uint32 _owTLoc; + uint16 _ascent; + uint16 _descent; + uint16 _leading; + uint16 _rowWords; + + byte *_bitImage; + + Common::Array<MacGlyph> _glyphs; + MacGlyph _defaultChar; + + MacFontFamily *_family; + int _size; + int _style; +}; + +/** + * Processing of Mac FONT/NFNT rResources + */ +class MacFONTFont : public Font { +public: + MacFONTFont(); + MacFONTFont(const MacFONTdata &data); + virtual ~MacFONTFont(); + + virtual int getFontHeight() const { return _data._fRectHeight; } + virtual int getMaxCharWidth() const { return _data._maxWidth; } + virtual int getCharWidth(uint32 chr) const; + virtual void drawChar(Surface *dst, uint32 chr, int x, int y, uint32 color) const; + + bool loadFont(Common::SeekableReadStream &stream, MacFontFamily *family = nullptr, int size = 12, int style = 0); + + virtual int getKerningOffset(uint32 left, uint32 right) const; + + int getFontSize() const { return _data._size; } + + MacFONTFont *scaleFont(MacFONTFont *src, int newSize); + +private: + MacFONTdata _data; + + const MacGlyph *findGlyph(uint32 c) const; +}; + +} // End of namespace Graphics + +#endif diff --git a/graphics/macgui/macfontmanager.cpp b/graphics/macgui/macfontmanager.cpp index c6e8d7e4a7..836255ad0d 100644 --- a/graphics/macgui/macfontmanager.cpp +++ b/graphics/macgui/macfontmanager.cpp @@ -22,7 +22,9 @@ #include "common/archive.h" #include "common/stream.h" #include "common/unzip.h" +#include "common/macresman.h" #include "graphics/fonts/bdf.h" +#include "graphics/fonts/macfont.h" #include "graphics/macgui/macfontmanager.h" @@ -80,7 +82,7 @@ MacFontManager::MacFontManager() { loadFonts(); } -void MacFontManager::loadFonts() { +void MacFontManager::loadFontsBDF() { Common::Archive *dat; dat = Common::makeZipArchive("classicmacfonts.dat"); @@ -127,7 +129,7 @@ void MacFontManager::loadFonts() { } FontMan.assignFontToName(fontName, font); - macfont->setBdfFont(font); + macfont->setFont(font); _fontRegistry.setVal(fontName, macfont); debug(2, " %s", fontName.c_str()); @@ -138,6 +140,88 @@ void MacFontManager::loadFonts() { delete dat; } +void MacFontManager::loadFonts() { + Common::Archive *dat; + + dat = Common::makeZipArchive("classicmacfonts.dat"); + + if (!dat) { + warning("Could not find classicmacfonts.dat. Falling back to built-in fonts"); + _builtInFonts = true; + + return; + } + + Common::ArchiveMemberList list; + dat->listMembers(list); + + for (Common::ArchiveMemberList::iterator it = list.begin(); it != list.end(); ++it) { + Common::SeekableReadStream *stream = dat->createReadStreamForMember((*it)->getName()); + + Common::MacResManager *fontFile = new Common::MacResManager(); + + if (!fontFile->loadFromMacBinary(*stream)) + error("Could not open %s as a resource fork", (*it)->getName().c_str()); + + Common::MacResIDArray fonds = fontFile->getResIDArray(MKTAG('F','O','N','D')); + if (fonds.size() > 0) { + for (Common::Array<uint16>::iterator iterator = fonds.begin(); iterator != fonds.end(); ++iterator) { + Common::SeekableReadStream *fond = fontFile->getResource(MKTAG('F', 'O', 'N', 'D'), *iterator); + + Common::String familyName = fontFile->getResName(MKTAG('F', 'O', 'N', 'D'), *iterator); + + Graphics::MacFontFamily fontFamily; + fontFamily.load(*fond); + + Common::Array<Graphics::MacFontFamily::AsscEntry> *assoc = fontFamily.getAssocTable(); + + for (uint i = 0; i < assoc->size(); i++) { + debug("size: %d style: %d id: %d", (*assoc)[i]._fontSize, (*assoc)[i]._fontStyle, + (*assoc)[i]._fontID); + + Common::SeekableReadStream *fontstream; + MacFont *macfont; + Graphics::MacFONTFont *font; + + fontstream = fontFile->getResource(MKTAG('N', 'F', 'N', 'T'), (*assoc)[i]._fontID); + + if (!fontstream) + fontstream = fontFile->getResource(MKTAG('F', 'O', 'N', 'T'), (*assoc)[i]._fontID); + + if (!fontstream) { + warning("Unknown FontId: %d", (*assoc)[i]._fontID); + + continue; + } + + font = new Graphics::MacFONTFont; + font->loadFont(*fontstream); + + delete fontstream; + + Common::String fontName = Common::String::format("%s-%d-%d", familyName.c_str(), (*assoc)[i]._fontStyle, (*assoc)[i]._fontSize); + + macfont = new MacFont(_fontNames.getVal(familyName, kMacFontNonStandard), (*assoc)[i]._fontSize, (*assoc)[i]._fontStyle); + + FontMan.assignFontToName(fontName, font); + macfont->setFont(font); + _fontRegistry.setVal(fontName, macfont); + + debug(2, " %s", fontName.c_str()); + } + + delete fond; + } + } + + delete stream; + } + + _builtInFonts = false; + + delete dat; +} + const Font *MacFontManager::getFont(MacFont macFont) { const Font *font = 0; @@ -165,40 +249,25 @@ const Font *MacFontManager::getFont(MacFont macFont) { int MacFontManager::parseFontSlant(Common::String slant) { slant.toUppercase(); + int slantVal = 0; if (slant == "I") - return kMacFontItalic; + slantVal |= kMacFontItalic; if (slant == "B") - return kMacFontBold; + slantVal |= kMacFontBold; if (slant == "R") - return kMacFontRegular; - - warning("Unknown font slant '%s'", slant.c_str()); + slantVal |= kMacFontRegular; - return kMacFontRegular; + return slantVal; } const char *MacFontManager::getFontName(int id, int size, int slant) { static char name[128]; - const char *sslant; - - switch (slant) { - case kMacFontItalic: - sslant = "I"; - break; - case kMacFontBold: - sslant = "B"; - break; - case kMacFontRegular: - default: - sslant = "R"; - break; - } if (id > ARRAYSIZE(fontNames)) return NULL; - snprintf(name, 128, "%s-%s-%d", fontNames[id], sslant, size); + snprintf(name, 128, "%s-%d-%d", fontNames[id], slant, size); return name; } @@ -271,14 +340,14 @@ void MacFontManager::generateFont(MacFont &toFont, MacFont &fromFont) { debugN("Found font substitute for font '%s' ", getFontName(toFont)); debug("as '%s'", getFontName(fromFont)); - Graphics::BdfFont *font = Graphics::BdfFont::scaleFont(fromFont.getBdfFont(), toFont.getSize()); + Font *font = fromFont.getFont(); // = Graphics::BdfFont::scaleFont(fromFont.getFont(), toFont.getSize()); if (!font) { warning("Failed to generate font '%s'", getFontName(toFont)); } toFont.setGenerated(true); - toFont.setBdfFont(font); + toFont.setFont(font); FontMan.assignFontToName(getFontName(toFont), font); _fontRegistry.setVal(getFontName(toFont), new MacFont(toFont)); diff --git a/graphics/macgui/macfontmanager.h b/graphics/macgui/macfontmanager.h index c098d797ed..bfec6b7645 100644 --- a/graphics/macgui/macfontmanager.h +++ b/graphics/macgui/macfontmanager.h @@ -57,7 +57,7 @@ enum { kMacFontExtend = 64 }; -class BdfFont; +class Font; class MacFont { public: @@ -67,7 +67,7 @@ public: _slant = slant; _fallback = fallback; _generated = false; - _bdfFont = NULL; + _font = NULL; } int getId() { return _id; }; @@ -79,8 +79,8 @@ public: FontManager::FontUsage getFallback() { return _fallback; } bool isGenerated() { return _generated; } void setGenerated(bool gen) { _generated = gen; } - BdfFont *getBdfFont() { return _bdfFont; } - void setBdfFont(BdfFont *bdfFont) { _bdfFont = bdfFont; } + Font *getFont() { return _font; } + void setFont(Font *font) { _font = font; } private: int _id; @@ -90,7 +90,7 @@ private: FontManager::FontUsage _fallback; bool _generated; - BdfFont *_bdfFont; + Font *_font; }; class MacFontManager { @@ -121,6 +121,7 @@ public: int getFontIdByName(Common::String name); private: + void loadFontsBDF(); void loadFonts(); void generateFontSubstitute(MacFont &macFont); diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp index 4d671e89fc..7a23b018c3 100644 --- a/graphics/macgui/mactext.cpp +++ b/graphics/macgui/mactext.cpp @@ -24,20 +24,17 @@ namespace Graphics { -MacText::MacText(Common::String s, const Graphics::Font *font, int fgcolor, int bgcolor, int maxWidth) { +MacText::MacText(Common::String s, const Graphics::Font *font, int fgcolor, int bgcolor, int maxWidth, TextAlign textAlignment) { _str = s; _font = font; _fgcolor = fgcolor; _bgcolor = bgcolor; _maxWidth = maxWidth; + _textMaxWidth = 0; _surface = nullptr; + _textAlignment = textAlignment; - _interLinear = 0; // 0 pixels between the lines by default - - if (_maxWidth == -1) - _textMaxWidth = 1000000; // Some big value - else - _textMaxWidth = -1; + _interLinear = 0; // 0 pixels between the lines by default splitString(_str); @@ -62,7 +59,7 @@ void MacText::splitString(Common::String &str) { prevCR = true; if (*s == '\r' || *s == '\n') { - _maxWidth = MIN(_font->wordWrapText(tmp, _maxWidth, _text), _maxWidth); + _textMaxWidth = MAX(_font->wordWrapText(tmp, _maxWidth, _text), _textMaxWidth); tmp.clear(); @@ -75,7 +72,7 @@ void MacText::splitString(Common::String &str) { } if (tmp.size()) - _maxWidth = MIN(_font->wordWrapText(tmp, _maxWidth, _text), _maxWidth); + _textMaxWidth = MAX(_font->wordWrapText(tmp, _maxWidth, _text), _textMaxWidth); } void MacText::reallocSurface() { @@ -84,7 +81,7 @@ void MacText::reallocSurface() { //TODO: work out why this rounding doesn't correctly fill the entire width //int requiredH = (_text.size() + (_text.size() * 10 + 9) / 10) * lineH int requiredH = _text.size() * lineH; - int surfW = _maxWidth == -1 ? _textMaxWidth : _maxWidth; + int surfW = _textMaxWidth; if (!_surface) { _surface = new ManagedSurface(surfW, requiredH); @@ -123,8 +120,12 @@ void MacText::render(int from, int to) { _surface->fillRect(Common::Rect(0, y, _surface->w, to * lineH), _bgcolor); for (int i = from; i < to; i++) { + int xOffset = 0; + if (_textAlignment == kTextAlignRight) xOffset = _textMaxWidth - _font->getStringWidth(_text[i]); + else if (_textAlignment == kTextAlignCenter) xOffset = (_textMaxWidth / 2) - (_font->getStringWidth(_text[i]) / 2); + //TODO: _textMaxWidth, when -1, was not rendering ANY text. - _font->drawString(_surface, _text[i], 0, y, _maxWidth, _fgcolor); + _font->drawString(_surface, _text[i], xOffset, y, _maxWidth, _fgcolor); y += _font->getFontHeight() + _interLinear; } diff --git a/graphics/macgui/mactext.h b/graphics/macgui/mactext.h index 21c063f896..28f0e50b76 100644 --- a/graphics/macgui/mactext.h +++ b/graphics/macgui/mactext.h @@ -25,12 +25,13 @@ #include "graphics/fontman.h" #include "graphics/managed_surface.h" +#include "graphics/font.h" namespace Graphics { class MacText { public: - MacText(Common::String s, const Graphics::Font *font, int fgcolor, int bgcolor, int maxWidth = -1); + MacText(Common::String s, const Graphics::Font *font, int fgcolor, int bgcolor, int maxWidth = -1, TextAlign textAlignment = kTextAlignLeft); void setInterLinear(int interLinear) { _interLinear = interLinear; } @@ -61,6 +62,8 @@ private: Graphics::ManagedSurface *_surface; bool _fullRefresh; + + TextAlign _textAlignment; }; } // End of namespace Graphics diff --git a/graphics/module.mk b/graphics/module.mk index 51e2ef7f2d..d862ee840a 100644 --- a/graphics/module.mk +++ b/graphics/module.mk @@ -7,6 +7,7 @@ MODULE_OBJS := \ fontman.o \ fonts/bdf.o \ fonts/consolefont.o \ + fonts/macfont.o \ fonts/newfont_big.o \ fonts/newfont.o \ fonts/ttf.o \ diff --git a/po/be_BY.po b/po/be_BY.po index 820c695f2f..45e82239da 100644 --- a/po/be_BY.po +++ b/po/be_BY.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-12-31 15:15+0000\n" "Last-Translator: Ivan Lukyanov <lid-gr@tut.by>\n" "Language-Team: Belarusian <https://translations.scummvm.org/projects/scummvm/" @@ -1802,7 +1802,7 @@ msgstr "³~Ð~ÛÞþÝÐÕ ÜÕÝî" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1823,7 +1823,7 @@ msgstr "·ÐåÐÒÐæì ÓãÛìÝî:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2855,8 +2855,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2868,8 +2868,8 @@ msgstr "Ã×ÝÐÒöæì ÓãÛìÝî:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/ca_ES.po b/po/ca_ES.po index edd9138a7c..6ab17be154 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.6.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-12-04 15:46+0000\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Catalan <https://translations.scummvm.org/projects/scummvm/" @@ -1815,7 +1815,7 @@ msgstr "~R~etorna al Llançador" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1836,7 +1836,7 @@ msgstr "Desa la partida:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2865,8 +2865,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2878,8 +2878,8 @@ msgstr "Recupera la partida:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/cs_CZ.po b/po/cs_CZ.po index f397c22b28..7cf31a5e4a 100644 --- a/po/cs_CZ.po +++ b/po/cs_CZ.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.7.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-12-04 15:43+0000\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Czech <https://translations.scummvm.org/projects/scummvm/" @@ -1803,7 +1803,7 @@ msgstr "~N~ávrat do Spou¹tìèe" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1824,7 +1824,7 @@ msgstr "Ulo¾it hru:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2854,8 +2854,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2867,8 +2867,8 @@ msgstr "Obnovit hru:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/da_DK.po b/po/da_DK.po index 85273bf5ae..503d90761b 100644 --- a/po/da_DK.po +++ b/po/da_DK.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-12-29 07:29+0000\n" "Last-Translator: poulsen93 <poulsen93@gmail.com>\n" "Language-Team: Danish <https://translations.scummvm.org/projects/scummvm/" @@ -1795,7 +1795,7 @@ msgstr "~R~etur til oversigt" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1816,7 +1816,7 @@ msgstr "Gemmer:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2845,8 +2845,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2858,8 +2858,8 @@ msgstr "Gendan spil:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/de_DE.po b/po/de_DE.po index 18c300bb37..fe4ef017ea 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.10.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-12-27 09:55+0000\n" "Last-Translator: Lothar Serra Mari <rootfather@scummvm.org>\n" "Language-Team: German <https://translations.scummvm.org/projects/scummvm/" @@ -1827,7 +1827,7 @@ msgstr "Zur Spiele~l~iste" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1848,7 +1848,7 @@ msgstr "Speichern:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2882,8 +2882,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2895,8 +2895,8 @@ msgstr "Spiel laden:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.10.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2017-01-07 02:29+0000\n" "Last-Translator: Filippos Karapetis <bluegr@gmail.com>\n" "Language-Team: Greek <https://translations.scummvm.org/projects/scummvm/" @@ -1834,7 +1834,7 @@ msgstr "Åðéó~ô~ñ. óôïí ÏäçãçôÞ" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1855,7 +1855,7 @@ msgstr "ÁðïèÞêåõóç ðáé÷íéäéïý:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2890,8 +2890,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2903,8 +2903,8 @@ msgstr "ÅðáíáöïñÜ ðáé÷íéäéïý:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/es_ES.po b/po/es_ES.po index c76cb46787..82f979911a 100644 --- a/po/es_ES.po +++ b/po/es_ES.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.4.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2017-01-15 22:05+0000\n" "Last-Translator: Rodrigo Vegas Sánchez-Ferrero <rodrigo.vegas@gmail.com>\n" -"Language-Team: Spanish " -"<https://translations.scummvm.org/projects/scummvm/scummvm/es/>\n" +"Language-Team: Spanish <https://translations.scummvm.org/projects/scummvm/" +"scummvm/es/>\n" "Language: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" @@ -1812,7 +1812,7 @@ msgstr "~V~olver al lanzador" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1833,7 +1833,7 @@ msgstr "Guardar partida:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2860,8 +2860,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2873,8 +2873,8 @@ msgstr "Cargar partida:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.5.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-12-04 13:27+0000\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Basque <https://translations.scummvm.org/projects/scummvm/" @@ -1799,7 +1799,7 @@ msgstr "It~z~uli abiarazlera" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1820,7 +1820,7 @@ msgstr "Gorde jokoa:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2849,8 +2849,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2862,8 +2862,8 @@ msgstr "Jokoa kargatu:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/fi_FI.po b/po/fi_FI.po index 192a4ee78d..209bacfdc2 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.6.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2017-01-06 16:03+0000\n" "Last-Translator: Timo Mikkolainen <tmikkola@gmail.com>\n" "Language-Team: Finnish <https://translations.scummvm.org/projects/scummvm/" @@ -1801,7 +1801,7 @@ msgstr "Palaa p~e~livalitsimeen" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1822,7 +1822,7 @@ msgstr "Tallenna peli:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2848,8 +2848,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2861,8 +2861,8 @@ msgstr "Lataa pelitallenne:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/fr_FR.po b/po/fr_FR.po index 0aea2ec110..f84bc68a5b 100644 --- a/po/fr_FR.po +++ b/po/fr_FR.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" -"PO-Revision-Date: 2017-01-03 19:44+0000\n" -"Last-Translator: Thierry Crozat <criezy@scummvm.org>\n" -"Language-Team: French <https://translations.scummvm.org/projects/scummvm/" -"scummvm/fr/>\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" +"PO-Revision-Date: 2017-01-18 21:18+0000\n" +"Last-Translator: Purple T <zeonk@hotmail.com>\n" +"Language-Team: French " +"<https://translations.scummvm.org/projects/scummvm/scummvm/fr/>\n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" @@ -96,12 +96,12 @@ msgstr "Vers : " #: gui/downloaddialog.cpp:63 msgid "Cancel download" -msgstr "Annuler" +msgstr "Annuler téléch." #: gui/downloaddialog.cpp:65 msgctxt "lowres" msgid "Cancel download" -msgstr "Annuler" +msgstr "Annuler téléch." #: gui/downloaddialog.cpp:67 msgid "Hide" @@ -112,7 +112,7 @@ msgid "" "It looks like your connection is limited. Do you really want to download " "files with it?" msgstr "" -"Votre connexion semble limité. Voulez-vous vraiment télécharger des " +"Votre connexion semble limitée. Voulez-vous vraiment télécharger des " "fichiers ?" #: gui/downloaddialog.cpp:118 gui/downloaddialog.cpp:152 @@ -244,7 +244,7 @@ msgstr "" #: gui/options.cpp:812 gui/options.cpp:825 gui/options.cpp:1356 #: audio/null.cpp:41 msgid "<default>" -msgstr "<defaut>" +msgstr "<défaut>" #: gui/editgamedialog.cpp:161 msgid "Platform:" @@ -274,12 +274,12 @@ msgstr "GFX" #: gui/editgamedialog.cpp:187 msgid "Override global graphic settings" -msgstr "Utiliser des réglages graphiques spécifiques à ce jeux" +msgstr "Utiliser des réglages graphiques spécifiques à ce jeu" #: gui/editgamedialog.cpp:189 msgctxt "lowres" msgid "Override global graphic settings" -msgstr "Réglages spécifiques à ce jeux" +msgstr "Réglages spécifiques à ce jeu" #: gui/editgamedialog.cpp:196 gui/options.cpp:1238 msgid "Audio" @@ -287,12 +287,12 @@ msgstr "Audio" #: gui/editgamedialog.cpp:199 msgid "Override global audio settings" -msgstr "Utiliser des réglages audio spécifiques à ce jeux" +msgstr "Utiliser des réglages audio spécifiques à ce jeu" #: gui/editgamedialog.cpp:201 msgctxt "lowres" msgid "Override global audio settings" -msgstr "Réglages spécifiques à ce jeux" +msgstr "Réglages spécifiques à ce jeu" #: gui/editgamedialog.cpp:210 gui/options.cpp:1243 msgid "Volume" @@ -305,12 +305,12 @@ msgstr "Volume" #: gui/editgamedialog.cpp:215 msgid "Override global volume settings" -msgstr "Utiliser des réglages de volume sonore spécifiques à ce jeux" +msgstr "Utiliser des réglages de volume sonore spécifiques à ce jeu" #: gui/editgamedialog.cpp:217 msgctxt "lowres" msgid "Override global volume settings" -msgstr "Réglages spécifiques à ce jeux" +msgstr "Réglages spécifiques à ce jeu" #: gui/editgamedialog.cpp:226 gui/options.cpp:1253 msgid "MIDI" @@ -318,12 +318,12 @@ msgstr "MIDI" #: gui/editgamedialog.cpp:229 msgid "Override global MIDI settings" -msgstr "Utiliser des réglages MIDI spécifiques à ce jeux" +msgstr "Utiliser des réglages MIDI spécifiques à ce jeu" #: gui/editgamedialog.cpp:231 msgctxt "lowres" msgid "Override global MIDI settings" -msgstr "Réglages spécifiques à ce jeux" +msgstr "Réglages spécifiques à ce jeu" #: gui/editgamedialog.cpp:241 gui/options.cpp:1263 msgid "MT-32" @@ -331,12 +331,12 @@ msgstr "MT-32" #: gui/editgamedialog.cpp:244 msgid "Override global MT-32 settings" -msgstr "Utiliser des réglages MT-32 spécifiques à ce jeux" +msgstr "Utiliser des réglages MT-32 spécifiques à ce jeu" #: gui/editgamedialog.cpp:246 msgctxt "lowres" msgid "Override global MT-32 settings" -msgstr "Réglages spécifiques à ce jeux" +msgstr "Réglages spécifiques à ce jeu" #: gui/editgamedialog.cpp:255 gui/options.cpp:1270 msgid "Paths" @@ -363,7 +363,7 @@ msgstr "Extra :" #: gui/editgamedialog.cpp:271 gui/editgamedialog.cpp:273 #: gui/editgamedialog.cpp:274 msgid "Specifies path to additional data used by the game" -msgstr "Définie un chemin vers des données suplémentaires utilisées par le jeu" +msgstr "Définie un chemin vers des données supplémentaires utilisées par le jeu" #: gui/editgamedialog.cpp:273 gui/options.cpp:1298 msgctxt "lowres" @@ -425,7 +425,7 @@ msgstr "" #: gui/editgamedialog.cpp:534 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." +msgstr "Cet ID est déjà utilisé par un autre jeu. Choisissez-en un autre svp." #: gui/editrecorddialog.cpp:58 msgid "Author:" @@ -570,7 +570,7 @@ msgstr "Affecter" #: gui/KeysDialog.cpp:49 msgid "Select an action and click 'Map'" -msgstr "Selectionez une action et cliquez 'Affecter'" +msgstr "Sélectionnez une action et cliquez 'Affecter'" #: gui/KeysDialog.cpp:80 gui/KeysDialog.cpp:102 gui/KeysDialog.cpp:141 #, c-format @@ -583,7 +583,7 @@ msgstr "Touche associée : aucune" #: gui/KeysDialog.cpp:90 msgid "Please select an action" -msgstr "Selectionnez une action" +msgstr "Sélectionnez une action" #: gui/KeysDialog.cpp:106 msgid "Press the key to associate" @@ -727,11 +727,11 @@ msgstr "" #: gui/launcher.cpp:526 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é !" +msgstr "ScummVM n'a pas pu trouver de moteur pour lancer le jeu sélectionné !" #: gui/launcher.cpp:577 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é !" +msgstr "ScummVM n'a pas trouvé de jeu dans le répertoire sélectionné !" #: gui/launcher.cpp:590 msgid "Pick the game:" @@ -767,7 +767,7 @@ msgstr "%d répertoires examinés ..." #, c-format msgid "Discovered %d new games, ignored %d previously added games ..." msgstr "" -"%d nouveaux jeux trouvés, %d jeux ignorés (déjà ajouté précédemment) ..." +"%d nouveaux jeux trouvés, %d jeux ignorés (déjà ajoutés précédemment) ..." #: gui/onscreendialog.cpp:101 gui/onscreendialog.cpp:103 msgid "Stop" @@ -888,7 +888,7 @@ msgstr "Corrige le rapport d'aspect pour les jeux en 320x200" #: gui/options.cpp:849 msgid "Preferred Device:" -msgstr "Sortie Préféré :" +msgstr "Sortie Préférée :" #: gui/options.cpp:849 msgid "Music Device:" @@ -907,7 +907,7 @@ msgstr "Spécifie le périphérique de sortie audio ou l'émulateur de carte audio" #: gui/options.cpp:851 msgctxt "lowres" msgid "Preferred Dev.:" -msgstr "Sortie Préféré :" +msgstr "Sortie Préférée :" #: gui/options.cpp:851 msgctxt "lowres" @@ -932,7 +932,7 @@ msgid "" "soundcard" msgstr "" "Une valeur plus élevée donne une meilleure qualité audio mais peut ne pas " -"être supporté par votre carte son" +"être supportée par votre carte son" #: gui/options.cpp:900 msgid "GM Device:" @@ -967,7 +967,7 @@ msgstr "SoundFont :" #: gui/options.cpp:942 msgid "Mixed AdLib/MIDI mode" -msgstr "Mode mixe AdLib/MIDI" +msgstr "Mode mixte AdLib/MIDI" #: gui/options.cpp:942 msgid "Use both MIDI and AdLib sound generation" @@ -1219,7 +1219,7 @@ msgstr "Synchronisé :" #: gui/options.cpp:1425 msgid "When the last saved games sync for this storage occured" -msgstr "Quand la dernière synchronisation des sauvegardes à eu lieu" +msgstr "Quand la dernière synchronisation des sauvegardes a eu lieu" #: gui/options.cpp:1428 gui/storagewizarddialog.cpp:71 msgid "Connect" @@ -1265,7 +1265,7 @@ msgstr "Chemin /racine/ :" #: gui/options.cpp:1437 gui/options.cpp:1439 gui/options.cpp:1440 msgid "Specifies which directory the Files Manager can access" -msgstr "Indique le répertoire que le gestionnaire de fichier peut accéder" +msgstr "Indique le répertoire auquel le gestionnaire de fichier peut accéder" #: gui/options.cpp:1439 msgctxt "lowres" @@ -1301,13 +1301,13 @@ 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 "" -"Le thème que vous avez sélectioné ne support pas la langue française. Si " +"Le thème que vous avez sélectionné ne support pas la langue française. Si " "vous voulez l'utiliser vous devez d'abord changer de langue." #: gui/options.cpp:1702 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 " +"Le répertoire sélectionné est verrouillé en écriture. Sélectionnez un autre " "répertoire." #: gui/options.cpp:1711 @@ -1316,7 +1316,7 @@ msgstr "Sélectionner le répertoire des thèmes d'interface" #: gui/options.cpp:1721 msgid "Select directory for extra files" -msgstr "Sélectionner le répertoire pour les fichiers suplémentaires" +msgstr "Sélectionner le répertoire pour les fichiers supplémentaires" #: gui/options.cpp:1732 msgid "Select directory for plugins" @@ -1428,7 +1428,7 @@ msgstr "Auteur inconnu" #: gui/remotebrowser.cpp:128 msgid "ScummVM could not access the directory!" -msgstr "ScummVM n'a pas pu accédé au répertoire !" +msgstr "ScummVM n'a pas pu accéder au répertoire !" #: gui/saveload-dialog.cpp:334 msgid "List view" @@ -1652,7 +1652,7 @@ msgstr "Passer la phrase" #: base/main.cpp:547 msgid "Error running game:" -msgstr "Erreur lors de l'éxécution du jeu : " +msgstr "Erreur lors de l'exécution du jeu : " #: base/main.cpp:594 msgid "Could not find any engine capable of running the selected game" @@ -1664,7 +1664,7 @@ msgstr "Pas d'erreur" #: common/error.cpp:40 msgid "Game data not found" -msgstr "Fichier de donées introuvable" +msgstr "Fichier de données introuvable" #: common/error.cpp:42 msgid "Game id not supported" @@ -1676,7 +1676,7 @@ msgstr "Mode de couleurs non supporté" #: common/error.cpp:47 msgid "Read permission denied" -msgstr "Véroullié en lecture" +msgstr "Verrouillé en lecture" #: common/error.cpp:49 msgid "Write permission denied" @@ -1716,7 +1716,7 @@ msgstr "Ce moteur de jeu ne supporte pas les sauvegardes" #: common/error.cpp:71 msgid "User canceled" -msgstr "Annuler par l'utilisateur" +msgstr "Annulé par l'utilisateur" #: common/error.cpp:75 msgid "Unknown error" @@ -1775,8 +1775,7 @@ msgstr "" "Votre version du jeu dans '%s' n'est pas reconnue.\n" "Veuillez reporter les informations ci-dessous à l'équipe de ScummVM ainsi " "que\n" -"le nom du jeu que vous avez essayé d'ajouter, sa version, le language, " -"etc... :" +"le nom du jeu que vous avez essayé d'ajouter, sa version, la langue, etc... :" #: engines/dialogs.cpp:85 msgid "~R~esume" @@ -1819,7 +1818,7 @@ msgstr "Retour au ~L~anceur" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1840,7 +1839,7 @@ msgstr "Sauvegarde :" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1966,7 +1965,7 @@ msgstr "Émulateur DOSBox OPL" #: audio/fmopl.cpp:67 msgid "ALSA Direct FM" -msgstr "ALSA direct-FM" +msgstr "ALSA Direct FM" #: audio/mididrv.cpp:209 #, c-format @@ -2055,7 +2054,7 @@ msgstr "Émulateur C64 Audio" #: backends/cloud/storage.cpp:211 msgid "Saved games sync complete." -msgstr "Synchronisation des sauvegardes terminé." +msgstr "Synchronisation des sauvegardes terminée." #: backends/cloud/storage.cpp:222 msgid "Saved games sync was cancelled." @@ -2295,7 +2294,7 @@ msgstr "Décalage X du toucher" #: backends/platform/ds/arm9/source/dsoptions.cpp:75 msgid "Touch Y Offset" -msgstr "Décallage Y du toucher" +msgstr "Décalage Y du toucher" #: backends/platform/ds/arm9/source/dsoptions.cpp:87 msgid "Use laptop trackpad-style cursor control" @@ -2319,7 +2318,7 @@ msgstr "Échelle de l'écran principal :" #: 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)" +msgstr "Mise à l'échelle matérielle (rapide mais qualité faible)" #: backends/platform/ds/arm9/source/dsoptions.cpp:108 msgid "Software scale (good quality, but slower)" @@ -2339,7 +2338,7 @@ msgstr "Audio haute qualité (plus lent) (redémarrer)" #: backends/platform/ds/arm9/source/dsoptions.cpp:122 msgid "Disable power off" -msgstr "Désactivé l'extinction" +msgstr "Désactiver l'extinction" #: backends/platform/ios7/ios7_osys_events.cpp:309 #: backends/platform/ios7/ios7_osys_events.cpp:519 @@ -2542,7 +2541,7 @@ msgstr "Sensibilité du pad GC :" #: backends/platform/wii/options.cpp:80 msgid "GC Pad acceleration:" -msgstr "Acceleration du pad GC :" +msgstr "Accélération du pad GC :" #: backends/platform/wii/options.cpp:86 msgid "DVD" @@ -2554,7 +2553,7 @@ msgstr "État :" #: backends/platform/wii/options.cpp:90 backends/platform/wii/options.cpp:102 msgid "Unknown" -msgstr "Inconue" +msgstr "Inconnue" #: backends/platform/wii/options.cpp:93 msgid "Mount DVD" @@ -2639,7 +2638,7 @@ msgstr "Réseau non initialisé (%d)" #: backends/platform/wince/CEActionsPocket.cpp:46 msgid "Hide Toolbar" -msgstr "Caché la barre d'outils" +msgstr "Cacher la barre d'outils" #: backends/platform/wince/CEActionsPocket.cpp:47 msgid "Show Keyboard" @@ -2732,13 +2731,13 @@ msgstr "" #: backends/platform/wince/wince-sdl.cpp:529 msgid "Map hide toolbar action" -msgstr "Affecter l'action 'Cacher Bar d'Outils'" +msgstr "Affecter l'action 'Cacher Barre d'Outils'" #: backends/platform/wince/wince-sdl.cpp:533 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" +"Vous devez affecter une touche à l'action 'Cacher Barre d'Outils' pour " +"pouvoir jouer à ce jeu" #: backends/platform/wince/wince-sdl.cpp:542 msgid "Map Zoom Up action (optional)" @@ -2752,7 +2751,7 @@ msgstr "Affecter l'action 'Zoomer' (optionnelle)" 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 " +"N'oubliez pas d'affecter une touche à l'action 'Cacher Barre d'Outils' pour " "pouvoir voir entièrement l'inventaire" #: backends/updates/macosx/macosx-updates.mm:79 @@ -2871,8 +2870,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2884,8 +2883,8 @@ msgstr "Charger le jeu :" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" @@ -2920,7 +2919,7 @@ msgid "" "\n" "%s" msgstr "" -"Sauvegarde enregistré avec succès dans le fichier :\n" +"Sauvegarde enregistrée avec succès dans le fichier :\n" "\n" "%s" @@ -2949,7 +2948,7 @@ msgid "" msgstr "" "ScummVM a trouvé des anciennes sauvegardes pour Drascula qui ont besoin " "d'être converties.\n" -"L'ancien format de sauvegarde n'est plus supporté, donc vous ne pourrez pas " +"L'ancien format de sauvegarde n'est plus supporté, vous ne pourrez donc pas " "les charger si vous ne les convertissez pas.\n" "\n" "Appuyer sur OK pour les convertir maintenant, sinon le même message " @@ -3040,20 +3039,20 @@ msgstr "Activer le défilement régulier en marchant" #. walk towards that direction. #: engines/kyra/detection.cpp:112 msgid "Floating cursors" -msgstr "Curseurs flotants" +msgstr "Curseurs flottants" #: engines/kyra/detection.cpp:113 msgid "Enable floating cursors" -msgstr "Activer les curseurs flotants" +msgstr "Activer les curseurs flottants" #. I18N: HP stands for Hit Points #: engines/kyra/detection.cpp:127 msgid "HP bar graphs" -msgstr "Bar HP" +msgstr "Barres HP" #: engines/kyra/detection.cpp:128 msgid "Enable hit point bar graphs" -msgstr "Activer les bars de santé (Hit Point)" +msgstr "Activer les barres de santé (Hit Point)" #: engines/kyra/eobcommon.cpp:331 engines/kyra/lol.cpp:481 msgid "Move Forward" @@ -3222,7 +3221,7 @@ msgstr "Éléments d'inventaire animés" #: engines/mads/detection.cpp:111 engines/mads/detection.cpp:112 msgid "Animated game interface" -msgstr "Interface du jeu animé" +msgstr "Interface du jeu animée" #: engines/mads/detection.cpp:121 engines/mads/detection.cpp:122 msgid "Naughty game mode" @@ -3300,8 +3299,8 @@ msgid "" "the game. ScummVM cannot do that and\n" "the site no longer exists." msgstr "" -"A ce point la démo de Riven vous\n" -"demanderais si vous voulez ouvrir un\n" +"A ce point, la démo de Riven vous\n" +"demanderait si vous voulez ouvrir un\n" "navigateur web pour vous amener sur\n" "la page de Red Orb et acheter le jeu.\n" "ScummVM ne peut pas faire ça et le\n" @@ -3366,7 +3365,7 @@ msgid "" msgstr "" "ScummVM a trouvé des anciens fichiers de sauvegarde pour Nippon Safes qui " "ont besoin d'être convertis.\n" -"L'ancien format de sauvegarde n'est plus supporté, donc vous ne pourrez pas " +"L'ancien format de sauvegarde n'est plus supporté, vous ne pourrez donc pas " "les charger si vous ne les convertissez pas.\n" "\n" "Appuyer sur OK pour les convertir maintenant, sinon le même message " @@ -3515,10 +3514,10 @@ msgid "" "to add and its version, language, etc.:\n" msgstr "" "Votre version du jeu n'est pas reconnue. Si ce n'est pas une version\n" -"modifié (par exemple traduite par des fans), veuillez reporter les " +"modifiée (par exemple traduite par des fans), veuillez reporter les " "informations\n" "ci-dessous à l'équipe de ScummVM ainsi que le nom du jeu que vous avez\n" -"essayé d'ajouter, sa version, le language, etc... :\n" +"essayé d'ajouter, sa version, la langue, etc... :\n" #: engines/scumm/detection.cpp:1138 msgid "" @@ -4096,7 +4095,7 @@ msgstr " active/désactive le combat à la souris" #: engines/scumm/help.cpp:304 msgid "Fighting controls (numpad):" -msgstr "Contrôles de combat (pavet numérique) :" +msgstr "Contrôles de combat (pavé numérique) :" #: engines/scumm/help.cpp:305 engines/scumm/help.cpp:306 #: engines/scumm/help.cpp:307 @@ -4117,7 +4116,7 @@ msgstr "Bloquer bas" #: engines/scumm/help.cpp:311 msgid "Punch high" -msgstr "Fraper haut" +msgstr "Frapper haut" #: engines/scumm/help.cpp:312 msgid "Punch middle" @@ -4149,7 +4148,7 @@ msgstr "respectivement." #: engines/scumm/help.cpp:328 msgid "Biplane controls (numpad):" -msgstr "Contrôles du biplane (paver numérique) :" +msgstr "Contrôles du biplan (pavé numérique) :" #: engines/scumm/help.cpp:329 msgid "Fly to upper left" @@ -4219,9 +4218,9 @@ msgid "" "Tentacle game directory, and the game has to be added to ScummVM." msgstr "" "Normalement, Maniac Mansion devrait démarrer maintenant. Mais pour que cela " -"marche il faut que les fichiers du jeu Maniac Mansion soient dans e " +"marche, il faut que les fichiers du jeu Maniac Mansion soient dans le " "répertoire 'Maniac' à l'intérieur du répertoire du jeu Day of the Tentacle, " -"et le jeu doit être ajouter à ScummVM." +"et le jeu doit être ajouté à ScummVM." #: engines/scumm/players/player_v3m.cpp:129 msgid "" @@ -4246,7 +4245,7 @@ msgstr "Transitions de scènes pixélisées" #: engines/sherlock/detection.cpp:82 msgid "When changing scenes, a randomized pixel transition is done" msgstr "" -"Lors du changement de scène une transition avec des pixels aléatoires est " +"Lors du changement de scène, une transition avec des pixels aléatoires est " "utilisée" #: engines/sherlock/detection.cpp:91 @@ -4321,7 +4320,7 @@ msgstr "" #: engines/sword1/animation.cpp:568 engines/sword2/animation.cpp:470 #, c-format msgid "Cutscene '%s' not found" -msgstr "Séquence '%s' non trouvé" +msgstr "Séquence '%s' non trouvée" #: engines/sword1/control.cpp:863 msgid "" @@ -4335,7 +4334,7 @@ msgid "" msgstr "" "ScummVM a trouvé des anciens fichiers de sauvegarde pour Broken Sword 1 qui " "ont besoin d'être convertis.\n" -"L'ancien format de sauvegarde n'est plus supporté, donc vous ne pourrez pas " +"L'ancien format de sauvegarde n'est plus supporté, vous ne pourrez donc pas " "les charger si vous ne les convertissez pas.\n" "\n" "Appuyer sur OK pour les convertir maintenant, sinon le même message " @@ -4385,8 +4384,8 @@ msgstr "Utiliser les voix anglaises" msgid "" "Use English speech instead of German for every language other than German" msgstr "" -"Utilise les voix anglaises au lieu des voix allemandes pour tous les autres " -"langages" +"Utilise les voix anglaises au lieu des voix allemandes pour toutes les " +"autres langues" #: engines/teenagent/resources.cpp:118 msgid "" @@ -4486,7 +4485,7 @@ msgid "" "%d. You will need an updated version of the engine to use this saved game." msgstr "" "Ce fichier de sauvegarde est en version %u, mais ce moteur ne supporte que " -"les versions %d ou inférieure. Vous devez utiliser une version plus récente " +"les versions %d ou inférieures. Vous devez utiliser une version plus récente " "de ScummVM pour pouvoir charger cette sauvegarde." #~ msgid "" diff --git a/po/gl_ES.po b/po/gl_ES.po index 3a885d245f..c6b9dd9186 100644 --- a/po/gl_ES.po +++ b/po/gl_ES.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-11-28 15:51+0000\n" "Last-Translator: Santiago G. Sanz <santiagogarciasanz@gmail.com>\n" "Language-Team: Galician <https://translations.scummvm.org/projects/scummvm/" @@ -1807,7 +1807,7 @@ msgstr "~V~olver ao Iniciador" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1828,7 +1828,7 @@ msgstr "Gardar partida:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2854,8 +2854,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2867,8 +2867,8 @@ msgstr "Restaurar xogo:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/hu_HU.po b/po/hu_HU.po index bce6b19d66..efe95cc03c 100644 --- a/po/hu_HU.po +++ b/po/hu_HU.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2017-01-08 06:09+0000\n" "Last-Translator: George Kormendi <grubycza@hotmail.com>\n" "Language-Team: Hungarian <https://translations.scummvm.org/projects/scummvm/" @@ -1794,7 +1794,7 @@ msgstr "Visszatérés az indítóba" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1815,7 +1815,7 @@ msgstr "Játék mentése:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2837,8 +2837,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2850,8 +2850,8 @@ msgstr "Játékmenet visszaállítása:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/it_IT.po b/po/it_IT.po index 5e56e255c7..be28391b04 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2017-01-06 21:05+0000\n" "Last-Translator: Walter Agazzi <tag2015@gmail.com>\n" "Language-Team: Italian <https://translations.scummvm.org/projects/scummvm/" @@ -1814,7 +1814,7 @@ msgstr "~V~ai a elenco giochi" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1835,7 +1835,7 @@ msgstr "Salva gioco:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2864,8 +2864,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2877,8 +2877,8 @@ msgstr "Ripristina partita:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/nb_NO.po b/po/nb_NO.po index ad7aca7b8f..227186cfc9 100644 --- a/po/nb_NO.po +++ b/po/nb_NO.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-12-26 17:36+0000\n" "Last-Translator: Einar Johan Trøan Sømåen <einarjohants@gmail.com>\n" "Language-Team: Norwegian Bokmål <https://translations.scummvm.org/projects/" @@ -1796,7 +1796,7 @@ msgstr "~T~ilbake til oppstarter" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1817,7 +1817,7 @@ msgstr "Lagret spill:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2840,8 +2840,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2853,8 +2853,8 @@ msgstr "Gjennopprett spill:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/nl_NL.po b/po/nl_NL.po index 015a027b3d..5791984059 100644 --- a/po/nl_NL.po +++ b/po/nl_NL.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.9.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2017-01-02 18:38+0000\n" "Last-Translator: Ben Castricum <github@bencastricum.nl>\n" "Language-Team: Dutch <https://translations.scummvm.org/projects/scummvm/" @@ -1804,7 +1804,7 @@ msgstr "S~t~artmenu" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1825,7 +1825,7 @@ msgstr "Spel opslaan:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2859,8 +2859,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2872,8 +2872,8 @@ msgstr "Laad opgeslagen spel:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/nn_NO.po b/po/nn_NO.po index c170ca8bb6..f3bcf2039e 100644 --- a/po/nn_NO.po +++ b/po/nn_NO.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-12-18 18:23+0000\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Norwegian Nynorsk <https://translations.scummvm.org/projects/" @@ -1793,7 +1793,7 @@ msgstr "Tilbake til Oppsta~r~tar" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1814,7 +1814,7 @@ msgstr "Lagra spel:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2836,8 +2836,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2849,8 +2849,8 @@ msgstr "Gjenopprett spel:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/pl_PL.po b/po/pl_PL.po index 94413b3ed7..2b4ab87ef8 100644 --- a/po/pl_PL.po +++ b/po/pl_PL.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2017-01-06 10:37+0000\n" "Last-Translator: Rafa³ Rzepecki <divided.mind@gmail.com>\n" "Language-Team: Polish <https://translations.scummvm.org/projects/scummvm/" @@ -1797,7 +1797,7 @@ msgstr "~P~owrót do launchera" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1818,7 +1818,7 @@ msgstr "Zapis:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2840,8 +2840,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2853,8 +2853,8 @@ msgstr "Wznów grê:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/pt_BR.po b/po/pt_BR.po index e62fcadc67..ff9f0ab9ef 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.3.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-12-22 21:50+0000\n" "Last-Translator: Alexandre Folle de Menezes <afmenez@terra.com.br>\n" "Language-Team: Portuguese (Brazil) <https://translations.scummvm.org/" @@ -1830,7 +1830,7 @@ msgstr "~V~oltar ao menu" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1851,7 +1851,7 @@ msgstr "Salvar jogo:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2883,8 +2883,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2896,8 +2896,8 @@ msgstr "Restaurar jogo:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/pt_PT.po b/po/pt_PT.po index 5287fb3503..ec273ffdb5 100644 --- a/po/pt_PT.po +++ b/po/pt_PT.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.10.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-12-14 00:22+0000\n" "Last-Translator: Fernando Sarmento <nando_sarmento@hotmail.com>\n" "Language-Team: Portuguese (Portugal) <https://translations.scummvm.org/" @@ -1787,7 +1787,7 @@ msgstr "" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1808,7 +1808,7 @@ msgstr "" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2790,8 +2790,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2803,8 +2803,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/ru_RU.po b/po/ru_RU.po index c7a2e37a11..2f11211895 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.8.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-12-31 21:04+0000\n" "Last-Translator: Ivan Lukyanov <lid-gr@tut.by>\n" "Language-Team: Russian <https://translations.scummvm.org/projects/scummvm/" @@ -1805,7 +1805,7 @@ msgstr "~²~ ÓÛÐÒÝÞÕ ÜÕÝî" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1826,7 +1826,7 @@ msgstr "ÁÞåàÐÝØâì ØÓàã:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2854,8 +2854,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2867,8 +2867,8 @@ msgstr "²ÞááâÐÝÞÒØâì ØÓàã:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/scummvm.pot b/po/scummvm.pot index d7d707890c..d260bca125 100644 --- a/po/scummvm.pot +++ b/po/scummvm.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.10.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+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" @@ -1755,7 +1755,7 @@ msgstr "" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1776,7 +1776,7 @@ msgstr "" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2758,8 +2758,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2771,8 +2771,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/sv_SE.po b/po/sv_SE.po index e4cb850476..c788b0ee00 100644 --- a/po/sv_SE.po +++ b/po/sv_SE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.5.0svn\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2017-01-06 09:18+0000\n" "Last-Translator: Petter Sjölund <ignalina@mac.com>\n" "Language-Team: Swedish <https://translations.scummvm.org/projects/scummvm/" @@ -1805,7 +1805,7 @@ msgstr "Åte~r~vänd till launcher" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1826,7 +1826,7 @@ msgstr "Spara spelet:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2852,8 +2852,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2865,8 +2865,8 @@ msgstr "Ladda sparfil:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/uk_UA.po b/po/uk_UA.po index 748f457c21..1279fe90b7 100644 --- a/po/uk_UA.po +++ b/po/uk_UA.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.9.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2017-01-01 00:02+0000\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Ukrainian <https://translations.scummvm.org/projects/scummvm/" @@ -1806,7 +1806,7 @@ msgstr "~¿~ÞÒÕà.Ò ÓÞÛÞÒÝÕ ÜÕÝî" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1827,7 +1827,7 @@ msgstr "·ÑÕàÕÓâØ Óàã:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2855,8 +2855,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2868,8 +2868,8 @@ msgstr "²öÔÝÞ񯉯 Óàã:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" diff --git a/po/zh-Latn_CN.po b/po/zh-Latn_CN.po index 3f86255ba9..c3cbc3d6be 100644 --- a/po/zh-Latn_CN.po +++ b/po/zh-Latn_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: ScummVM 1.9.0git\n" "Report-Msgid-Bugs-To: scummvm-devel@lists.scummvm.org\n" -"POT-Creation-Date: 2017-01-12 10:39+0100\n" +"POT-Creation-Date: 2017-01-16 19:19+0100\n" "PO-Revision-Date: 2016-12-26 19:38+0000\n" "Last-Translator: Eugene Sandulenko <sev@scummvm.org>\n" "Language-Team: Chinese <https://translations.scummvm.org/projects/scummvm/" @@ -1792,7 +1792,7 @@ msgstr "~R~Fanhui Qidongqi" #: engines/gnap/menu.cpp:464 engines/hugo/file.cpp:298 #: engines/mads/nebular/dialogs_nebular.cpp:350 engines/mohawk/dialogs.cpp:104 #: engines/neverhood/menumodule.cpp:880 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -1813,7 +1813,7 @@ msgstr "Baocun Youxi:" #: engines/hugo/file.cpp:298 engines/mads/nebular/dialogs_nebular.cpp:350 #: engines/mohawk/dialogs.cpp:104 engines/neverhood/menumodule.cpp:880 #: engines/parallaction/saveload.cpp:209 engines/pegasus/pegasus.cpp:377 -#: engines/sci/engine/kfile.cpp:899 engines/sci/engine/kfile.cpp:1175 +#: engines/sci/engine/kfile.cpp:900 engines/sci/engine/kfile.cpp:1176 #: engines/scumm/dialogs.cpp:184 engines/sherlock/scalpel/scalpel.cpp:1250 #: engines/sherlock/tattoo/widget_files.cpp:75 engines/toltecs/menu.cpp:291 #: engines/toon/toon.cpp:3340 engines/tsage/scenes.cpp:599 @@ -2836,8 +2836,8 @@ msgstr "" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore game:" @@ -2849,8 +2849,8 @@ msgstr "Huifu Youxi:" #: engines/dm/loadsave.cpp:184 engines/drascula/saveload.cpp:377 #: engines/dreamweb/saveload.cpp:170 engines/gnap/menu.cpp:473 #: engines/hugo/file.cpp:400 engines/mads/nebular/dialogs_nebular.cpp:377 -#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1018 -#: engines/sci/engine/kfile.cpp:1247 engines/sherlock/scalpel/scalpel.cpp:1263 +#: engines/neverhood/menumodule.cpp:893 engines/sci/engine/kfile.cpp:1019 +#: engines/sci/engine/kfile.cpp:1248 engines/sherlock/scalpel/scalpel.cpp:1263 #: engines/sherlock/tattoo/widget_files.cpp:94 engines/toltecs/menu.cpp:266 #: engines/toon/toon.cpp:3432 engines/zvision/file/save_manager.cpp:62 msgid "Restore" |
