A highly customizable virtual controller for Xbox Cloud Gaming.
Thunder Virtual Controller for Xbox Cloud Gaming (v33.2)
Note: This is a personal project I developed for my own use. I am sharing it here just in case others find it useful!
A virtual controller overlay for Xbox Cloud Gaming that adds visual layout customization, Gyro aiming, Haptic Feedback, and input tuning for touch screens.
⚡ Features
🛠️ Visual Layout Editor
Tap the Pencil (✏️): Unlock the overlay to drag buttons to new positions.
Live Sync: Moving a button automatically updates the coordinates in the Settings menu.
Granular Control: Manual sliders available for fine-tuning positions.
🎮 Swipe Look Control
Swipe to Look: The entire right side of the screen is a trackpad. Swipe to look around instead of using a virtual joystick.
Sensitivity: Default sensitivity set to 15.0, adjustable up to 50.0.
📱 Gyroscope & Haptics
Gyro Aiming: Tilt phone to aim. Includes independent X/Y sensitivity and inversion.
Phone Vibration: Captures Xbox rumble data and triggers the phone's vibration motor (Android only).
💾 Layout Management
Export: Copies your entire configuration (layout positions, sensitivity, physics tuning) to your clipboard as a text code. Save this code to backup your settings or share it with friends.
Import: Paste a configuration code here to instantly apply a new layout. The controller updates immediately—no page reload required (Hot-Swap).
Reset: A panic button that instantly restores all settings to their default state.
❓ Why No Right Stick?
This script replaces the visual Right Joystick with a swipe-based input method, similar to native mobile shooters like COD Mobile or PUBG.
Native Mobile Feel: Mobile games typically don't use a right joystick for the camera; they use the whole screen for swipe-to-look. Virtual joysticks on touchscreens are notoriously difficult to use for precision aiming because they try to emulate physical stick velocity (hold to spin) rather than natural 1:1 movement.
Unusable Acceleration: Using a virtual stick to control a camera often triggers game acceleration curves that make aiming unpredictable. It is nearly impossible to make consistent micro-adjustments or quick 180 turns without fighting the game's "ramp up" speed.
Tuning: By using swipe controls combined with our Physics Engine, you can "tune" the input to cancel out the game's native deadzones and acceleration, providing a responsive, mouse-like experience that a virtual stick simply cannot match.
📥 Installation
Install a Userscript Manager:
Android: Install Tampermonkey or Violentmonkey.
iOS: Install the Userscripts extension for Safari.
Create Script:
Open the extension dashboard.
Create a New Script.
Delete any default code and paste the entire code from thunder_controller.user.js.
Save.
Play:
Go to Xbox Cloud Gaming.
Launch a game. The controller overlay will appear automatically.
🕹️ User Guide
System Menu (Bottom Center)
👁️ (Eye): Hides/Shows the overlay. Also resets inputs if the character gets stuck moving.
✏️ (Pencil): Toggles Edit Mode.
Drag Buttons: Touch and drag buttons to move them.
⚙️ (Gear): Opens the Settings Panel.
⛶ (Fullscreen): Toggles browser fullscreen mode.
Settings Explained
1. General Tab
Global Scale: Resizes all buttons.
Opacity: Adjusts transparency.
Vibration: Toggles phone haptics and sets intensity.
Import/Export: Backup layout to clipboard.
2. Layout Tab
Group X/Y: Moves the entire Left or Right hand cluster.
Offsets: Adjusts specific buttons relative to their group.
3. Touch Tab
Sensitivity X/Y: Controls the speed of camera movement relative to finger swipe distance.
4. Physics Tab (Input Tuning)
Noise Gate: Defines a minimum input threshold. Inputs below this value are ignored to prevent drift from sensor noise.
Min Speed (Kick): Adds a base value to inputs to overcome the game's deadzone.
Increase if aim feels unresponsive.
Decrease if aim feels jumpy.
Response Curve: Changes the input curve. 1.0 is Linear. Lower values (e.g. 0.5) reduce sensitivity for small movements while maintaining speed for large swipes.
5. Gyro Tab
Enable: Toggles motion controls.
Invert X/Y: Flips the axis direction.
❓ Troubleshooting
"Vibration isn't working" -> Requires Android (Chrome/Edge). iOS Safari does not support the Vibration API for websites.
"I can't scroll the settings menu" -> Swipe in the center of the menu, away from the sliders.