aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/wintermute/base/base_game.cpp90
-rw-r--r--engines/wintermute/wintermute.cpp4
2 files changed, 94 insertions, 0 deletions
diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index 58195e6faa..81a34bd5bc 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -1983,6 +1983,96 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
return STATUS_OK;
}
+#ifdef ENABLE_FOXTAIL
+ //////////////////////////////////////////////////////////////////////////
+ // [FoxTail] GetScreenType
+ // Returns 0 on fullscreen and 1 on window
+ // Used to init and update controls at options.script and methods.script
+ //////////////////////////////////////////////////////////////////////////
+ else if (strcmp(name, "GetScreenType") == 0) {
+ stack->correctParams(0);
+ int type = !g_system->getFeatureState(OSystem::kFeatureFullscreenMode);
+ stack->pushInt(type);
+
+ return STATUS_OK;
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // [FoxTail] GetScreenMode
+ // Returns integer to be used as a pixelization mode multiplier
+ // (e.g. it returns 2 for 640x360, 3 for 960x540, etc...)
+ // Used to init and update controls at options.script and methods.script
+ // This implementation always return 2 to fake window size of 2*320 x 2*180
+ //////////////////////////////////////////////////////////////////////////
+ else if (strcmp(name, "GetScreenMode") == 0) {
+ stack->correctParams(0);
+ stack->pushInt(2);
+
+ return STATUS_OK;
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // [FoxTail] GetDesktopDisplayMode
+ // Return struct with "w" and "h" fields in 1.2.362-
+ // Return array with "w" and "h" items in 1.2.527+
+ // Used to init and update controls at options.script and methods.script
+ // w,h of actual desktop size expected to calcucate maximum available size
+ // Available screen modes are calcucated as 2...N, N*320<w and N*180<h
+ // This implementation fakes available size as 2*320 x 2*180 only
+ //////////////////////////////////////////////////////////////////////////
+ else if (strcmp(name, "GetDesktopDisplayMode") == 0) {
+ stack->correctParams(0);
+ stack->pushInt(2 * 180 + 1);
+ stack->pushInt(2 * 320 + 1);
+
+ BaseScriptable *obj;
+ if (BaseEngine::instance().isFoxTail(FOXTAIL_1_2_527, FOXTAIL_LATEST_VERSION)) {
+ stack->pushInt(2);
+ obj = makeSXArray(_gameRef, stack);
+ } else {
+ stack->pushInt(0);
+ obj = makeSXObject(_gameRef, stack);
+ obj->scSetProperty("w", stack->pop());
+ obj->scSetProperty("h", stack->pop());
+ }
+ stack->pushNative(obj, false);
+
+ return STATUS_OK;
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // [FoxTail] SetScreenTypeMode
+ // This implementation ignores mode, toggles screen type only
+ // Used to change screen type&mode at options.script and methods.script
+ // Return value is never used
+ //////////////////////////////////////////////////////////////////////////
+ else if (strcmp(name, "SetScreenTypeMode") == 0) {
+ stack->correctParams(2);
+ int type = stack->pop()->getInt();
+ stack->pop()->getInt(); //mode is unused
+ g_system->beginGFXTransaction();
+ g_system->setFeatureState(OSystem::kFeatureFullscreenMode, !type);
+ g_system->endGFXTransaction();
+ stack->pushNULL();
+
+ return STATUS_OK;
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // [FoxTail] ChangeWindowGrab
+ // Used at game.script on "Keypress" event on F11
+ // Readme of FoxTail says: "F11 - free the mouse pointer from the window"
+ // This implementation does nothing
+ // Return value is never used
+ //////////////////////////////////////////////////////////////////////////
+ else if (strcmp(name, "ChangeWindowGrab") == 0) {
+ stack->correctParams(0);
+ stack->pushNULL();
+
+ return STATUS_OK;
+ }
+#endif
+
//////////////////////////////////////////////////////////////////////////
// ShowStatusLine
//////////////////////////////////////////////////////////////////////////
diff --git a/engines/wintermute/wintermute.cpp b/engines/wintermute/wintermute.cpp
index 0c8c8a9d1a..dec2025346 100644
--- a/engines/wintermute/wintermute.cpp
+++ b/engines/wintermute/wintermute.cpp
@@ -115,6 +115,10 @@ Common::Error WintermuteEngine::run() {
Graphics::PixelFormat format(4, 8, 8, 8, 8, 24, 16, 8, 0);
if (_gameDescription->adDesc.flags & GF_LOWSPEC_ASSETS) {
initGraphics(320, 240, &format);
+#ifdef ENABLE_FOXTAIL
+ } else if (BaseEngine::isFoxTailCheck(_gameDescription->targetExecutable)) {
+ initGraphics(640, 360, &format);
+#endif
} else {
initGraphics(800, 600, &format);
}