PC (Windows) · Volume 4
The Sega Boards and the PlayStations — Model 2, Supermodel, Demul, Flycast, PCSX2 and DuckStation
The Windows emulators behind House of the Dead, Virtua Cop, The Lost World, Confidential Mission, Time Crisis and the GunCon games: each one's Raw Input setting, its reload, its in-game calibration, what it can and cannot send back for recoil, and the PlayStation 2 emulator that can only see one gun
These emulators cover most of the famous light-gun games of the 1990s and 2000s that MAME (Volume 2) does not play well or at all. Several of them predate per-device input and were never designed for two PC light guns; DemulShooter, which fills that gap, gets its own section in Volume 5, and this volume says where each emulator needs it.
4.1 Two calibrations, not one

Original arcade gun cabinets had their own gun calibration in the service menu, because each cabinet’s gun and monitor differed. The emulated games keep it. So an arcade game run under these emulators needs two calibrations:
- The gun’s, in the OpenFIRE App, which makes the gun report the right desktop position (Open-Source Firmware, Volume 5, section 5.3). Done once per screen.
- The game’s, in its service or test menu, which maps what the game receives onto its picture. DemulShooter’s wiki says it for both the Model 2 and Demul set-ups: “The first time you run a game, go to SERVICE/TEST menu and perform guns calibration.” Done once per game; the result lives in the game’s emulated NVRAM.
If a game’s aim is off by a constant amount after the gun aims correctly on the desktop, the game’s calibration is the one to redo. If the desktop cursor is off too, it is the gun’s.
4.2 Sega Model 2: the Model 2 emulator
Sega’s Model 2 board ran The House of the Dead, Virtua Cop and Virtua Cop 2, Gunblade NY, Behind Enemy Lines and Rail Chase 2. On Windows they are played in the Model 2 emulator (version 1.1a), a closed-source freeware emulator; no documentation of its own was read for this dive, so its settings below come from DemulShooter’s wiki and are marked where they come from community sources.
There are two ways to give it two guns:
With DemulShooter (documented). DemulShooter’s Model2 page supports emulator 1.1a (“Both EMULATOR.EXE and emulator_multicpu.exe”), and gives the set-up:
- In
EMULATOR.INI,UseRawInput=0(“make sure that RawInput is disabled”), andDrawCross=0, because “Genuine emulator crosshairs are not working anymore”. - Run DemulShooter first, then the emulator:
DemulShooter.exe -target=model2 -rom=vcop2. - Calibrate in each game’s test menu (4.1).
The controls it gives are the same for every game: left click fires, right click reloads (“Everygame is based on LeftCLick = Fire, RightClick = Reload”), and in Behind Enemy Lines middle click throws a grenade, so that the grenade can be thrown while aiming on-screen. DemulShooter’s configuration tool can also install Lua scripts for custom crosshairs and to remove the white flash each trigger pull makes. And it notes that “Rail Chase 2 aiming is…weird.”
With the emulator’s own Raw Input (community-documented). Community set-ups (the Batocera wiki’s Model 2 page; a LaunchBox forum thread on two AimTrak guns) describe UseRawInput=1, “Read mouse through Rawinput, allowing 2 mice for 2 player shooting games”, with RawDevP1 and RawDevP2 choosing the devices. This works without DemulShooter, but gives no outputs for recoil.
For this gun, DemulShooter is the better route, because it also publishes the recoil outputs (Volume 5); the Raw Input route is the fallback when DemulShooter will not hook.
The OpenFIRE mapping that matches: the gun’s trigger is already left click and Button A right click. The reload button C sends mouse button 4 by default, which these games ignore, so either use Button A to reload or remap C to right click in the App. Pointing off-screen and pulling the trigger sends left click at the pinned edge, which is not a reload here; in the App, set the trigger’s off-screen assignment to right click to get arcade-style off-screen reloading (Open-Source Firmware, Volume 6, section 6.3).
4.3 Sega Model 3: Supermodel
Supermodel plays the Model 3 board, whose gun games are The Lost World (a handgun game), and L.A. Machineguns and The Ocean Hunter (mounted guns). Its README is the most explicit document in this dive about PC light guns.
- Two guns need Raw Input: “For multiple mouse support, allowing two mice or PC light guns to be mapped, Raw Input must be used. This is supported only on Windows.” Run with
-input-system=rawinput, and configure with the same system (supermodel -config-inputs -input-system=rawinput), because “When switching input systems … you must also configure” with it. With Raw Input, mappings can name a specific device, such asMOUSE2_XAXIS, which is how the two guns are told apart. - Reloading: the game reloads when the gun points off-screen and fires. Supermodel provides a “point off-screen” input, and
InputAutoTrigger=1(andInputAutoTrigger2=1for player 2) turns a single right click into “point off screen and press trigger”. The README recommends it “when playing with PC light guns as these often map the action ‘point off screen and press trigger’ to a single right mouse button click”, and records testing with AimTrak guns. - Crosshairs: shown in full screen; Alt+I cycles one, both or none.
- Calibration: L.A. Machineguns “will need” calibration in its service menu (AIM SET) before the gun responds properly.
- Recoil: Supermodel’s
Outputssetting (winfor Windows messages,netfor TCP) is “MAME Hooker compatible”, but the outputs it publishes, read from its source (Src/OSD/Outputs.cpp), are lamps (LampStart,LampView1…4,LampLeader), the drive board (RawDrive) and billboard digits. There is no gun recoil output, which matches the OpenFIRE wiki’s note that Supermodel “only provides lamp control”. The Lost World with recoil therefore uses the gun’s own trigger-fired solenoid.
The reference build is the project’s rolling 0.3a git build (the latest dated 20 October 2026 on its GitHub releases).
4.4 Naomi and Atomiswave: Demul
Demul plays the Sega Naomi and the Sammy Atomiswave, with The House of the Dead 2, Confidential Mission, Death Crimson OX, Ninja Assault, The Maze of the Kings, Lupin the Third: The Shooting, and the Atomiswave rail shooters (Extreme Hunting, Ranger Mission, Sports Shooting USA, Manic Panic Ghosts). It has no per-device light-gun input; DemulShooter is what makes it a two-gun emulator, and DemulShooter’s Demul page is the set-up guide:
- Latest supported build: “Demul0.7a 280418 (sometimes found as Demul 0.7a 180428)”. Some games need 0.7a (“Atomiswave railshooter games are not supported by Demul untill 0.7a”).
DemulShooter.exe -target=demul07a -rom=confmiss, with-noresizeto “Fix demul bug (exiting fullscreen when shooting upper left corner)”, which in turn blocks mouse input to Demul’s menus, and-widescreenfor a widescreen hack where a game supports it.- Calibrate in each game’s test menu, and quit Demul cleanly: “closing Demul with ALT + F4 or killing the process will prevent it to save calibration data to NVRAM”, and after updating Demul “either run guns calibration again or … copy your older
nvramfolder”. - The Atomiswave games’ own calibration is “too basic” and leaves an offset at the edges unless Demul’s window is 4:3; DemulShooter corrects it automatically “only with gpuDX11 and gpuDX11old plugins”.
The newest Demul build DemulShooter supports dates from April 2018. The same Naomi games now run in Flycast (4.5), which has its own Raw Input.
4.5 Naomi, Atomiswave and Dreamcast: Flycast
Flycast is the actively developed successor for these boards (v2.7, 19 August 2026), and it has per-device input built in:
- Controls, “Use Raw Input” (Windows only): “Supports multiple pointing devices (mice, light guns) and keyboards”. Each port’s device is set to Light Gun, and each gun mapped to its port.
- Crosshair: a per-port checkbox with a colour picker, in the same controls panel; off for play, on to check the aim.
- Outputs: Settings, Network, “Broadcast Digital Outputs”: “Broadcast digital outputs and force-feedback state on TCP port 8000. Compatible with the “-output network” MAME option. Arcade games only.” In the source (
core/hw/naomi/naomi.cpp) these are the Naomi’s general output bits, published aslamp0,lamp1and so on. A game’s gun recoil, if it drives one, is one of those bits, unnamed. DemulShooter’s Flycast target (DemulShooterX64.exe -target=flycast -rom=hotd2) reads the game’s state and publishes named outputs instead, and its page says that with Flycast it “will just fetch Outputs and will have no effect on the input system”. It lists Flycast v2.7 stable as tested.
So for Naomi gun games, Flycast for input, DemulShooterX64 for named recoil outputs is the modern combination; Demul plus DemulShooter remains the route for games Flycast does not yet run well.
4.6 PlayStation 2: PCSX2 and the one-gun problem
PCSX2 (v2.8.2, 4 September 2026) emulates the GunCon 2 as a USB device, which plays Time Crisis 2 and 3, Crisis Zone, Vampire Night, Ninja Assault, Resident Evil: Dead Aim, Starsky & Hutch, Dino Stalker and Endgame, all of which appear in the automatic screen-configuration table in its source (pcsx2/USB/usb-lightgun/guncon2.cpp), keyed by disc serial.
- Bindings: Trigger, Shoot Offscreen, Calibration Shot, A, B, C, Select, Start, D-pad, and Relative Left/Right/Up/Down axes. Shoot Offscreen is the reload. Calibration Shot exists because “Time Crisis games do a ‘calibration’ by displaying a black frame for a single frame, waiting for the gun to report (0, 0)”, and the binding fakes that report.
- Settings: a crosshair image, scale and colour per gun, and “Manual Screen Configuration” for games not in the table.
The one-gun problem. In the source, the GunCon 2’s position comes from InputManager::GetPointerAbsolutePosition(0), pointer 0, which is the system cursor, unless the Relative axes are bound. PCSX2’s input sources (pcsx2/Input/) are DirectInput, SDL and XInput; there is no Raw Input source. So PCSX2 can read one absolute-mouse gun. The second player’s GunCon 2 must be aimed through its Relative axes, which take an analog stick: the second gun in OpenFIRE gamepad mode (M0x1) with its camera aim on a stick (Volume 1, section 1.3). Whether a stick-driven GunCon tracks as well as the mouse-driven one is a bench question; the code converts the stick’s deflection into an absolute screen position, so in principle it is the same aim with more quantisation.
No recoil. PCSX2 has no output channel; the gun fires its own solenoid. The PlayStation 2 GunCon never had recoil, so nothing is lost.
4.7 PlayStation: DuckStation
DuckStation emulates the original PlayStation’s GunCon and Justifier, and unlike PCSX2 it has a Windows Raw Input source (src/util/win32_raw_input_source.cpp):
- Settings, Controllers: “Use Raw Input”, “Uses raw input for mice input. Enable if you wish to use multiple mice/lightguns.” Each mouse becomes “Raw Input Pointer n”, and each controller port’s GunCon binds its Pointer/Aiming to one of them.
- GunCon binds: Pointer/Aiming, Trigger, Shoot Offscreen, A, B, plus Relative axes; settings for the crosshair image, scale and colour, X Scale, and Line Offset and Tick Offset, which mimic the raster timing the real GunCon measured (CRT Timing).
- The Raw Input source honours Windows’ virtual-desktop flag; with the gun’s flag unset, the primary-monitor rule applies (Volume 1, section 1.4).
DuckStation’s source carries the CC-BY-NC-ND 4.0 licence. That does not limit playing games with it, but it matters for anything distributed: it cannot be bundled with a kit (decision D11).
4.8 Wii: Dolphin, briefly
The Wii’s gun games used the Wii Remote’s own infrared camera, so Dolphin emulates a Wii Remote, not a gun. DemulShooter supports it, but its page is written for Dolphin 5.0, a 2016 release, and the method routes Player 2 through DirectInput device numbers and edited Wii Remote configuration files. It is not covered further here; the Wii Remote’s camera itself is in IR Point Tracking.
4.9 Why this, and why not the others
Table 1 — 4.9 Why this, and why not the others
| Board or console | Chosen route | Rejected or fallback, and why |
|---|---|---|
| Model 2 | Model 2 emulator 1.1a + DemulShooter (UseRawInput=0) | Emulator’s own Raw Input: works for two guns but gives no recoil outputs |
| Model 3 | Supermodel, -input-system=rawinput, InputAutoTrigger | No alternative for Model 3; no gun recoil output exists, so the gun fires its own solenoid |
| Naomi, Atomiswave | Flycast with “Use Raw Input” + DemulShooterX64 for outputs | Demul + DemulShooter: still needed for some games, but the newest build DemulShooter supports is from 2018 |
| PlayStation 2 | PCSX2, P1 as mouse, P2 in gamepad mode | No other PlayStation 2 route on Windows was examined |
| PlayStation | DuckStation with “Use Raw Input” | Beetle PSX in RetroArch (Volume 3) is the alternative and has an equivalent light-gun mode |
4.10 What could not be verified
- The Model 2 emulator’s own documentation was not read; its
UseRawInput=1/RawDevP1/RawDevP2behaviour is from community sources only, and the Sinden wiki’s Model 2 page refused automated reading. - Which Naomi output bit drives recoil in each game under Flycast’s own outputs.
- How well PCSX2’s stick-driven second GunCon tracks compared with the mouse-driven first.
- That Flycast’s Light Gun device on Windows respects each gun’s Raw Input device in every Naomi gun game (the option text says it supports multiple light guns; per-game behaviour not tested).
Sources
- argonlefou, DemulShooter wiki (v17.10): “Model2”, “Demul”, “Flycast”, “Dolphin”, “Usage”, “Configuration”, https://github.com/argonlefou/DemulShooter/wiki — read 2026-10-20.
- The Supermodel project,
Docs/README.txtandSrc/OSD/Outputs.cpp, https://github.com/trzy/supermodel — read 2026-10-20. - flyinghead, Flycast master:
core/cfg/option.cpp,core/ui/settings_controls.cpp,core/ui/settings_network.cpp,core/network/output.h,core/hw/naomi/naomi.cpp, https://github.com/flyinghead/flycast — read 2026-10-20; release v2.7, 19 August 2026. - PCSX2 team,
pcsx2/USB/usb-lightgun/guncon2.cppand thepcsx2/Input/source list, https://github.com/PCSX2/pcsx2 — read 2026-10-20; release v2.8.2, 4 September 2026. - Connor McLaughlin (stenzek), DuckStation:
src/core/guncon.cpp,src/util/win32_raw_input_source.cpp,src/duckstation-qt/controllerglobalsettingswidget.ui, https://github.com/stenzek/duckstation — read 2026-10-20. - TeamOpenFIRE, MAMEHOOKER Documentation (Supermodel and Flycast outputs note), https://github.com/TeamOpenFIRE/OpenFIRE-Firmware/wiki/MAMEHOOKER-Documentation — read 2026-10-20.
- Batocera wiki, “Sega Model 2” (community wiki), https://wiki.batocera.org/systems:model2 ; LaunchBox forums, “2 Aimtrak lightguns on Sega Model 2”, topic 40267 (community) — read 2026-10-20 via search.
Comments (0)