PC (Windows) · Volume 5

TeknoParrot, DemulShooter, PC-Native Games, and Getting the Game's Recoil to the Gun

The PC-based arcade games TeknoParrot runs and how a light gun is bound in them, what DemulShooter does and the outputs it adds, which PC games need it, and the four hook programs that carry recoil, lamps and life to the gun's COM port on Windows

From the late 1990s, arcade gun games increasingly ran on PC hardware inside the cabinet: Sega’s Lindbergh and RingEdge, Namco’s System ES3 and ES4, Taito’s Type X, Raw Thrills’ Linux PCs. On a Windows PC they are not emulated but loaded: a loader supplies the cabinet’s I/O board, dongle and input so the original game binary runs. TeknoParrot is the main loader, and DemulShooter is the tool that turns two PC guns into the two cabinet guns these games expect and reads their recoil back out.

How to obtain the game software is outside this dive; it is the owner’s responsibility, and nothing here relies on any particular copy.

5.1 TeknoParrot: what it runs

TeknoParrot’s user interface is open source (GPL-3.0, teknogods/TeknoParrotUI, last pushed 19 October 2026); each supported game has an XML profile in GameProfiles/ and a metadata file in Metadata/. Profiles for gun games carry <GunGame>true</GunGame>. A search of the repository on 20 October 2026 returned 177 profiles with the flag, but the flag means “aims with a positional input”, not “light gun”: it also marks every Golden Tee Live year and Power Putt Live, which are trackball games. Among the light-gun titles, from the profiles and their metadata:

Table 1 — TeknoParrot's user interface is open source (GPL-3.0, teknogods/TeknoParrotUI, last pushed 19 October 2026); each supported game has an XML profile in GameProfiles/ and a metadata file in Metadata/. Profiles for gun games carry <GunGame>true</GunGame>. A search of the repository on 20 October 2026 returned 177 profiles with the flag, but the flag means "aims with a positional input", not "light gun": it also marks every Golden Tee Live year and Power Putt Live, which are trackball games. Among the light-gun titles, from the profiles and their metadata

GamePlatform (TeknoParrot metadata)YearNotes from the profile
The House of the Dead 4Sega Lindbergh Yellow2005Has an OffScreenReloadHack option (one of only two profiles that do, with its ELF2 variant); GPU: Nvidia and AMD “WITH_FIX”, Intel “HAS_ISSUES”
Let’s Go JungleSega Lindbergh Yellow2006Intel “NO”
Time Crisis 4Namco System Super 2562006Runs through an embedded PCSX2 build (emulator type pcsx2x6)
Time Crisis 5Namco ES3X2015OK on Nvidia, AMD and Intel
Point Blank XNamco ES42016
Aliens ArmageddonRaw Thrills Linux PC2015
Halo: Fireteam RavenRaw Thrills Linux PC2018Four players’ sensitivity; “Hide Game Crosshairs” option

The full flagged list is in this dive’s research notes. Many of the same games also appear as DemulShooter targets (5.4), which is how they get per-gun input and outputs.

5.2 Binding a gun in TeknoParrot

Every TeknoParrot profile has an Input API setting with three choices, DirectInput, XInput and RawInput, and the gun’s route is RawInput: the gun’s gamepad is a generic HID device, invisible to XInput (Volume 1, section 1.2), and only Raw Input separates two mice.

TeknoParrot’s source (InputListenerRawInput.cs) shows what happens next: a mouse report flagged MoveAbsolute is routed to the P1–P4 LightGun binding for that device path; relative mice go either to a binding on the “Windows Mouse Cursor” or are accumulated per device. So in the profile’s controller set-up, bind P1 Gun to FIRECon P1 by clicking with that gun, and the same for P2. TeknoParrot’s device-name code recognises AimTrak, Sinden and DolphinBar by their vendor IDs and gives them friendly names; it has no entry for OpenFIRE’s 0xF143, so the guns appear under their HID names, and the App’s distinct presets are what make them distinguishable.

The gun-game profiles share a few more settings: Use Relative Input with per-player sensitivity (for mice, not this gun: leave it off), HideCursor, and in some profiles Hide Game Crosshairs. The source also notes that its emulators “publish their exact screen-space content viewport. This keeps absolute and relative gun input aligned with letterboxed output”, so 4:3 games in TeknoParrot should not need the gun’s 4:3 correction.

Recoil from TeknoParrot games comes through DemulShooter’s targets for those platforms (lindbergh, ringwide, rawthrill, es3, es4 and others), not from TeknoParrot. QMamehook’s README says it does not work with TeknoParrot directly; it works with DemulShooter’s network outputs.

5.3 DemulShooter: what it does

DemulShooter (argonlefou, v17.10, 14 October 2026) exists because, in its wiki’s words, most emulators lack Raw Input support, which blocks two-player play with mouse-like devices; MAME and Supermodel are the exceptions it names. It does three things:

  1. Input. It reads up to four guns by Raw Input (“Only devices supporting RawInput data will be listed”) and writes each gun’s position and buttons into the running game, so the game sees two separate cabinet guns. Its -noinput option (“Disable input hacks on game”) turns this off when the emulator already handles input, as with Flycast.
  2. Outputs. It reads the game’s own lamp and recoil states (“genuine” outputs) and adds custom outputs it computes itself: Recoil per shot, Damaged when the player is hit, Life and Ammo. Its custom recoil is the point: “Recoil feedback is enabled/disabled with every bullet fired”, so it works the same in every game, including games whose cabinets had a rumble motor or no feedback at all.
  3. Fixes. Per-game options: hide the crosshair (-nocrosshair), hide the gun model (-nogun), the Demul full-screen fix (-noresize), a widescreen hack, and Unity plugins that make some PC games accept guns at all (5.5).

Two cautions from its own documentation: “DemulShooter must be run as an Administrator (or you can disable UAC in Windows)”, and it shuts itself down when the target process closes. And one from its configuration page that matters for the gun: an ordinary mouse can be chosen as a player’s device, but every relative-position device “will share the same axis values (i.e : Windows Cursor position)”. The OpenFIRE gun is an absolute device, so it is separate; a desk mouse left selected as a player will not be.

5.4 Running DemulShooter

There are two executables: DemulShooter.exe for 32-bit targets and DemulShooterX64.exe for 64-bit ones. Each is run with a target (the emulator or platform) and a rom (the game):

DemulShooter.exe    -target=model2    -rom=vcop2
DemulShooter.exe    -target=demul07a  -rom=confmiss -noresize
DemulShooter.exe    -target=lindbergh -rom=hotd4
DemulShooterX64.exe -target=flycast   -rom=hotd2
DemulShooterX64.exe -target=es3       -rom=tc5
DemulShooterX64.exe -target=windows   -rom=opwolfr

The targets listed in its usage page: arcadepc, chihiro (Cxbx-Reloaded), demul057, demul058, demul07a, dolphin5, es4, gamewax, globalvr, konami, lindbergh, model2, ppmarket, rawthrill, ringedge2, ringwide, ttx (Taito Type X) and windows for the 32-bit program; alls, arcadepc, es3, flycast, rpcs3 (System 357), rawthrill, seganu and windows for the 64-bit one. Three of them, lindbergh, ringwide and rawthrill, are listed as the “TeknoParrot Loader”.

The configuration tool, DemulShooter_GUI.exe, assigns devices to P1 to P4, enables outputs (“Window Message Outputs” for MAMEHooker, “Network Outputs” for anything listening on localhost:8000), sets the custom recoil pulse lengths, and installs the Unity plugins. A companion, DsDiag.exe, shows each device’s crosshair and buttons live, which is the quickest check that Windows is delivering both guns.

The button convention to match. Across its targets DemulShooter treats left click as the trigger and right click as reload, with middle click for a game’s extra function. OpenFIRE’s defaults send left on the trigger and right on Button A, so reload is Button A out of the box. To reload by pointing off-screen, which is how the cabinets worked, set the trigger’s off-screen assignment to right click in the App (Open-Source Firmware, Volume 6, section 6.3). The pedal in Time Crisis-style games is mapped per game.

5.5 PC-native gun games

Native Windows games mostly read the one system cursor: a single gun works in any of them as a mouse, and two do not. DemulShooter’s “Windows games” page is the most complete record of what it takes to fix that, game by game:

Table 2 — Native Windows games mostly read the one system cursor: a single gun works in any of them as a mouse, and two do not. DemulShooter's "Windows games" page is the most complete record of what it takes to fix that, game by game

GameStore and dateLight guns natively?DemulShooter route
Operation Wolf Returns: First MissionSteam app 1852650, Microids, 13 July 2023”does not nativelly work with Absolute Positionning devices like light guns”Unity plugin + DemulShooterX64 -target=windows -rom=opwolfr; non-VR version only; menus stay mouse-driven
The House of the Dead: RemakeSteam app 1694600, Forever Entertainment, 28 April 2022”not compatible with lightguns or multiplayer”The author’s Arcade Plugin with Input Type set to MULTIPLAYER, then -rom=hotdra; outputs available
The House of the Dead 2 (PC)2000s PC releaseOne player by keyboard config-rom=hod2pc; adds a coin key (5)
The House of the Dead III (PC)2000s PC releaseBoth players set to keyboard in its launcher-rom=hod3pc; the author’s arcade mod removes the on-screen guns and auto-reload
The House of the Dead: OverkillPC releasePlays with a mouse-rom=hodo adds only a credits key
Big Buck Hunter: Ultimate TrophyPC releaseMenus mouse/keyboard only-rom=bbhut; per-gun input in game only
Heavy Fire: Afghanistan, Shattered SpearPC releases”working well with a mouse but is natively not with lightguns”-rom=hfa, -rom=hfss; up to four players; middle click covers or throws a grenade
Blue Estate The GameSteam app 305380, 2015Its store page says “Compatible with Light Guns! (unofficial support)“Not listed

The House of the Dead 2: Remake (Steam app 3376690, 7 August 2025) has no DemulShooter entry yet, and its store page lists controller support but says nothing about light guns; whether it accepts an absolute mouse was not established.

The pattern is consistent: in a native PC game, expect one gun to work as a mouse, expect to need DemulShooter for two, and expect menus to need a mouse or keyboard even then.

5.6 The recoil path on Windows

Figure 1 — How a game's recoil reaches the gun on Windows. On the left, the sources: MAME's named outputs (Windows messages or TCP 8000); Flycast's raw JVS bits on TCP 8000; Supermodel's lamps; DemulShooter's…
Figure 1 — How a game's recoil reaches the gun on Windows. On the left, the sources: MAME's named outputs (Windows messages or TCP 8000); Flycast's raw JVS bits on TCP 8000; Supermodel's lamps; DemulShooter's genuine and custom outputs from TeknoParrot, Demul, Model 2, Flycast and PC games. In the middle, a hook program turns each output change into a serial command through a per-game ini file. On the right, the gun's COM port: S to take over, F0 for the solenoid, E to hand back. Own-work diagram.

By default the gun fires its solenoid itself on every trigger pull, which suits handgun games and needs no software. Game-driven recoil replaces that with the game’s own idea of when the gun kicks: per bullet in a machine-gun game, only when loaded in a shotgun game, a rumble when the player is hit. On Windows it is a chain of three:

  1. A source of outputs: MAME (output windows or network), DemulShooter (Windows messages or network, enabled in its GUI), Flycast (TCP, raw bits) or Supermodel (lamps only).
  2. A hook program that listens, looks up the game’s ini, and writes serial commands.
  3. The gun’s COM port, where the firmware’s handoff mode takes over: S starts it, F0x1/F0x0 or F0x2x<n> fire the solenoid, E hands back (Open-Source Firmware, Volume 6, sections 6.7–6.8).

Which keys a game’s ini needs depends on the source. DemulShooter’s are the generic ones (P1_CtmRecoil, P1_Damaged, P1_Life, P1_Ammo; IDs above 1000 in MAMEHooker’s window are DemulShooter’s custom outputs, below 1000 the game’s own); MAME’s are each driver’s own names (Volume 2, section 2.10). Every hook program fills the names into a new game’s ini on its first run.

For the D16 interlock and the solenoid’s duty, the custom recoil is the better source for this gun: DemulShooter’s GUI sets its ON and OFF pulse lengths directly (“Higher values will result in stronger feedback, but the coil may heat quicker”), and a pulse command on the output’s “on” state only (P1_CtmRecoil=cmw 1 F0x0|cmw 1 F0x2x1; left of the bar runs on “off”, right on “on”) uses the gun’s own solenoid timing, which keeps the firmware’s protections in charge. Holding F0x1 for as long as a game’s output is on runs into the firmware’s 2,000 ms limit and is the case Solenoid Recoil has to approve.

5.7 Four hook programs

Table 3 — 5.7 Four hook programs

ProgramLicence, latestListens toOn WindowsFinds the gunVerdict for this gun
MAMEHooker 5.1FreewareWindows messages”run it with administrator privileges, otherwise, you’ll have an abstract error regarding a DLL file” (OpenFIRE wiki)By COM number; P1 = COM1 … COM4 onlyWorks; legacy
QMamehook v2.2LGPL-2.1, 12 August 2025Network (TCP 8000)“no admin privileges necessary”By vendor ID (OpenFIRE, GUN4IR, Blamcon), in detection orderRecommended for MAME, Flycast and DemulShooter network outputs; not TeknoParrot directly
Hook Of The ReaperGPL-3.0, last pushed 6 December 2025NetworkWindowsIts own “default light gun format”Not examined beyond its description
OutputHooker v1.7.0GPL-3.0, 24 July 2026Both network and Windows messages”Fully optimized for Windows 10 and 11”Lists OpenFIRE among its COM-port gunsWorth trying where MAMEHooker is needed

The details of MAMEHooker’s and QMamehook’s ini files and their set-up are in Open-Source Firmware, Volume 6, sections 6.9–6.10. What is new here is OutputHooker, which describes itself as “A modern reimagining of MAMEHooker, built for the latest Windows environments”. It reads MAMEHooker’s ini files and keystates, accepts both output transports at once with a setting so that “no command is sent to your hardware twice”, and names OpenFIRE in its list of supported COM-port guns. That combination answers the two Windows-specific weaknesses of MAMEHooker (administrator rights, and Windows messages only) without giving up its ini files or its Windows-message sources, which DemulShooter and Supermodel still use. Its author says plainly that no support is offered.

Run order matters for Windows messages. DemulShooter’s wiki: “make sure Mame Hooker is running BEFORE DemulShooter”. The same holds for any listener of Windows messages, so start the hook program first, then DemulShooter, then the game.

5.8 DemulShooter’s outputs, game by game

DemulShooter’s Outputs page lists, per game, whether it publishes the game’s genuine outputs and each of its four custom outputs. For the games most likely to be played with a recoil gun:

Table 4 — DemulShooter's Outputs page lists, per game, whether it publishes the game's genuine outputs and each of its four custom outputs. For the games most likely to be played with a recoil gun

Game (target, rom)GenuineCustom RecoilDamagedLifeAmmo
The House of the Dead (model2, hotd)YesYesYesYesYes
Virtua Cop / Virtua Cop 2 (model2, vcop / vcop2)YesYesYesYesYes
Confidential Mission (demul, confmiss; the Flycast outputs table does not list it)YesYesYesYesYes
The House of the Dead 2 (demul or flycast, hotd2)YesYesYesYesYes
The House of the Dead III (chihiro, hod3)YesYesYesYesYes
Virtua Cop 3 (chihiro, vcop3)YesYesYesYesYes
The House of the Dead 4 (lindbergh, hotd4)YesYesYesYesYes
The House of the Dead: EX (lindbergh, hotdex)YesNoYesYes—
Let’s Go Jungle (lindbergh, lgj)YesYesYesYes—
Time Crisis 5 (es3, tc5)YesYesYesYesYes
The House of the Dead: Scarlet Dawn (alls, hodsd)NoYesYesYesYes
The House of the Dead II, III, Overkill, Remake (windows)—YesYesYesYes

”—” is the wiki’s “does not exist or unnecessary”. The whole table, every game DemulShooter lists, is extracted in this dive’s research file (research-demulshooter-outputs.txt) and feeds the game-by-game table in Volume 6.

5.9 Why this, and why not the others

Table 5 — 5.9 Why this, and why not the others

OptionVerdictWhy
DemulShooter for every non-MAME arcade game, custom recoil outputsChosenPer-gun Raw Input where the emulator has none; a consistent per-shot CtmRecoil across platforms; tunable pulse lengths
Each emulator’s own input with no recoilFallbackWorks where Raw Input exists (Model 2’s option, Flycast, Supermodel), but the gun then fires on its own rules
QMamehook as the default hookChosen for network outputsNo administrator rights; same ini files; written by the OpenFIRE maintainer
OutputHooker where Windows messages are neededProposedReads both transports, supports OpenFIRE by name, MAMEHooker ini-compatible; to be trialled on the bench
MAMEHookerLegacyAdministrator rights, COM1–COM4 only, Windows messages only
TeknoParrot’s own output handlingNot examinedRecoil reaches the gun through DemulShooter’s targets for these platforms

Proposed decision row PW-1: QMamehook as the default hook on Windows; OutputHooker trialled for DemulShooter’s Windows-message targets; MAMEHooker kept only as a fallback.

5.10 What could not be verified

  • How DemulShooter writes positions into each game (memory patching is implied by -noinput’s “input hacks”; the mechanism per target was not read).
  • TeknoParrot’s own output support, if any, for gun games.
  • Whether OutputHooker or Hook Of The Reaper needs administrator rights on Windows.
  • Whether The House of the Dead 2: Remake accepts an absolute mouse.
  • The meaning of the <GunGame> flag beyond what the flagged profiles show.

Sources

  1. teknogods, TeknoParrotUI master (pushed 19 October 2026): TeknoParrotUi.Common/GameProfiles/*.xml (<GunGame>, Input API, OffScreenReloadHack), Metadata/*.json, InputListening/InputListenerRawInput.cs, TeknoParrotUi/Helpers/JoystickControlRawInput.cs; GitHub code search for <GunGame>true</GunGame>, 20 October 2026, https://github.com/teknogods/TeknoParrotUI — read 2026-10-20.
  2. argonlefou, DemulShooter wiki v17.10: Home, Usage, Configuration, Outputs, Windows games, https://github.com/argonlefou/DemulShooter/wiki — read 2026-10-20.
  3. Valve, Steam store API (appdetails) for apps 1852650, 1694600, 3376690 and 305380 — read 2026-10-20.
  4. PolybiusExtreme, OutputHooker README and repository metadata (v1.7.0, 24 July 2026), https://github.com/PolybiusExtreme/OutputHooker — read 2026-10-20.
  5. Fusion-Lightguns, Hook-Of-The-Reaper repository metadata, https://github.com/Fusion-Lightguns/Hook-Of-The-Reaper — read 2026-10-20.
  6. That One Seong, QMamehook repository and README, https://github.com/SeongGino/QMamehook — read 2026-10-20.
  7. TeamOpenFIRE, MAMEHOOKER Documentation, https://github.com/TeamOpenFIRE/OpenFIRE-Firmware/wiki/MAMEHOOKER-Documentation — read 2026-10-20.

Comments (0)

  1. Loading…

Comments are held for moderation — nothing appears until approved.