Skip to content

Releases: muchimi/JoystickGremlinEx

13.40.16ex m61 (pre-release/release candidate)

27 Oct 02:30
4077866
Compare
Choose a tag to compare

Major new features in 13.40.16ex

  • New switch container (experimental): this container adds a slightly different way of mapping physical switches using the concept of switch positions and able to latch multiple buttons to the same container, attached to a primary button. The container makes it easier to setup two way, three-way and rotary buttons with multiple positions.

  • Axis curve can be applied to the input before any further processing and the curve is mode specific.

  • Conditions can be applied to the container or individual actions concurrently.

General feature set

  • Designed for home cockpits with a high count of mixed input devices from different manufacturers and mixed HID compliant controller types
  • Support for network based studio and stage management control systems like Korg, TouchOSC, OpenStage, Stream Deck, Loupe Deck using OSC (and if needed MIDI) protocols to work as game input controllers for axes and buttons and hats. These non-typical control systems easily provide GameGlass type experiences and support phones and tablets and networked touch screens, as well as fader / knob / button based media studio systems. As of m36, supports OSC output from GremlinEx at the API level.
  • Support for multiple concurrent networked GremlinEx instances for remote control
  • Support for complex keyboard combinations, including unusual keys like F13 to F25 and sophisticated trigger based on the latching of multiple and uncommon keys
  • Support for Microsoft Flight Simulator 2024 including RPN expressions. GremlinEx can control MSFS via Simconnect and a custom WASM module (must be added to the Community folder) and send linear and momentary actions from any GremlinEx triggers.
  • Includes a wide range of mapping functionality, and for more complex/logic based scenarios, user plugins for full python based scripting
  • Support for multiple TTS voices using the Microsoft Text to speech API including playback rates
  • Support for any audio file playback
  • Support for hierarchical modes
  • Support for VJOY (virtual joystick)
  • Support for Virtual gamepad X-Box 360 controller (via VIGEM) virtual outputs supporting games that only work with console controllers
  • Support for HIDHide to only expose mapped devices to the target application and work within the limitations of the game's understanding of multiple input controllers.
  • Sophisticated axis curving options including curving of input axis data and further filtering by individual mappings
  • Internal sorting of devices to your preference (note, this does not change Windows devices but changes how you interact with them within GremlinEx)
  • 64 bit / recent version of Python and Windows support
  • New containers and actions applicable to the most common input mapping use cases that can handle simple to very complex mapping for more difficult scenarios like gated axis and mapping of multi-way hardware switches that do not trigger in some positions. Containers group actions together and support an array of output features, such as chaining, sequence (macro), long/short press, axis trigger mapping based on gates and ranges and direction of movement.
  • Support for custom user scripts and actions using Python user plugins with enhanced decorators, including two way OSC communication for glass surface output.
  • Per device calibration and curvature tools, along with further curve axis refinements.
  • For linear inputs, advanced mapping through the gated axis action using a more visual programming of the axis range. Actions can be coded based on the movement of the input, gate crossing and what subrange was entered, and GremlinEx is aware of the direction of travel as well so triggers can be different based on the direction of travel.

Requirements

GremlinEx is written in Python and C++. It is self-contained as a packaged EXE that includes Python runtimes. Highly recommended to use HIDHide and VIGEM for additional functionality and hardware cockpit management. Requires VJOY and Windows x64 10 or 11.

It is highly recommended to use HIDHide along with GremlinEx to simplify game management and avoid detection conflicts in games.

Supported input devices

GremlinEx supports any DirectX (DirectInput) compliant HID controller which is most joysticks/throttles/wheels/pedals, up to 128 buttons, 8 axes and 4 hats each.
Gremlin also supports the OSC and MIDI protocols to enable over the network input from glass surfaces (via, for example, Touch/OSC, OSC/Pilot and open source software using the OSC protocol). While OSC and MIDI are music and stage protocols, the same controllers used for stage management are also very effective for game controls because they also use knobs, faders and buttons. Most are programmable and can be controlled via a touch screen which enables glass surfaces to be used by GremlinEx. Both protocols enable the use of StreamDeck and LoupeDeck and traditional MIDI controllers for input like the KORG midi and other pad control systems.

GremlinEx is vendor agnostic and does not require any vendor software provided the device reports to Windows as an HID joystick, or uses the OSC/MIDI protocols over UDP.

GremlinEx can also use another GremlinEx client on the network as input, itself connected to hardware inputs not visible by the host computer. This feature is solely for the purpose of supporting more complex home cockpit setups where more than one computer is involved and input ports are limited.

Supported output devices

GremlinEx supports VJOY virtual joysticks, VIGEM xbox virtual game controllers, the SimConnect API for MSFS and it can send keyboard and mouse events to applications running on the GremlinEx machine. GremlinEx also supports TTS (text to speech) and can play audio files based on triggers. GremlinEx can also send OSC commands via custom user scripts for two-way communication with controllers/glass surfaces.

License

GremlinEx is open source, for the community, based on prior work and other open source libraries. It is licensed via a GPL license.

Pre-release and RC

I use pre-releases to issue test versions that may include some bugs or proposed fixes to reported bugs. Once a pre-release is stable and mature enough, it will move to RC status.

Thanks for your patience.

Discord server:

I created a discord server for discussion to make tracking various questions and suggestions easier. Please continue to use issues in Github to report bugs/issues.

discord server

Documentation

Please consult the documentation. Documentation is still a work in progress.

Patches

(m61)

m61 is a general stabilization patch focused on cleaning up remaining issues linked to new features introduced and module refactors in this version.

  • Fix: input listener not detecting some axis changes
  • Improved: Joystick condition UI now has manual device input selectors so select the hardware latching condition latching.
  • Improved: Range selectors in conditions include a repeater that shows current input values and is in line with the gated axis, including record buttons to set the values from the live input.
  • Fix: multiple references to older properties of the removed tab widget impacting UI functions such as 1:1, device substitution causing exceptions
  • Fix: calibration icon not showing correct state
  • Fix: some containers are missing their action condition entries for each action in the container
  • Fix: condition counts in the condition tab do not always update as conditions are added or removed
  • Fix: map to vjoy merged value repeater not updating correctly
  • Fix: virtual button on axis input not triggering action (note: if a virtual button condition is used, any other joystick condition is ignored)
  • Fix: UI not disabling at runtime with the option selected to prevent inadvertent interactions/changes.
  • New: The virtual button condition is now user-controllable via a checkbox on the virtual button tab. This was added because virtual buttons override any other conditions, which is not always the desired behavior for some use cases. The enabled state is also visible on the virtual button tab.

(m59/60)

  • Fix: The special mode device is not always creating entries for a new mode, causing a key exception.
  • Improved: The hourglass is now more consistently displayed for operations that can take a while to refresh.
  • Fix: triggering an OSC or MIDI input was not selecting the input when pressed, and the highlight is enabled.
  • Fix: Occasional QT C++ reference exception on button or axis repeaters.

(m58)

  • fix for autorelease callbacks (temporary mode switch being one of the affected actions)
  • fix for SimConnect not detected on some clients in the packaged version and not finding the DLL causing a profile start error if SimConnect is used.
  • updated to latest version of SimConnect
  • Fix: further UI tweaks for edit time mode changes and general UI synchronization when changing modes and devices.
  • Fix: GremlinEx triggers not functional due to event serialization changes to support the auto-release functionality on more complex inputs introduced in m57. The serialization changes would cause the logic to miss the events because they are coded differently to allow serialization, so there are now two keys, one for serialization, and one for triggers.
  • Fix: More UI work to keep device and modes in sync with the display with the new UI logic and replacement of the problematic UI component introduced in m50. This caused issues with blank screens on mode changes and general display of information not always in sync with UI navigation. This continues to be a bit of whack-a-mole as the navigation logic is quite complex as some inputs are fixed, some are user-defined, and others are application drive...
Read more

13.40.13ex (h)

07 Jun 15:32
373a886
Compare
Choose a tag to compare

13.40.13ex release.

NOTE

this version has been superseded by pre-releases for 13.40.14ex. All releases, including pre-releases can be found here:
https://github.com/muchimi/JoystickGremlinEx/releases

See changelog for more detailed list of changes.

  • Adds version checking of dependent DLLs and drivers.
  • improved handling of missing device or physical device changes at runtime
  • reworked device information dialog
  • improved Directinput event spamming at design time for noisy hardware (UI will ignore rapid-fire events)
  • new verbose option to enable detailed log tracking around events received and processed by GremlinEx (use with caution - slows GremlinEx down considerably due to the trace outputs - use only for debug/diagnostics)
  • improved icon file search algorithm in packaged (exe) format
  • changed directinput dll interface to poll mode by default (as most HID game devices don't support buffered mode) - this eliminates a directinput error message when attempting to connect using buffered mode
  • changed directinput dll debug output to dinput_debug.txt

16 m50 test versions

11 Dec 02:45
Compare
Choose a tag to compare

Test version for specific troubleshooting.