Skip to content

Commit aa1200d

Browse files
hifihedgehogclaude
andcommitted
Retake all screenshots, add MIDI to README, add UI Automation capture scripts
- Retake all 14 README screenshots (sidebar width change) - Add MIDI virtual controller output to README features - Update .NET 8 → .NET 10 in README (requirements, build path) - Add Windows MIDI Services to README dependencies table - Add AutomationProperties.AutomationId to PadPage first tab (UIA fix) - Fix web controller trigger axis initial state (center → zero) - Fix web controller stick maxDist (75 → 50) - Add automated screenshot capture scripts to tools/ - Remove stale macros.png duplicate Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 3fafd52 commit aa1200d

28 files changed

+1590
-8
lines changed

PadForge.App/Views/PadPage.xaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,9 @@
108108
<WrapPanel Orientation="Horizontal" VerticalAlignment="Center">
109109

110110
<!-- [Gamepad # TypeIcon TypeName] — Controller tab -->
111-
<RadioButton Tag="0" Style="{StaticResource TabStripButton}" Click="TabBtn_Click"
112-
IsChecked="True">
111+
<RadioButton x:Name="TabController" Tag="0" Style="{StaticResource TabStripButton}" Click="TabBtn_Click"
112+
IsChecked="True"
113+
AutomationProperties.AutomationId="TabController">
113114
<StackPanel Orientation="Horizontal">
114115
<TextBlock Text="&#xE7FC;" FontFamily="Segoe MDL2 Assets" FontSize="14"
115116
VerticalAlignment="Center" Margin="0,0,4,0"/>

PadForge.App/WebAssets/js/controller_client.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@
437437
});
438438

439439
joystick.on("move", function (evt, data) {
440-
var maxDist = 75;
440+
var maxDist = 50;
441441
var norm = Math.min(data.distance / maxDist, 1.0);
442442
var rad = data.angle.radian;
443443
var dx = Math.cos(rad) * norm;

PadForge.Engine/Common/WebControllerDevice.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,10 @@ public WebControllerDevice(string clientId, string displayName)
8383
InstanceGuid = BuildGuid(clientId);
8484
SdlInstanceId = (uint)clientId.GetHashCode();
8585

86-
// Center all axes at midpoint — initialize fully before publishing.
86+
// Center stick axes at midpoint, triggers at 0 (full off).
8787
var state = new CustomInputState();
8888
for (int i = 0; i < NumGamepadAxes; i++)
89-
state.Axis[i] = 32767;
89+
state.Axis[i] = (i == 2 || i == 5) ? 0 : 32767;
9090
Volatile.Write(ref _currentState, state);
9191
}
9292

README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Modern controller mapping utility for Windows. Maps any controller, keyboard, or mouse to virtual Xbox 360, DualShock 4, or custom DirectInput controllers that games see as real hardware.
44

5-
Built with SDL3, ViGEmBus, vJoy, HelixToolkit, .NET 8 WPF, and Fluent Design. Modern fork of [x360ce](https://github.com/x360ce/x360ce).
5+
Built with SDL3, ViGEmBus, vJoy, HelixToolkit, .NET 10 WPF, and Fluent Design. Modern fork of [x360ce](https://github.com/x360ce/x360ce).
66

77
## Features
88

@@ -13,6 +13,7 @@ Built with SDL3, ViGEmBus, vJoy, HelixToolkit, .NET 8 WPF, and Fluent Design. Mo
1313
- **Interactive mapping** — Record mappings by pressing buttons on your controller, or use "Map All" for quick setup. Auto-mapping for recognized gamepads. Force raw joystick mode for devices with incorrect SDL3 gamepad remapping
1414
- **Dead zones and response curves** — Per-axis dead zone, anti-dead zone, and linear response curve for sticks and triggers, with live preview, plus stick center offset calibration and max range
1515
- **Force feedback** — Rumble passthrough with per-motor strength, overall gain, and motor swap. Haptic fallback for devices without native rumble. DirectInput force feedback for custom controllers
16+
- **MIDI virtual controller output** — Map any input to virtual MIDI devices. Axes send Control Change messages, buttons send Note On/Off. Configurable MIDI channel (1–16), CC mapping, note mapping, and velocity. Requires Windows MIDI Services (PadForge can install it for you)
1617
- **Macro system** — Trigger combos that execute button presses, key presses, delays, system volume control, and axis manipulation. Supports up to 128 buttons for custom DirectInput controllers, with repeat modes and input device or output controller trigger sources
1718
- **Per-app profile switching** — Automatically switch controller configurations when specific applications gain focus
1819
- **DSU/Cemuhook motion server** — Broadcasts gyro and accelerometer data over UDP (port 26760) for emulators like Cemu and Dolphin
@@ -77,21 +78,22 @@ Built-in web server lets any touchscreen device act as a virtual controller. Cho
7778
## Requirements
7879

7980
- Windows 10 or 11 (x64)
80-
- [.NET 8 Desktop Runtime](https://dotnet.microsoft.com/download/dotnet/8.0) (included in the single-file publish)
81+
- [.NET 10 Desktop Runtime](https://dotnet.microsoft.com/download/dotnet/10.0) (included in the single-file publish)
8182

8283
Optional drivers (PadForge can install all of these for you):
8384

8485
- [ViGEmBus](https://github.com/nefarius/ViGEmBus) — Virtual Xbox 360 and DualShock 4 output
8586
- [vJoy](https://github.com/BrunnerInnovation/vJoy) — Custom DirectInput joystick/gamepad output with configurable axes, buttons, POVs, and force feedback
8687
- [HidHide](https://github.com/nefarius/HidHide) — Hide physical controllers from games to prevent double input
88+
- [Windows MIDI Services](https://github.com/microsoft/MIDI) — Virtual MIDI device output for MIDI virtual controllers
8789

8890
## Build
8991

9092
```bash
9193
dotnet publish PadForge.App/PadForge.App.csproj -c Release
9294
```
9395

94-
Output: `PadForge.App/bin/Release/net8.0-windows/win-x64/publish/PadForge.exe`
96+
Output: `PadForge.App/bin/Release/net10.0-windows10.0.26100.0/win-x64/publish/PadForge.exe`
9597

9698
See [BUILD.md](BUILD.md) for full project structure, architecture details, and developer reference.
9799

@@ -112,6 +114,7 @@ PadForge stands on the shoulders of these projects. Please consider supporting t
112114
| [ModernWpf](https://github.com/Kinnara/ModernWpf) | Fluent Design theme for WPF | MIT |
113115
| [CommunityToolkit.Mvvm](https://github.com/CommunityToolkit/dotnet) | MVVM data binding framework | MIT |
114116
| [HidHide](https://github.com/nefarius/HidHide) | Device hiding driver to prevent double input | MIT |
117+
| [Windows MIDI Services](https://github.com/microsoft/MIDI) | Virtual MIDI device SDK for MIDI controller output | MIT |
115118

116119
## Donations
117120

docs/images/macros.jpg

-173 KB
Binary file not shown.

screenshots/about.jpg

4.06 KB
Loading

screenshots/controller.jpg

9.56 KB
Loading

screenshots/dashboard.jpg

10.7 KB
Loading

screenshots/devices.jpg

-74.4 KB
Loading

screenshots/force-feedback.jpg

3.78 KB
Loading

0 commit comments

Comments
 (0)