Skip to content

Releases: muchimi/JoystickGremlinEx

13.40.15ex (m4)

12 Oct 02:59
33cff39
Compare
Choose a tag to compare
13.40.15ex (m4) Pre-release
Pre-release

Major new features in 13.40.15ex

  • Gamepad output
  • Gated Axis plugin (new look and functionality)
  • Merged axis functionality directly in vjoyremap
  • Revamped response curve UI with presets

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 as that will be easier to track various questions and suggestions. 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

(m4.4 hotfix)

  • curve updater no longer attempts to update the live input repeater if it has been disabled in options

(m4.2 hotfix)

  • options for auto-switch via hotkey behavior
  • removed timer on button highlight behavior (there may still need to be some more work on delayed or non functional highlighting)

(m4.1 hotfix)

  • more detailed load information
  • more log info on device name mapping and any errors encountered

(m4)

Response curve revamp:

  • new response curve internal module and widgets
  • new Response Curve EX plugin (using the internal widget)
  • response curve now functions as a standalone dialog when needed in the UI
  • response curve supports saving and loading presets (this allows easy recall of your favorite setups when setting up a new profile)
  • response curve uses updated GremlinEx UI components
  • snap to grid supported when moving control points (or handles) - also supports handle angular snap to 0, 45 and 90 degrees
  • built-in instruction file for response curve

(m3)

This patch is considered experimental due to the number of fixes/changes since m1.

  • The Map to Vjoy (VjoyRemap) plugin now supports an integrated response curve. The curve is optional and can be created via the output curve button next to the axis repeater. The curve is editable in a dialog and has a few presets for fast curve setups. The response curve is computed as part of the output of the action and applied post other options, such as range and merge.

  • bug fix where the merge was always applied at average even if merging not enabled.

(m2)

  • Gated Axis: Fix for critical QT crash. Gated Axis now uses a new custom control instead with significant new interactions - the QT controls that crash are no longer used.
  • Gated Axis: support for multiple mappings per range or gate conditions - these stack and work together.
  • Gated Axis: a built-in help page callable from the UI that covers the basics is now available.
  • VJoyRemap: support for merged axis directly in the plugin without using the normal merged axis functionality (this one has been on the radar for a long time)
  • Cut/Paste container and action refactor - no longer uses binary references to objects
  • Improved performance of UI for input joystick devices
  • UI Dropdowns now all have a 20-line limit
  • Fix for OSC and MIDI UI
  • Update to QT 6.7.3
  • Bug fixes for reported issues (many!)

(m1)

Synopsis: JGEX if it detects the VIGEM driver will create up to four (4) virtual XBox 360 controllers to use as output. A new action has been added to map inputs to the gamepads.

  • forced refresh of status bar on profile load

13.40.14ex (RC) (m22)

16 Aug 21:52
373a886
Compare
Choose a tag to compare

Major new features in 13.40.14ex RC

  • MIDI input support - JGEX supports input from hardware and software MIDI controllers like the Korg Mini, LoupeDeck and Elgato StreamDeck
  • OSC (Open Sound Control or Open Stage Control) input support - supports glass input tablets designed for DJ, lighting or DAW control in JGEX
  • Simconnect action (integrates JGEX with MSFS - currently has basic support for axis, event and simvar control - still in active dev)
  • General UI logic rework
  • Mode behavior rework and separation of edit mode vs runtime mode
  • Gated Axis action - easily add gate triggers to axis inputs via nested container/actions in actions support - this action has sophisticated triggers for splitting an axis up in terms of ranges and gates, as well as output filters. See documentation.
  • TTS (text-to-speech) improvements - voice selection - playback rate and testing while in edit mode
  • Keyboard mapper improvements - autorepeat feature added
  • Virtual keyboard for latched key input - allows handling of complex keys, including mapping of non-visible keys such as F13 to F24 and unusual multi-key latching use-cases.
  • "live" input visualization for current hardware axis and button positions, and visualization of most outputs including response curve
  • Device substitution helper (with profile backup) - used to map a profile device to another if it changed
  • Device tab re-order to user's preference (this does not change the hardware order, just the visualization order in JGEX)
  • Updated input map dialog - shows current mapped inputs (tools menu)
  • QOL features with the UI including improved look, updated icons and more "windows" like behavior such as context menus.
  • library dependency updates (lxml, pyttsx3, qtawesome)
  • Move to Python 3.12.5 64 bit

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.

New discord server:

I created a discord server for discussion as that will be easier to track various questions and suggestions. Please continue to use issues in Github to report bugs/issues.

discord server

Documentation

Please consult the readme.md file for documentation. Documentation is still a work in progress.

Warning - profile data changes

This version has major code changes and touches many core modules to support the new functionality - while I did my best to run and pass internal tests - there may be more bugs than usual - apologies ahead of time. Profiles saved with this version will not be recognized by older versions due to the change in the latching subsystem and new keys to support this information.

Make a backup of your profiles or use "save as" just in case you need to revert to a prior version.

Antivirus False Positives

The Pyinstaller packager for Python continues to sporadically cause false positives because of the way the packager works. This is an issue with some A/V solutions and is due to multiple factors and not unique to GremlinEx. This is not something under my control. The updated doc has some options, including, should this rare event occur, you can create an exception (which seems to be the recommended option for all Python projects using PyInstaller if the issue presents itself - again - rare), or run the code directly from the source. I have run the software through https://www.virustotal.com/ and a few A/V solutions flag the packaged code as a false positive (3 out of 64). This is an issue with the AV solution, not GremlinEx.

Patch notes leading to RC:

(m22)

  • updated documentation
  • device change handling enhancements (see changelog and documentation for behavior changes)
  • keeping m21 available in the distro in case m22 breaks something unexpected

(m21)

  • keyboard mapper remembers last pulse/interval values

(m20)

  • fix for mode status bar not updating
  • fix for mode delete not having a confirm box nor updating the mode

(m19)

  • fix for being able to delete gates in gated axis (two gates must remain) - deletions will be ignored if less than two gates remain
  • fix for gate axis add button not adding a gate

(m18)

  • fix for mode selector not always updating when mode configuration has changed
  • added noop option for simconnect triggers (for commands that take no values)
  • invert flag on axis visual repeater now causes an update showing the inverted value instead of waiting for the next update

(m17)

  • normalization of gated axis no longer includes extra hidden gates in the computation
  • fix for response curve UI symmetry checkbox causing a CTD [breaking]
  • fix for old gated axis profile read not finding registered gates due to ID changes
  • fix for paste action across different devices not updating to new hardware input data until reload

(m16)

  • changes are primarily bug fixes based on the issue list
  • autorepeat added to keyboard mapper as an output mode, has improved descriptions as to what each mode does
  • gated axis now has distinct action maps for each gate or range mode (prior profiles should load fine) - this solves a behavior issue
  • gated axis adds range entry and range exit triggers and conditions to fix an issue with virtual button mappings that would never otherwise release - this was necessary to make virtual buttons functional with this action
  • simconnect axis output in gated mode still a WIP as a result of these changes (didn't get around to testing it) - use ranged or trigger modes for now to avoid issues.
  • fixed a typo in requirements and added a missing dependency

(m15)

  • improved vJoy device naming in JGEX to ease identification - vJoy device names use axis/button/hat counts part of the name to help identify which device it is - adds device sequence
  • added clear map menu option for devices (clears mappings from the selected device w/confirm box)
  • 1:1 map behavior change to be current device specific and reworked logic
  • enhancements to gated input axis and bug fixes (now has range repeater and visualizer)
  • input visualizer now aware of user device order (matches tab sequence)
  • replaced number pick boxes with free text edit for floating point values - this makes the input a bit easier to type in data or cut/paste - the input is very similar to the spin box control it replaces - the wheel mouse increments/decrements values like spin boxes even if it does not display arrows.
  • proposed bug fixes to reported issues, moving us closer to RC

(m14)

  • allowed vJoy as merge axis input
  • change vjoy name to include axis/button/hat counts to distinguish them
  • fix type reference missed via automatic refactor
  • added tooltips on most options
  • removed HID guardian options (not used)
  • added action/container sync option

(m13)

  • cut/paste of simconnect/gated axis data blocks (custom serialization)
  • fix for default gated axis range not saving actions (due to UI changes in m12)
  • recent profile list normalization (now case insensitive and use of consistent path separators)
  • option to enable UI while profile is active (potential dragons ahead when that is enabled)

(m12)

  • response curve UI enhancements, added input tracking and symmetry flag persistence
  • enabled MSFS SimConnect simvar trigger mode supports (toggle, on, off)
  • internal copy/paste for containers referencing a gate data object
  • continued refactor of mode tracking logic
  • continued refactor of UI update
  • hardware detect delay bumped to 500ms
  • vjoy reset device caching

(m11)

  • fix for exception on functors missing action sets (log dump)
  • proposed fix for user plugin variables not saving
  • added user plugin instance duplicate button

(m10)

  • Fix for virtual button mode change handler attached to the incorrect object, preventing buttons from firing correctly

(m9)

  • default profile mode tracking fix (was causing an exception on start or when creating a new profile
  • tabs should now remember the last selected input when modes are changed (session only)
  • reworked QT memory management when changing profiles (reduces memory footprint)
  • added repeater mode to make it easier to know which mode you're mapping for when adding containers/actions
  • misc. fixes

(m8)

  • new merge axis action (see docs - allows axis merging as an action and mapping of output to sub-action/container, and adds inversion option to merged axes. This action is needed if complex processing of merged axis output is needed, such as applying a curve to the mixed output. To edit actions that respond to the merged output, add the appropriate mapping via the merged axis action "actions" configuration button that will open a dialog to do this mapping.
  • fixed a bug in the gated axis action that had an unknown method call depending on what hardware it was mapped to
  • play action has a new play button to test play the sound file while in edit mode
  • bug fix for UI not updating on certain mode changes in edit mode
  • UI interaction is largely disabled in run mode to improve performance and also prevent profile editing/changes while a profile is running. This caused some potential conflicts with state information with the updated event model. Profiles are not expected to be changed/edited while they are also active. If you edit a profile, you should be in edit mode.
  • hourglass now displayed on edit mode changes on lengthy operations
  • this update does not address an issue reported with user plugins not saving data correctly - this is still being investigated and a patch will be issued for that when the issue has been found.

(m7)

  • library reference fix for SimConnect and Macro (libraries not included in packaged JGEX version) - enables these actions t...
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

13.40.12ex (d)

29 May 12:34
Compare
Choose a tag to compare

Patch (d)

Reworked logic for automatic highlighting of inputs when in profile edit mode.

Added a new (experimental) button container. This container makes it trivial to implement two-way and three-way switch mappings in GremlinEx. While this was possible using conditions, this new container has a more straightforward way of programming buttons: a box for what to execute when the button is pressed, and a second box for what to execute when the button is released. The container can be used on input buttons and will not work on axes. It is experimental and only basic testing/validation was performed with no issues.

(a) minor bug fix for remote client code handling when forcing local mode execution

(b) bug fix for image loading and path resolution + profile creator bug fix code merge

(c) added a vertical scroll bar to selectors on input preview window (per request)

(d) fix for condition reset on UI reload reported in issue 41.

13.40.12ex (c)

28 May 15:57
Compare
Choose a tag to compare

Reworked logic for automatic highlighting of inputs when in profile edit mode.

Added a new (experimental) button container. This container makes it trivial to implement two-way and three-way switch mappings in GremlinEx. While this was possible using conditions, this new container has a more straightforward way of programming buttons: a box for what to execute when the button is pressed, and a second box for what to execute when the button is released. The container can be used on input buttons and will not work on axes. It is experimental and only basic testing/validation was performed with no issues.

(a) minor bug fix for remote client code handling when forcing local mode execution

(b) bug fix for image loading and path resolution + profile creator bug fix code merge

(c) added vertical scroll bar to selectors on input preview window (per request)

13.40.13ex (a)

02 Jun 02:13
f5a1a49
Compare
Choose a tag to compare

-- Added container and action copy/paste operations (experimental feature)

This release adds a new copy action button for actions and containers and a new paste button where actions or containers can be added. This is a feature I've wanted to have for a while and it is also a popular requested feature.

Click on the copy action button in the title bar of the action or container to "copy" the data to the internal clipboard, and you can then paste the action, if it is allowed for the container and input type, into any container. The paste button is next to the "Add" button. Pasting is disabled if there is nothing to paste or if the copied data is invalid for the input mapping type.

(a) patch details

Added container copy/paste

A new option has been added in to persist this data to disk (profile folder) between GremlinEx sessions so it can be recalled at the next run.

Paste only works if the copied data is applicable to the current context.

On the script side, renamed the dill module to dinput to avoid conflicts with the Python dill library.

POTENTIALLY BREAKING CHANGE
Profile folder changed to Joystick Gremlin Ex. If the profile folder does not exist, it will be created, and the contents of the base Joystick Gremlin profile folder, if it exists, will be copied over on the initial run. This will keep profiles and scripts that use GremlinEx specific features from conflicting with each other (issue 50)

13.40.12ex_e: Merge pull request #39 from muchimi/develop

30 May 00:53
f5a1a49
Compare
Choose a tag to compare

Patch (d)

Reworked logic for automatic highlighting of inputs when in profile edit mode.

Added a new (experimental) button container. This container makes it trivial to implement two-way and three-way switch mappings in GremlinEx. While this was possible using conditions, this new container has a more straightforward way of programming buttons: a box for what to execute when the button is pressed, and a second box for what to execute when the button is released. The container can be used on input buttons and will not work on axes. It is experimental and only basic testing/validation was performed with no issues.

(a) minor bug fix for remote client code handling when forcing local mode execution

(b) bug fix for image loading and path resolution + profile creator bug fix code merge

(c) added a vertical scroll bar to selectors on input preview window (per request)

(d) fix for condition reset on UI reload reported in issue 41.

(e) fix for macro UI icons being in different folders from plugin

13.40.11ex

19 Apr 01:10
Compare
Choose a tag to compare

Release update May 26 2024

Bug fixes

  • Changed Gremlin behavior so the last profile mode can no longer be deleted. A mode must always be defined. This was causing numerous issues as a mode is always expected.

  • Status bar update code handles errors gracefully and will log the error and not crash the app.

Changes/Additions

  • Adds a new experimental range container and an enhanced experimental map to keyboard action.

  • Adds a new Button Release action to the VjoyRemap action to trigger a button release. This can help with unique behaviors created by the Tempo or Range containers to facilitate the profile setup.

  • Adds generic icons if an icon cannot be found for an action or a container with log entry.

  • Adds improved icon search logic when running in packaged (compiled) or regular script mode.

  • Hardened icon search logic in compiled version of GremlinEx using new packager

  • Bug fix: icon size in titlebar - compiled version

Range container (experimental)

The range container is designed to generate actions based on raw axis input using the Gremlin container model instead of using tedious conditions. The idea is to split up an axis into a number of ranges, and each range triggers one or more actions. The range container also has a deflection detect trigger mode if a range is not used (the input has to be moved by a percentage defined before triggering).

When the value is in range, the action will be triggered once. The range container is aware of other range containers and uses latching, so when the axis value enters a particular range in one container, it resets the action of the other range containers so they can trigger again when the axis value enters that range.

MaptoKeyboardEx action (experimental)

The enhanced map to keyboard EX action allows separate press (make), release (break) and pulsed keyboard presses. The hold feature should function like the original old map to keyboard.

13.40.9ex

14 Apr 03:18
08255b0
Compare
Choose a tag to compare

Updated to the latest release of python 3.12 x64 and QT 6. This caused a few headaches with deprecated python constructs.
More hardening of UI for QT6 event model that was causing race conditions and spurious resets of UI elements.
This addresses a few more reported issues with conditions and the macro editor.
Changed logic to look for dependencies (dlls), plugins and icons.

Minor code refactor/cleanup.

13.40.8ex - bug fixes

12 Apr 20:31
1fb64c9
Compare
Choose a tag to compare

This is a bug fix release:

  • Fix: error on startup if no prior run (config.json not found) (#24)
  • Fix: max-recursion error on macro editor when selecting a vjoy action from the dropdown (another QT6 behavior change from QT5) (#23)
  • Fix: ghost-writer script not working with JGEX (two problems there - first the script wasn't setup for Python 3.11+ and second, it references an older class for Gremlin keyboard for its UI that caused an assertion error in the code not using the correct internal class in JGEX) (#14)