diff --git a/build_win_release_experimental_steamclient.bat b/build_win_release_experimental_steamclient.bat
index 540a8e1..22566d4 100644
--- a/build_win_release_experimental_steamclient.bat
+++ b/build_win_release_experimental_steamclient.bat
@@ -8,7 +8,7 @@ call build_env_x86.bat
cl dll/rtlgenrandom.c dll/rtlgenrandom.def
cl /LD /DEMU_RELEASE_BUILD /DEMU_EXPERIMENTAL_BUILD /DSTEAMCLIENT_DLL /DCONTROLLER_SUPPORT /DEMU_OVERLAY /DGLEW_STATIC /IImGui /Iglew\include /DNDEBUG /I%PROTOBUF_X86_DIRECTORY%\include\ dll/*.cpp dll/*.cc detours/*.cpp controller/gamepad.c ImGui/*.cpp ImGui/impls/*.cpp ImGui/impls/windows/*.cpp overlay_experimental/*.cpp overlay_experimental/windows/*.cpp "%PROTOBUF_X86_LIBRARY%" glew\glew.c opengl32.lib Iphlpapi.lib Ws2_32.lib rtlgenrandom.lib Shell32.lib Winmm.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental_steamclient\steamclient.dll
"%PROTOC_X64_EXE%" -I.\dll\ --cpp_out=.\dll\ .\dll\net.proto
-cl steamclient_loader/*.cpp advapi32.lib user32.lib /EHsc /MP12 /Od /link /debug:none /OUT:release\experimental_steamclient\steamclient_loader.exe
+cl steamclient_loader/*.cpp advapi32.lib user32.lib /EHsc /MP12 /Ox /link /debug:none /OUT:release\experimental_steamclient\steamclient_loader.exe
copy steamclient_loader\ColdClientLoader.ini release\experimental_steamclient\
call build_env_x64.bat
cl dll/rtlgenrandom.c dll/rtlgenrandom.def
diff --git a/dll/steam_client.h b/dll/steam_client.h
index c085709..b46285e 100644
--- a/dll/steam_client.h
+++ b/dll/steam_client.h
@@ -27,11 +27,7 @@
#include "steam_remote_storage.h"
#include "steam_screenshots.h"
#include "steam_http.h"
-#ifdef CONTROLLER_SUPPORT
#include "steam_controller.h"
-#else
-#include "steam_controller_disabled.h"
-#endif
#include "steam_ugc.h"
#include "steam_applist.h"
#include "steam_music.h"
diff --git a/dll/steam_controller.h b/dll/steam_controller.h
index 7cefb6f..741ce18 100644
--- a/dll/steam_controller.h
+++ b/dll/steam_controller.h
@@ -16,6 +16,18 @@
. */
#include "base.h"
+#ifndef CONTROLLER_SUPPORT
+inline void GamepadInit(void) {}
+inline void GamepadShutdown(void) {}
+inline void GamepadUpdate(void) {}
+inline GAMEPAD_BOOL GamepadIsConnected(GAMEPAD_DEVICE device) { return GAMEPAD_FALSE; }
+inline GAMEPAD_BOOL GamepadButtonDown(GAMEPAD_DEVICE device, GAMEPAD_BUTTON button) { return GAMEPAD_FALSE; }
+inline float GamepadTriggerLength(GAMEPAD_DEVICE device, GAMEPAD_TRIGGER trigger) { return 0.0; }
+inline GAMEPAD_STICKDIR GamepadStickDir(GAMEPAD_DEVICE device, GAMEPAD_STICK stick) { return STICKDIR_CENTER; }
+inline void GamepadStickNormXY(GAMEPAD_DEVICE device, GAMEPAD_STICK stick, float* outX, float* outY) {}
+inline float GamepadStickLength(GAMEPAD_DEVICE device, GAMEPAD_STICK stick) { return 0.0; }
+inline void GamepadSetRumble(GAMEPAD_DEVICE device, float left, float right, unsigned int rumble_length_ms) {}
+#endif
struct Controller_Map {
std::map> active_digital;
@@ -756,7 +768,7 @@ int GetGamepadIndexForController( ControllerHandle_t ulControllerHandle )
// Returns the associated controller handle for the specified emulated gamepad
ControllerHandle_t GetControllerForGamepadIndex( int nIndex )
{
- PRINT_DEBUG("Steam_Controller::GetControllerForGamepadIndex\n");
+ PRINT_DEBUG("Steam_Controller::GetControllerForGamepadIndex %i\n", nIndex);
ControllerHandle_t out = nIndex + 1;
auto controller = controllers.find(out);
if (controller == controllers.end()) return 0;
@@ -890,7 +902,7 @@ const char *GetGlyphForActionOrigin( EInputActionOrigin eOrigin )
// Returns the input type for a particular handle
ESteamInputType GetInputTypeForHandle( ControllerHandle_t controllerHandle )
{
- PRINT_DEBUG("Steam_Controller::GetInputTypeForHandle\n");
+ PRINT_DEBUG("Steam_Controller::GetInputTypeForHandle %llu\n", controllerHandle);
auto controller = controllers.find(controllerHandle);
if (controller == controllers.end()) return k_ESteamInputType_Unknown;
return k_ESteamInputType_XBox360Controller;
diff --git a/dll/steam_controller_disabled.h b/dll/steam_controller_disabled.h
deleted file mode 100644
index 825ff0b..0000000
--- a/dll/steam_controller_disabled.h
+++ /dev/null
@@ -1,375 +0,0 @@
-/* Copyright (C) 2019 Mr Goldberg
- This file is part of the Goldberg Emulator
-
- The Goldberg Emulator is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 3 of the License, or (at your option) any later version.
-
- The Goldberg Emulator 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the Goldberg Emulator; if not, see
- . */
-
-#include "base.h"
-
-class Steam_Controller :
-public ISteamController001,
-public ISteamController003,
-public ISteamController004,
-public ISteamController005,
-public ISteamController006,
-public ISteamController,
-public ISteamInput
-{
-public:
-
-Steam_Controller(class Settings *settings, class SteamCallResults *callback_results, class SteamCallBacks *callbacks, class RunEveryRunCB *run_every_runcb)
-{
-}
-
-// Init and Shutdown must be called when starting/ending use of this interface
-bool Init()
-{
- PRINT_DEBUG("Steam_Controller::Init()\n");
- return true;
-}
-
-bool Init( const char *pchAbsolutePathToControllerConfigVDF )
-{
- PRINT_DEBUG("Steam_Controller::Init() old\n");
- return Init();
-}
-
-bool Shutdown()
-{
- PRINT_DEBUG("Steam_Controller::Shutdown()\n");
- return true;
-}
-
-void SetOverrideMode( const char *pchMode )
-{
- PRINT_DEBUG("Steam_Controller::SetOverrideMode\n");
-}
-
-// Synchronize API state with the latest Steam Controller inputs available. This
-// is performed automatically by SteamAPI_RunCallbacks, but for the absolute lowest
-// possible latency, you call this directly before reading controller state.
-void RunFrame()
-{
- PRINT_DEBUG("Steam_Controller::RunFrame()\n");
-}
-
-bool GetControllerState( uint32 unControllerIndex, SteamControllerState001_t *pState )
-{
- PRINT_DEBUG("Steam_Controller::GetControllerState()\n");
- return false;
-}
-
-// Enumerate currently connected controllers
-// handlesOut should point to a STEAM_CONTROLLER_MAX_COUNT sized array of ControllerHandle_t handles
-// Returns the number of handles written to handlesOut
-int GetConnectedControllers( ControllerHandle_t *handlesOut )
-{
- PRINT_DEBUG("GetConnectedControllers\n");
- return 0;
-}
-
-
-// Invokes the Steam overlay and brings up the binding screen
-// Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
-bool ShowBindingPanel( ControllerHandle_t controllerHandle )
-{
- PRINT_DEBUG("ShowBindingPanel\n");
- return false;
-}
-
-
-// ACTION SETS
-// Lookup the handle for an Action Set. Best to do this once on startup, and store the handles for all future API calls.
-ControllerActionSetHandle_t GetActionSetHandle( const char *pszActionSetName )
-{
- PRINT_DEBUG("GetActionSetHandle %s\n", pszActionSetName);
- return 124;
-}
-
-
-// Reconfigure the controller to use the specified action set (ie 'Menu', 'Walk' or 'Drive')
-// This is cheap, and can be safely called repeatedly. It's often easier to repeatedly call it in
-// your state loops, instead of trying to place it in all of your state transitions.
-void ActivateActionSet( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle )
-{
- PRINT_DEBUG("ActivateActionSet\n");
-}
-
-ControllerActionSetHandle_t GetCurrentActionSet( ControllerHandle_t controllerHandle )
-{
- PRINT_DEBUG("GetCurrentActionSet\n");
- return 124;
-}
-
-
-void ActivateActionSetLayer( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle )
-{
- PRINT_DEBUG("ActivateActionSetLayer\n");
-}
-
-void DeactivateActionSetLayer( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetLayerHandle )
-{
- PRINT_DEBUG("DeactivateActionSetLayer\n");
-}
-
-void DeactivateAllActionSetLayers( ControllerHandle_t controllerHandle )
-{
- PRINT_DEBUG("DeactivateAllActionSetLayers\n");
-}
-
-int GetActiveActionSetLayers( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t *handlesOut )
-{
- PRINT_DEBUG("GetActiveActionSetLayers\n");
- return 0;
-}
-
-
-
-// ACTIONS
-// Lookup the handle for a digital action. Best to do this once on startup, and store the handles for all future API calls.
-ControllerDigitalActionHandle_t GetDigitalActionHandle( const char *pszActionName )
-{
- PRINT_DEBUG("GetDigitalActionHandle %s\n", pszActionName);
- return 123;
-}
-
-
-// Returns the current state of the supplied digital game action
-ControllerDigitalActionData_t GetDigitalActionData( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle )
-{
- PRINT_DEBUG("GetDigitalActionData\n");
- ControllerDigitalActionData_t digitalData;
- digitalData.bActive = false;
- return digitalData;
-}
-
-
-// Get the origin(s) for a digital action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
-// originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
-int GetDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerDigitalActionHandle_t digitalActionHandle, EControllerActionOrigin *originsOut )
-{
- PRINT_DEBUG("GetDigitalActionOrigins\n");
- return 0;
-}
-
-int GetDigitalActionOrigins( InputHandle_t inputHandle, InputActionSetHandle_t actionSetHandle, InputDigitalActionHandle_t digitalActionHandle, EInputActionOrigin *originsOut )
-{
- PRINT_DEBUG("GetDigitalActionOrigins steaminput\n");
- return 0;
-}
-
-// Lookup the handle for an analog action. Best to do this once on startup, and store the handles for all future API calls.
-ControllerAnalogActionHandle_t GetAnalogActionHandle( const char *pszActionName )
-{
- PRINT_DEBUG("GetAnalogActionHandle %s\n", pszActionName);
- return 125;
-}
-
-
-// Returns the current state of these supplied analog game action
-ControllerAnalogActionData_t GetAnalogActionData( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle )
-{
- PRINT_DEBUG("GetAnalogActionData\n");
- ControllerAnalogActionData_t data;
- data.eMode = k_EInputSourceMode_None;
- data.x = data.y = 0;
- data.bActive = false;
- return data;
-}
-
-
-// Get the origin(s) for an analog action within an action set. Returns the number of origins supplied in originsOut. Use this to display the appropriate on-screen prompt for the action.
-// originsOut should point to a STEAM_CONTROLLER_MAX_ORIGINS sized array of EControllerActionOrigin handles
-int GetAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerActionSetHandle_t actionSetHandle, ControllerAnalogActionHandle_t analogActionHandle, EControllerActionOrigin *originsOut )
-{
- PRINT_DEBUG("GetAnalogActionOrigins\n");
- return 0;
-}
-
-int GetAnalogActionOrigins( InputHandle_t inputHandle, InputActionSetHandle_t actionSetHandle, InputAnalogActionHandle_t analogActionHandle, EInputActionOrigin *originsOut )
-{
- PRINT_DEBUG("GetAnalogActionOrigins steaminput\n");
- return 0;
-}
-
-
-void StopAnalogActionMomentum( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t eAction )
-{
- PRINT_DEBUG("StopAnalogActionMomentum\n");
-}
-
-
-// Trigger a haptic pulse on a controller
-void TriggerHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec )
-{
- PRINT_DEBUG("TriggerHapticPulse\n");
-}
-
-void TriggerHapticPulse( uint32 unControllerIndex, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec )
-{
- PRINT_DEBUG("TriggerHapticPulse old\n");
- TriggerHapticPulse(unControllerIndex, eTargetPad, usDurationMicroSec );
-}
-
-// Trigger a pulse with a duty cycle of usDurationMicroSec / usOffMicroSec, unRepeat times.
-// nFlags is currently unused and reserved for future use.
-void TriggerRepeatedHapticPulse( ControllerHandle_t controllerHandle, ESteamControllerPad eTargetPad, unsigned short usDurationMicroSec, unsigned short usOffMicroSec, unsigned short unRepeat, unsigned int nFlags )
-{
- PRINT_DEBUG("TriggerRepeatedHapticPulse\n");
-}
-
-
-// Tigger a vibration event on supported controllers.
-void TriggerVibration( ControllerHandle_t controllerHandle, unsigned short usLeftSpeed, unsigned short usRightSpeed )
-{
- PRINT_DEBUG("TriggerVibration\n");
-}
-
-
-// Set the controller LED color on supported controllers.
-void SetLEDColor( ControllerHandle_t controllerHandle, uint8 nColorR, uint8 nColorG, uint8 nColorB, unsigned int nFlags )
-{
- PRINT_DEBUG("SetLEDColor\n");
-}
-
-
-// Returns the associated gamepad index for the specified controller, if emulating a gamepad
-int GetGamepadIndexForController( ControllerHandle_t ulControllerHandle )
-{
- PRINT_DEBUG("GetGamepadIndexForController\n");
- return 0;
-}
-
-
-// Returns the associated controller handle for the specified emulated gamepad
-ControllerHandle_t GetControllerForGamepadIndex( int nIndex )
-{
- PRINT_DEBUG("GetControllerForGamepadIndex\n");
- return 0;
-}
-
-
-// Returns raw motion data from the specified controller
-ControllerMotionData_t GetMotionData( ControllerHandle_t controllerHandle )
-{
- PRINT_DEBUG("GetMotionData\n");
- ControllerMotionData_t data = {};
- return data;
-}
-
-
-// Attempt to display origins of given action in the controller HUD, for the currently active action set
-// Returns false is overlay is disabled / unavailable, or the user is not in Big Picture mode
-bool ShowDigitalActionOrigins( ControllerHandle_t controllerHandle, ControllerDigitalActionHandle_t digitalActionHandle, float flScale, float flXPosition, float flYPosition )
-{
- PRINT_DEBUG("ShowDigitalActionOrigins\n");
- return true;
-}
-
-bool ShowAnalogActionOrigins( ControllerHandle_t controllerHandle, ControllerAnalogActionHandle_t analogActionHandle, float flScale, float flXPosition, float flYPosition )
-{
- PRINT_DEBUG("ShowAnalogActionOrigins\n");
- return true;
-}
-
-
-// Returns a localized string (from Steam's language setting) for the specified origin
-const char *GetStringForActionOrigin( EControllerActionOrigin eOrigin )
-{
- PRINT_DEBUG("GetStringForActionOrigin\n");
- return "Button String";
-}
-
-const char *GetStringForActionOrigin( EInputActionOrigin eOrigin )
-{
- PRINT_DEBUG("GetStringForActionOrigin steaminput\n");
- return "Button String";
-}
-
-
-// Get a local path to art for on-screen glyph for a particular origin
-const char *GetGlyphForActionOrigin( EControllerActionOrigin eOrigin )
-{
- PRINT_DEBUG("GetGlyphForActionOrigin\n");
- return "";
-}
-
-const char *GetGlyphForActionOrigin( EInputActionOrigin eOrigin )
-{
- PRINT_DEBUG("GetGlyphForActionOrigin steaminput\n");
- return "";
-}
-
-// Returns the input type for a particular handle
-ESteamInputType GetInputTypeForHandle( ControllerHandle_t controllerHandle )
-{
- PRINT_DEBUG("GetInputTypeForHandle\n");
- return k_ESteamInputType_Unknown;
-}
-
-const char *GetStringForXboxOrigin( EXboxOrigin eOrigin )
-{
- PRINT_DEBUG("GetStringForXboxOrigin\n");
- return "";
-}
-
-const char *GetGlyphForXboxOrigin( EXboxOrigin eOrigin )
-{
- PRINT_DEBUG("GetGlyphForXboxOrigin\n");
- return "";
-}
-
-EControllerActionOrigin GetActionOriginFromXboxOrigin_( ControllerHandle_t controllerHandle, EXboxOrigin eOrigin )
-{
- PRINT_DEBUG("GetActionOriginFromXboxOrigin\n");
- return k_EControllerActionOrigin_None;
-}
-
-EInputActionOrigin GetActionOriginFromXboxOrigin( InputHandle_t inputHandle, EXboxOrigin eOrigin )
-{
- PRINT_DEBUG("GetActionOriginFromXboxOrigin steaminput\n");
- return k_EInputActionOrigin_None;
-}
-
-EControllerActionOrigin TranslateActionOrigin( ESteamInputType eDestinationInputType, EControllerActionOrigin eSourceOrigin )
-{
- PRINT_DEBUG("TranslateActionOrigin\n");
- return k_EControllerActionOrigin_None;
-}
-
-EInputActionOrigin TranslateActionOrigin( ESteamInputType eDestinationInputType, EInputActionOrigin eSourceOrigin )
-{
- PRINT_DEBUG("TranslateActionOrigin steaminput\n");
- return k_EInputActionOrigin_None;
-}
-
-bool GetControllerBindingRevision( ControllerHandle_t controllerHandle, int *pMajor, int *pMinor )
-{
- PRINT_DEBUG("GetControllerBindingRevision\n");
- return false;
-}
-
-bool GetDeviceBindingRevision( InputHandle_t inputHandle, int *pMajor, int *pMinor )
-{
- PRINT_DEBUG("GetDeviceBindingRevision\n");
- return false;
-}
-
-uint32 GetRemotePlaySessionID( InputHandle_t inputHandle )
-{
- PRINT_DEBUG("GetRemotePlaySessionID\n");
- return 0;
-}
-
-};