Halo inspired laser tag (LTTO hack)

Bringing Halo style game play to Laser Tag Team Ops

Similar projects worth following
I bought a bunch of laser tag guns off ebay for cheap (the tiger electronics Laser Tag Team Ops guns from the early 2000's) to use with my church's youth group. We quickly outgrew their capabilities. So began my project to replace the guts of each gun and write my own code.

The main objective was to get custom laser tag gaming on an arduino based platform as cheap as possible. Kids would be able to play pickup games easily at our church. I wanted to add a lot of really useful features and the list just kept on getting longer and longer. 

The current feature set:

Everything runs on the Teensy 4.1 by PJRC

upgraded from 6xAA batteries to lipo battery with built in recharging

replaced monochrome screen to full color LCD st7789 screen

i2s class D amplifier for audio effects (using the stock speaker) 

added large vibration motor in the handle and small vibration motor embedded in the trigger

added visible laser 

added neopixel strips down each side of the gun and drilled out holes 

replaced navigation panel buttons with joystick and 2 tactile switches

added rfm69 packet radio for long range communication 

I'm still using the original housing/shell, the optics, the barrel tx/rx, the dome tx/rx, switches and triggers, but everything else inside the gun is scrapped. 

In addition, I'm using Circuit Playground Express boards by Adafruit as bases/respawn points. they also have rfm69 packet radios attached and they function as a node network to keep the current state of the game and aid in long range communication throughout the church

Game play is modeled after Halo. there are multiple weapon types: AR, pistol, shotgun, sniper, rocket launcher

each weapon has unique abilities:

the AR is full auto, low damage, low accuracy, high magazine size and high total ammo size, long reload time. Full auto has a side effect ability in that it is harder to get shot at while you are shooting, it acts like a shield. This is mainly because while a gun is sending out IR signals I have to ignore those signals being reflected back into the dome receiver. 

the pistol is semi auto, medium damage, medium range, and has the ability to lock on to a target and confirm a head shot single kill. This is accomplished using the rx barrel and a beacon sent out of every gun's dome much like how the original LTTO worked (but without the "warning warning" voice prompts). the pistol also has a silencer option.

the shotgun used to shoot out of the dome, but that didn't work as well as I expected, so now it shoots using the radio. This doesn't make it very shotgun-like: it's spread is 360 degrees, it shoots through walls, etc. But this ended up being really important to balance the guns because this means it can interrupt the AR's full auto, and it can increase damage the closer you get to your target. Too far away and it won't do any damage, right next to someone and it will kill them in one shot. The shotgun is also needs to be pumped for each shot and held for full reload with a long reload time. 

the sniper is also able to get headshot one-shot kills, with high damage otherwise. it is long range.

the rocket launcher is the highest damage and can actually kill groups of people. If you are hit with a rocket, or if a base is hit with a rocket, the blast will repeat and anything in the near area will get hit. At first I was using the dome to relay the hit, but I changed to sending a command via radio

Adding the radios was a game changer because I was able to get RSSI values that gave a good estimate as to how far away to player were to each other or how far a player was from any number of bases. This allowed me to implement some incredibly awesome features.

There are 10 bases throughout my church, and on the screen of the gun I've painstakingly drawn out a map of each level of the church. using the RSSI beacons from all the bases each gun is able to triangulate and estimate its position. Boom. Radar. 

I also use the RSSI values to set the range of certain weapons and to detect when you are at a certain base. The bases act as respawn points and the can hold bonus items, weapons, ammo, flags, etc. 

Health is regenerative like in Halo. That was one feature...

Read more »


This video shows the different weapon types and LED animations

MPEG-4 Video - 27.28 MB - 12/01/2021 at 15:46



This video shows what it looks like to get hit by the different weapons (shooting from a Circuit Playground Express)

MPEG-4 Video - 26.65 MB - 12/01/2021 at 15:46



Video of my first attempt at radar. The screen displays a map of the church's main level and locations of all the bases (circuit playground expresses). Blue rings are drawn with radii proportional to the RSSI signal strength. Where they overlap and add is about where I am.

MPEG-4 Video - 16.77 MB - 12/01/2021 at 15:46



remote starting a game. host gun broadcasts start to the bases, the bases send start codes every second during the count down.

MPEG-4 Video - 10.28 MB - 12/01/2021 at 15:46



Rocket explosion with coordinated LEDs

MPEG-4 Video - 4.35 MB - 12/01/2021 at 15:45


View all 38 files

  • 1 × teensy 4.1

  • Base Item 3D printed display

    dave.verlee12/02/2022 at 19:57 0 comments

    I'm currently spending all my laser tag dev time building up 8 more guns, but I had this quick idea to make an add-on graphic display so the bases can show what items they currently have available for pick up. It's hard to get a good picture - it looks really good in person, and the different colors are visible from far away. It's easy to implement and will allow player to rely less on the tiny map icons to know where stuff is to pick up. I can also add one more item - I think it's going to be radar. 

  • Version Control and Rocket Launchers

    dave.verlee08/24/2022 at 18:52 0 comments

    If your project code isn't currently being tracked with version control like git, it's time to start. I was able to go back through my log and find the bug that caused my "terrible playtest". It was actually quite a simple bug that broke everything and caused a very complicated result. The real REAL root cause of the issue was terrible engineering practices by me. In my radio communication scheme, I have 3 different versions of almost the same message for distributing the game rules. I added a feature and forgot to update just one of those 3 messages. What I ought to do is simplify this messaging system down to one somehow to make updates and new features easier to implement. 

    A couple more code improvements after perusing the base code, everything is back to being fast and stable. 

    I was testing the rocket launchers with some friends and discovered that the antenna strength of the bases are not the same. This is kind of an issue because I'm trying to make the blast radius consistent. What I decided to do instead was use the radar on the map to determine how far away you are from a blast. If this works, then I can also confine explosions to whatever room the are in too. 

    While testing weapon pickup and radar, I discovered that with 8 players there is too much radio congestion to have reliable weapon pickup, so I'm going to table that feature for now and think of a better way to share every player's location in a more efficient way.  (edit: this was also due to a bug. while experimenting with how quickly/how often the location finding algorithm worked, I inadvertently also increased the radio traffic. this was easily fixed and I think I might still have multiplayer radar available) 

  • A terrible playtest

    dave.verlee08/11/2022 at 03:36 1 comment

    Sometimes, everything works, everything is great, you feel like you're almost there, and then other times nothing works, everything is broken, and you feel like you need to start over. 
    I had a terrible playtest after two awesome playtests that made me feel I needed to rethink my radio messaging scheme from the ground up. Right now, it's basically a shouting match. I got to this point by just barely getting things to work - if a critical message wasn't getting through, just send it 4 times instead of one, there are tons of delays based on arbitrary values (note: they're actually "delayAndRead()" functions that read the radio while waiting). There are a bunch of retries, there's no real sense of priority in the messaging system, and there is no coordination. 
    I think what I need to do is attempt to coordinate all radio nodes to time slices. There's a fixed number of radio nodes, 10 bases and up to 32 players. So I think I can get away with 42 time slots spaced at 10ms. Need to do a lot of testing to see if that window is big enough, but I feel like it's more than enough. My hope is that this new method brings about stability into the system and I can reduce the retries and the redundant messaging. 

    R&D can have big setbacks like this, but it's important to remember lessons learned. Have no fear of doing something wrong the first time - even if it means having to redo it later. 

  • New team selector

    dave.verlee08/08/2022 at 16:51 0 comments

    using map icons to display all teams at once

  • Motors and radios

    dave.verlee08/08/2022 at 16:45 0 comments

    I got to root cause for one of my more frustrating stability bugs. The culprit was noise generated by the large vibration motor being in close proximity to my radio antenna. These large voltage spikes on the battery voltage rail were causing the radio to become unresponsive to receive messages and in more extreme cases causing it to lock up and freeze the program. My current work around it to try and keep the battery voltage bus far away from the radio and antenna inside the gun, but I think I will be moving the motors to dedicated motor driver ICs that appear to do a better job of keeping the voltage rail clean.

  • 5-way Nav Switch

    dave.verlee07/19/2022 at 04:11 0 comments

    The function button on the side of the gun was feeling pretty useless, and I really wanted to fit a joystick with a center button in that hole somehow. I was very fortunate to find a cheap 5-way nav switch that fit. However, I didn't want to run extra wires down the length of the gun. I was able to still fully use all 5 switches on one wire buy making a resistor divider network and reading in the voltage at each node.  The switch fits on a small oshpark pcb I designed.

    This worked so well, and was so much cheaper and easier to build that I also decided to scrap the analog joystick and extra buttons on the main control panel for a second one of these. 10 switches on only 2 wires! This only works well in this case because the switch physically prevents you from actuating more than one switch at a time.

  • The Next Batch

    dave.verlee07/19/2022 at 04:00 0 comments

    To try to prepare for ramping up production, I built the next 4 guns as efficiently and uniformly as I could. It went pretty smoothly, and it's really exciting to have 8 guns to test with now. I really hope everything else scales well. I'm mostly concerned with the radio messaging, as that can get congested really quickly. 

  • The Mario Kart mechanism

    dave.verlee05/31/2022 at 15:39 0 comments

    By now, I've gotten annoyingly good at laser tag compared to the students who will actually be playing the game, and just like in Halo this can make for a less than fun experience. I've added in a mechanism borrowed from mario kart where if a player falls behind, they get an invisible boost in performance. If they don't have enough kills, their weapons get more powerful. If they've died too many times, their shield gets stronger. It's all proportional and tunable, as they come back to the front they go back to normal.

  • shotgun works!

    dave.verlee03/09/2022 at 17:27 0 comments

    We play tested last night and the new shotgun works very well. It's very satisfying. It bursts 10 shots in about half a second, and each shot does 34% damage, so landing three or more will get you a one shot kill. during a few firefights I got hit, but not enough to get me fully out - which I think is the sweet spot I want it to be at. I think the burst does make it easier to aim and land a hit. I think I will be expanding this method to both the sniper and the rocket launcher since both of those prove to be more difficult to get kill shots with. 

  • fixing the shotgun

    dave.verlee03/07/2022 at 21:02 2 comments

    The shotgun ended up being way too powerful during play. I couldn't figure out a way to get more spread from the transmitting devices available. The dome LEDs weren't bright enough. a single dedicated LED wasn't bright enough. I think this is because the dome receiver has a fixed gain to make the long range barrel LED more selective. But using the radio to transmit shotgun blasts - because it goes everywhere and transmits through walls - it didn't feel like shooting a gun anymore. This method will come back in the form of some other weapon - like a gravity hammer or energy sword. 

    So I thought maybe instead of trying to create a real spread, I could simulate a spread. What if the shotgun sent out its IR message repeatedly and very quickly in one burst that would cover the span or two AR shots. That should in theory guarantee that the shotgun can interrupt an AR, and the spread of the shotgun is determined by how much your aim moves after you shoot. I can limit the effective range still by using the radio RSSI messages. On the bench it works, will test soon

View all 10 project logs

Enjoy this project?



dave.verlee wrote 03/09/2022 at 17:22 point

I briefly looked into directional antennae and decided I wasn't a good enough RF engineer to do it. Though it would be really cool, I think the shape of a cardioid antenna wouldn't fit inside the gun for 915mhz. And as you said, I don't know how to switch between omni and cardioid without adding a second radio. so yea, I scrapped that idea

There is currently an overshield! I just finished the animation and got to testing it last night. works! The other pick up items are silencer for pistol, active camo, and a laser sight. I might add grenades at some point if I can figure out how to do them - they might just function the same way the rocket launcher does but with a time delay. Active camo is simple but cool - when you get tagged out all the lights on your gun turn off, and when you activate the active camo it does the same. so not only does it aid in hiding in the dark, it also makes you look "out" to others playing. 

Yes, all of the voice prompts will be there, "slayer" "killing spree" "red team has the flag" all that, plus some additional ones that I think I have to do myself, "cheating detected" "stop cheating" this is your last chance to stop cheating" "game over because you wouldn't stop cheating" 

  Are you sure? yes | no

Hackamonth wrote 03/08/2022 at 03:17 point

First, this is awesome. Thank you for existing and doing this.

Secondly, have you considered making the radio directional? A simple PCB antenna could significantly limit your radiation pattern and reenable the use of that for the shotgun, and significantly increase the range of the sniper, if relevant. 

You'd need two antennas, that and an omni for reception (and use with the gravity hammer), but it might be a tractable problem depending on what your hardware setup is. 

Are there overshields? Other pickups? Does the original Halo guy announce the game type? "Slayer." 

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates