TASEmulators / TASEmulators/BizHawk

MAMEHawk does not support delta-based trackball inputs (eg, Millipede)

Open
#3,794 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

App: EmuHawk Core: MAME Request: Feature/Enhancement
Dominant language
C#
Stars
2.8k
Forks
468
PR merge metrics
No merged PRs in 30d

Description

(Note: I suck at technical writing, so pardon if this issue is a bit sloppy/unclear)

When using an analog input to control a trackball based arcade game or editing inputs using TAStudio to do the same, BizHawk treats the analog input like any other analog control such as an analog stick, maxing out the inputs within the bounds reported by MAME. However, this only works for arcade games that use the trackball coordinates to change the absolute position for the player, such as cursor-based games like Missile Command. In Millipede (and likely other games), however, the trackball input is used to alter the player's speed/apply force/apply acceleration or etc, and the trackball's reported bounds are extremely small, with MAME intentionally overflowing the coordinate values in order to produce continuous input. In the absence of a relative (rather than absolute) input mode such as what libTAS offers for mouse control, this makes games such as Millipede effectively impossible to control, as shown in the video below:
Recording 2023-10-05 155128.webm

While I'm not at all qualified on technical matters, feos took a look at the MAME driver in question, and also wrote a lua script that can be run with MAME standalone and Millipede in order to give a live display of what MAME is doing with the trackball values at any given time, which I've uploaded to userfiles here. Use it by running mame milliped -script millipedetrackball.lua (with MILLIPED.ZIP in your ROMPATH, of course).

In addition to adding a relative move for analog inputs, it would also be helpful if BizHawk supported binding a digital input such as a keyboard key to a configurable increment of the analog input in question, like can be done in MAMEUI. While having precise analog inputs can be helpful, there are also times when such fine control isn't necessary and where having to wrestle with either analog controls or TAStudio is a waste of time. For Millipede, the player's acceleration is nearly instant and maximum speed for the trackball is quite controllable, so it's most practical to use digital keys to control the trackball at constant max input speed, treating it like any other game using digital inputs for TASing workflow purposes.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the behavior with standalone MAME and the provided millipedetrackball.lua script using mame milliped -script millipedetrackball.lua. Then trace BizHawk's analog-input handling and compare it with the requested relative movement and configurable digital increments. Done means delta-based trackball games such as Millipede can be controlled and recorded through both analog and digital inputs.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
desktop
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.