Light Guns Aren’t Just For CRTs Anymore

For how much of a cultural phenomenon light gun games like Duck Hunt were, they didn’t survive the transition from CRT televisions to LCDs particularly well because of all of the technological quirks the light guns exploited in older technology that simply disappeared with modern TVs. But it’s not impossible to get a similar gameplay from modern technology as evidenced by the success of the Wii and its revolutionary Wiimote, and there are plenty of modern games that use similar devices. There are a few paths to getting older light guns working again, though.

The first system to note, called SAMCO, uses a system of LEDs and a camera to synchronize the game’s flashes to the new technology and translate the input back into the game. Gun4ir uses a similar technique, and boasts extremely high accuracy and low latency largely due to being programmed in assembly. Both systems can use either an infrared tracking sensor or a Wiimote sensor as the LEDs and while the SAMCO system can run on a Raspberry Pi Pico, Gun4ir exclusively uses ATmega32U4 boards with the optimized assembly programming.

Both SAMCO and Gun4ir offer PCBs for anyone looking to try them out without designing their own circuit boards, and once the electronics are assembled they can either be put in an original NES-era light gun, put in a custom printed enclosure, or even stuffed into a Nerf gun. For others looking for a more turnkey solution, there are also offerings from companies like Sinden which make complete system. You can always build your own system to restore the functionality of original light guns from scratch if that’s more your style.

Thanks to [LookAtDaShinyShiny] for tipping us off to the latest happenings in the light gun community!

Photo courtesy of Wikimedia Commons

17 thoughts on “Light Guns Aren’t Just For CRTs Anymore

    1. This was a follow up article suggestion, listing all of the different versions that aren’t a direct wiimote. Open source (samco), Free low latency firmware (gun4ir) and commercial with sinden. There are Free 3d models to construct your own from off the shelf parts, custom PCBs or build one into an existing oldschool lightgun shell and afaik, if it’s a lightgun game, you can play it with these options.

      I’m in the process of printing/building one and it’s been fairly simple, not much work for your average tinkerer and you get to pew pew pew when you’re done!

  1. I don’t understand how the SAMCO can work with the Wii sensor strip alone. To locate a gun’s pose involves six unknowns (x, y, z, yaw, pitch, roll). The camera image of the Wii sensor strip provides essentially 4 knowns (xy coordinates of two LEDs; I know there are more than two in the strip, but because they are all in a line, I think they don’t provide useful additional positioning data).
    An accelerometer would provide two additional knowns, but I don’t see an accelerometer on their parts list, though they do talk of tilt correction, which is odd.

    Maybe there is some clever math that leverages the fact that we don’t want all of the six unknowns of the gun pose, but just the two coordinates of where the gun is pointing at on the screen?

    Or maybe there are some heuristics based on assuming the user sits directly in front of the TV and holds the gun with no roll, and maybe with constant pitch.

    (My own living room setup has two IR LEDs below the TV and two above, and a gun made by putting a handle and sights on Wiimote. That gives eight knowns from the camera, plus accelerometer, and works very accurately when all LEDs are in view, and pretty well even when one drops out of view. The math is nontrivial and uses OpenCV’s pose estimation on an rpi.)

        1. Version 1 of samco used a single bar or 2 sets of ir leds in the same configuration as the wii bar, version 2 of samco offers a 2 or 4 led configuration, 4 is better than 2 by all accounts.

    1. Right, sensor bar gets you two X,Y coordinates, which via math get you meanX=X+yaw, meanY=Y+pitch, angle=roll (modulo 180°), and separation=1/Z.

      But you’re right: you don’t care about the 6DOF coordinate, you only care about collinearity of the sight to the screen, and that means you only need to calibrate where and how big the sensor bar is relative to the screen.

      1. That’s it pretty much, it’s done when you calibrate, apparently, it doesn’t care what angle you are with relation to the screen, if the sensor can pick up 4 ir points, it’ll nail the shot for you.

        There’s nothing stopping you adding other sensors to a samco unit, so if you want xDOF, you’ve just got to add it and some code. Gesture reloads could be a thing.

      2. Alas, I think that doesn’t work.

        Here’s one way to visualize the problem (it would be easier with a picture). Start by imagining the gun (i.e., camera) is pointed at the center of the screen and at right angles. If the sensor bar is below the screen, the camera will see two sensor dots some distance down from the center of its field of view. Imagine the sensor LEDs are at -10 degrees pitch relative to the camera pointing. Now move the gun up and slightly closer to the screen and tilt it down, all in such a way that the distance between the gun and the LEDs doesn’t change, and the LEDs remain at -10 deg pitch from the camera’s point view. (You’ll be moving the gun upward along a vertically oriented circular path centered on the half-way point between the LEDs and in the plane perpendicular to the line segment joining the two LEDs, and tilting it down so that that half-way point is always at -10 deg pitch.) It’s pretty easy to see that as you do this, two things will happen: (a) the camera’s image of the two LEDs won’t change, but (b) the center of the camera field of view will now point below the center of the screen. In other words, you can get exactly the same image of the two LEDs even though you are pointing at different screen locations.

        You can correct for this with accelerometer data (and get full 6dof estimation!): https://link.springer.com/article/10.1007/s00138-021-01219-0
        But I don’t know if the Wiimote accelerometer is precise enough to get good results.

        1. I’m just going by the information provided about gun4ir, I know nothing about the internal coding. Atm I don’t think any of them support an accelerometer, unfortunately.

  2. I bought an old WiiU thinking it would be fun to play “lightgun” games, but the experience was not great. Laggy, inaccurate.

    I later got Sindens and it is much better. Very fun, and I like that you don’t need IR bulbs arranged.for tracking (it uses a drawn on-screen border instead which isn’t as obtrusive as it sounds).

    1. The samco unit can use a DF robot ir sensor or the IR camera from an original wiimote as they’re the same pixart sensor (no pinout for non-pixart clone wiimote sensors, so can’t be used). Samco has a fork by prow7 which reduces latency, gun4ir went the assembly language route and has really low latency.

  3. Wasn’t there romhacks and a modification to the light gun internals that would allow you to use em for lcd, even modern after market ones?

    Even had game genie codes for it….iirc

    Changes some of the timing of the light gun and timing of the white boxes on the display iirc

    1. They’re in stock on amazon uk, us and I think some of the online sellers might still have stock, failing that just get an original wiimote (has to be original, no pinout for the clone cameras) and pull the sensor from it, it’s the same sensor used in the DFRobot unit, you’ll need a 24mhz xtal for it but apart from that, you should be good to go.

Leave a Reply to LookAtDaShinyShinyCancel reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.