/* 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. * */ //============================================================================= // // Stubs for plugin functions. // //============================================================================= //include #include "ags/engine/ac/global_plugin.h" #include "ags/engine/ac/mouse.h" #include "ags/shared/util/string_compat.h" #include "ags/engine/script/script_runtime.h" namespace AGS3 { int pluginSimulatedClick = NONE; void PluginSimulateMouseClick(int pluginButtonID) { pluginSimulatedClick = pluginButtonID - 1; } //============================================================================= // // Script API Functions // //============================================================================= RuntimeScriptValue Sc_PluginStub_Void(const RuntimeScriptValue *params, int32_t param_count) { return RuntimeScriptValue((int32_t)0); } RuntimeScriptValue Sc_PluginStub_Int0(const RuntimeScriptValue *params, int32_t param_count) { return RuntimeScriptValue().SetInt32(0); } RuntimeScriptValue Sc_PluginStub_IntNeg1(const RuntimeScriptValue *params, int32_t param_count) { return RuntimeScriptValue().SetInt32(-1); } RuntimeScriptValue Sc_PluginStub_NullStr(const RuntimeScriptValue *params, int32_t param_count) { return RuntimeScriptValue().SetStringLiteral(NULL); } bool RegisterPluginStubs(const char *name) { // Stubs for plugin functions. bool is_agsteam = (ags_stricmp(name, "agsteam") == 0) || (ags_stricmp(name, "agsteam-unified") == 0) || (ags_stricmp(name, "agsteam-disjoint") == 0); bool is_agsgalaxy = (ags_stricmp(name, "agsgalaxy") == 0) || (ags_stricmp(name, "agsgalaxy-unified") == 0) || (ags_stricmp(name, "agsgalaxy-disjoint") == 0); if (ags_stricmp(name, "ags_shell") == 0) { // ags_shell.dll ccAddExternalStaticFunction("ShellExecute", Sc_PluginStub_Void); return true; } else if (ags_stricmp(name, "ags_snowrain") == 0) { // ags_snowrain.dll ccAddExternalStaticFunction("srSetSnowDriftRange", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetSnowDriftSpeed", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetSnowFallSpeed", Sc_PluginStub_Void); ccAddExternalStaticFunction("srChangeSnowAmount", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetSnowBaseline", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetSnowTransparency", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetSnowDefaultView", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetSnowWindSpeed", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetSnowAmount", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetSnowView", Sc_PluginStub_Void); ccAddExternalStaticFunction("srChangeRainAmount", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetRainView", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetRainDefaultView", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetRainTransparency", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetRainWindSpeed", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetRainBaseline", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetRainAmount", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetRainFallSpeed", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetWindSpeed", Sc_PluginStub_Void); ccAddExternalStaticFunction("srSetBaseline", Sc_PluginStub_Void); return true; } else if (ags_stricmp(name, "agsjoy") == 0) { // agsjoy.dll ccAddExternalStaticFunction("JoystickCount", Sc_PluginStub_Int0); ccAddExternalStaticFunction("JoystickName", Sc_PluginStub_Int0); ccAddExternalStaticFunction("JoystickRescan", Sc_PluginStub_Int0); ccAddExternalStaticFunction("Joystick::Open^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("Joystick::IsOpen^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("Joystick::Click^1", Sc_PluginStub_Void); ccAddExternalStaticFunction("Joystick::Close^0", Sc_PluginStub_Void); ccAddExternalStaticFunction("Joystick::Valid^0", Sc_PluginStub_Int0); ccAddExternalStaticFunction("Joystick::Unplugged^0", Sc_PluginStub_Int0); ccAddExternalStaticFunction("Joystick::GetName^0", Sc_PluginStub_Int0); ccAddExternalStaticFunction("Joystick::GetAxis^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("Joystick::IsButtonDown^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("Joystick::IsJoyBtnDown^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("Joystick::Update^0", Sc_PluginStub_Void); ccAddExternalStaticFunction("Joystick::DisableEvents^0", Sc_PluginStub_Void); ccAddExternalStaticFunction("Joystick::EnableEvents^1", Sc_PluginStub_Void); return true; } else if (ags_stricmp(name, "agsblend") == 0) { // agsblend.dll ccAddExternalStaticFunction("DrawAlpha", Sc_PluginStub_Int0); ccAddExternalStaticFunction("GetAlpha", Sc_PluginStub_Int0); ccAddExternalStaticFunction("PutAlpha", Sc_PluginStub_Int0); ccAddExternalStaticFunction("Blur", Sc_PluginStub_Int0); ccAddExternalStaticFunction("HighPass", Sc_PluginStub_Int0); ccAddExternalStaticFunction("DrawAdd", Sc_PluginStub_Int0); return true; } else if (ags_stricmp(name, "agsflashlight") == 0) { // agsflashlight.dll ccAddExternalStaticFunction("SetFlashlightTint", Sc_PluginStub_Void); ccAddExternalStaticFunction("GetFlashlightTintRed", Sc_PluginStub_Int0); ccAddExternalStaticFunction("GetFlashlightTintGreen", Sc_PluginStub_Int0); ccAddExternalStaticFunction("GetFlashlightTintBlue", Sc_PluginStub_Int0); ccAddExternalStaticFunction("GetFlashlightMinLightLevel", Sc_PluginStub_Int0); ccAddExternalStaticFunction("GetFlashlightMaxLightLevel", Sc_PluginStub_Int0); ccAddExternalStaticFunction("SetFlashlightDarkness", Sc_PluginStub_Void); ccAddExternalStaticFunction("GetFlashlightDarkness", Sc_PluginStub_Int0); ccAddExternalStaticFunction("SetFlashlightDarknessSize", Sc_PluginStub_Void); ccAddExternalStaticFunction("GetFlashlightDarknessSize", Sc_PluginStub_Int0); ccAddExternalStaticFunction("SetFlashlightBrightness", Sc_PluginStub_Void); ccAddExternalStaticFunction("GetFlashlightBrightness", Sc_PluginStub_Int0); ccAddExternalStaticFunction("SetFlashlightBrightnessSize", Sc_PluginStub_Void); ccAddExternalStaticFunction("GetFlashlightBrightnessSize", Sc_PluginStub_Int0); ccAddExternalStaticFunction("SetFlashlightPosition", Sc_PluginStub_Void); ccAddExternalStaticFunction("GetFlashlightPositionX", Sc_PluginStub_Int0); ccAddExternalStaticFunction("GetFlashlightPositionY", Sc_PluginStub_Int0); ccAddExternalStaticFunction("SetFlashlightFollowMouse", Sc_PluginStub_Void); ccAddExternalStaticFunction("GetFlashlightFollowMouse", Sc_PluginStub_Int0); ccAddExternalStaticFunction("SetFlashlightFollowCharacter", Sc_PluginStub_Void); ccAddExternalStaticFunction("GetFlashlightFollowCharacter", Sc_PluginStub_Int0); ccAddExternalStaticFunction("GetFlashlightCharacterDX", Sc_PluginStub_Int0); ccAddExternalStaticFunction("GetFlashlightCharacterDY", Sc_PluginStub_Int0); ccAddExternalStaticFunction("GetFlashlightCharacterHorz", Sc_PluginStub_Int0); ccAddExternalStaticFunction("GetFlashlightCharacterVert", Sc_PluginStub_Int0); ccAddExternalStaticFunction("SetFlashlightMask", Sc_PluginStub_Void); ccAddExternalStaticFunction("GetFlashlightMask", Sc_PluginStub_Int0); return true; } else if (ags_stricmp(name, "agswadjetutil") == 0) { // agswadjetutil.dll ccAddExternalStaticFunction("IsOnPhone", Sc_PluginStub_Int0); ccAddExternalStaticFunction("FakeKeypress", Sc_PluginStub_Void); ccAddExternalStaticFunction("IosSetAchievementValue", Sc_PluginStub_Void); ccAddExternalStaticFunction("IosGetAchievementValue", Sc_PluginStub_IntNeg1); ccAddExternalStaticFunction("IosShowAchievements", Sc_PluginStub_Void); ccAddExternalStaticFunction("IosResetAchievements", Sc_PluginStub_Void); ccAddExternalStaticFunction("MobileGetAchievement", Sc_PluginStub_Int0); ccAddExternalStaticFunction("MobileSetAchievement", Sc_PluginStub_Int0); ccAddExternalStaticFunction("MobileShowAchievements", Sc_PluginStub_Void); ccAddExternalStaticFunction("MobileResetAchievements", Sc_PluginStub_Void); return true; } else if (ags_stricmp(name, "agsspritefont") == 0) { ccAddExternalStaticFunction("SetSpriteFont", Sc_PluginStub_Void); ccAddExternalStaticFunction("SetVariableSpriteFont", Sc_PluginStub_Void); ccAddExternalStaticFunction("SetGlyph", Sc_PluginStub_Void); ccAddExternalStaticFunction("SetSpacing", Sc_PluginStub_Void); ccAddExternalStaticFunction("SetLineHeightAdjust", Sc_PluginStub_Void); return true; } else if (is_agsteam || is_agsgalaxy) { // agsteam.dll or agsgalaxy.dll ccAddExternalStaticFunction("AGS2Client::IsAchievementAchieved^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::SetAchievementAchieved^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::ResetAchievement^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::GetIntStat^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::GetFloatStat^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::GetAverageRateStat^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::SetIntStat^2", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::SetFloatStat^2", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::UpdateAverageRateStat^3", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::ResetStatsAndAchievements^0", Sc_PluginStub_Void); ccAddExternalStaticFunction("AGS2Client::get_Initialized", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::get_CurrentLeaderboardName", Sc_PluginStub_NullStr); ccAddExternalStaticFunction("AGS2Client::RequestLeaderboard^3", Sc_PluginStub_Void); ccAddExternalStaticFunction("AGS2Client::UploadScore^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::geti_LeaderboardNames", Sc_PluginStub_NullStr); ccAddExternalStaticFunction("AGS2Client::geti_LeaderboardScores", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::get_LeaderboardCount", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGS2Client::GetUserName^0", Sc_PluginStub_NullStr); ccAddExternalStaticFunction("AGS2Client::GetCurrentGameLanguage^0", Sc_PluginStub_NullStr); ccAddExternalStaticFunction("AGS2Client::FindLeaderboard^1", Sc_PluginStub_Void); ccAddExternalStaticFunction("AGS2Client::Initialize^2", Sc_PluginStub_Int0); if (is_agsteam) { ccAddExternalStaticFunction("AGSteam::IsAchievementAchieved^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::SetAchievementAchieved^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::ResetAchievement^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::GetIntStat^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::GetFloatStat^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::GetAverageRateStat^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::SetIntStat^2", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::SetFloatStat^2", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::UpdateAverageRateStat^3", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::ResetStatsAndAchievements^0", Sc_PluginStub_Void); ccAddExternalStaticFunction("AGSteam::get_Initialized", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::get_CurrentLeaderboardName", Sc_PluginStub_NullStr); ccAddExternalStaticFunction("AGSteam::RequestLeaderboard^3", Sc_PluginStub_Void); ccAddExternalStaticFunction("AGSteam::UploadScore^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::geti_LeaderboardNames", Sc_PluginStub_NullStr); ccAddExternalStaticFunction("AGSteam::geti_LeaderboardScores", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::get_LeaderboardCount", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSteam::GetUserName^0", Sc_PluginStub_NullStr); ccAddExternalStaticFunction("AGSteam::GetCurrentGameLanguage^0", Sc_PluginStub_NullStr); ccAddExternalStaticFunction("AGSteam::FindLeaderboard^1", Sc_PluginStub_Void); } else { // agsgalaxy ccAddExternalStaticFunction("AGSGalaxy::IsAchievementAchieved^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::SetAchievementAchieved^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::ResetAchievement^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::GetIntStat^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::GetFloatStat^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::GetAverageRateStat^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::SetIntStat^2", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::SetFloatStat^2", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::UpdateAverageRateStat^3", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::ResetStatsAndAchievements^0", Sc_PluginStub_Void); ccAddExternalStaticFunction("AGSGalaxy::get_Initialized", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::get_CurrentLeaderboardName", Sc_PluginStub_NullStr); ccAddExternalStaticFunction("AGSGalaxy::RequestLeaderboard^3", Sc_PluginStub_Void); ccAddExternalStaticFunction("AGSGalaxy::UploadScore^1", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::geti_LeaderboardNames", Sc_PluginStub_NullStr); ccAddExternalStaticFunction("AGSGalaxy::geti_LeaderboardScores", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::get_LeaderboardCount", Sc_PluginStub_Int0); ccAddExternalStaticFunction("AGSGalaxy::GetUserName^0", Sc_PluginStub_NullStr); ccAddExternalStaticFunction("AGSGalaxy::GetCurrentGameLanguage^0", Sc_PluginStub_NullStr); ccAddExternalStaticFunction("AGSGalaxy::Initialize^2", Sc_PluginStub_Int0); } return true; } return false; } } // namespace AGS3