Improving Snowball Fight... with Fists
How I would improve the 'Snowball Fight' mode by Halo Studios using a special weapon in Halo Infinite's Forge.
Written by Okom on Dec 18, 2024 in Halo. Last edited: Dec 29, 2024.On Dec 17, 2024 Halo Studios released a new mode called "Snowball Fight" into a featured playlist with the same name. The mode was featured on 3 maps, Snowbound, Snow Ground & Snow Fire. After playing the mode and seeing how Halo Studios executed it's creation, I noticed some things that I could adjust to suit the gameplay experience of the mode better for my liking.
Analysing the intent
I laid out some basic info on what I think the intention of the mode was so I could then dissect it and pick out parts to improve on. I saw the core values of the mode as being:
- Must work on all maps with no setup
- Get kills by throwing Plasma grenades that blow up the enemies
- Direct hit or explosion blast
- Showcase new 3rd person view in a PvP-setting
- Weapons disabled
- Equipment allowed
The issues
After playing a few games, I noted down the features that stuck out to me and made the gameplay experience less ideal:
- Seeing an "All weapons out of ammo" message always on screen
- Being able to use vehicles
- Being able to melee
- Sword crosshair
The largest issues were the vehicle usage as well as the usage of the Sword weapon with empty ammo. The vehicles led to the gameplay of the mode completely diverting to the point that my teammates started throwing grenades at me in an attempt to stop the percieved griefing that it may have looked like.
I realize that including vehicle support on the mode might've been to allow the Auto Turrets on the map Snowbound to exist on the map as they are classified as vehicles, but the vehicle abuse overweighs the inclusion of those in my opinion.
The other being the mode creator deciding to use an empty Energy Sword presumably due to it's third-person animation which looks like you're not holding a weapon. While that is a good point, the drawbacks of it were that a message saying "All weapons out of ammo" is constantly displayed on your screen as well as the crosshair of the weapon being kind of obnoxious to my liking.
The reason I paid so much attention to the Sword being used was cause I knew of a better and more cleaner method, and was surprised that the developer of the mode hadn't thought of it for an experience where the emphasis seems to be on a clean third-person player model.
The improvements
Here's what I thought of that would make the mode experience better:
- Replace the "Fists" weapon as the main weapon for a better viewing experience of the visuals and a cleaner UI
- Disable vehicles so they can't be abused on maps that have them
- Prevent melee to stop players cheesing melee kills
The vehicles being on the map was quite of a shock to me, but there may be some reason behind why they were included. To me it's a no-brainer to not have vehicles in such a mode. Preventing meleeing was a personal preference of mine that I think would make players focus more on landing accurate sticks rather than sneaky melees even in close-range fights. My real interest though was using the Fists weapon.
The Fists weapon
The main focus of my improvements would be the "Fists" weapon, which is a normally unobtainable weapon type in Halo Infinite and is only used in the Weapon Drills and the Academy to display your player with no weapon. The weapon type has working animations for first- and third-person as well as all the other animations you'd need for a fully supported gameplay experience such as clambering, sliding and meleeing.
The reason why the Halo Studios developer responsible for creating the Snowball Fight mode not using the Fists weapon was probably down to them not knowing that it can even be accessed using Forge tricks.
The discovery
On Jan 30th, 2024, I saw an X post by Makoima where they had found a way to wield a weapon type that was just the fists. There was no explanation on how it was done or the steps to reproduce it, so I had to try and analyse the video in hopes of spotting some leads. To no avail, I let The Scripter's Guild (TSG) Discord community know that someone had found a way to get the Fists.
Coincidental discovery
I couldn't come to any conclusions just based on Makoima's video footage, but out of sheer coincidence just 2 hours after I started the conversation about the topic, Implied Skill was doing some completely unrelated things on a test map of ours and had somehow accidentally gotten the Fists.
He was looking into whether the Infected Energy Sword–a new weapon at the time–had any differences to the other Energy Sword variants on a random map, and then jumped on a vehicle health test map to research some vehicle damage resist values for Ringfall, a mod for Halo Infinite. He hadn't changed the mode settings he had adjusted that made him spawn with the Infected Energy Sword as he loaded into the test map and was surprised to find out that he had spawned with two weapons and the Fists weapon in his inventory.
When he first told me about it, I brushed it off as some typo as I didn't realize he was talking about the exact same Fists weapon we were pondering about in a completely separate community, but after reassuring it was the same, I had to look into how to reproduce what he had gotten.
Since the map was for testing vehicle health thresholds where we needed to constantly damage vehicles, I had set up a script that would grant the player an unlimited ammo Rocket Launcher as they spawned. This forceful grant of a weapon combined with the overridden Infected Energy Sword weapon in the mode settings was the magical combination that made the Fists weapon appear, and it was all a pure coincidence at the perfect time.
After confirming this to be one way to reproduce the Fists grant, I shared it to TSG, and we finally had a lead on what to follow. Staying undiscovered for 14 months since the launch of Forge on Nov 8, 2022, it was quite a welcome and exciting discovery for the Forge scripting community, including me.
More research
As I posted my findings in TSG where we were leading the conversation about the topic, user greeenzx notified that they had also discovered a similar method to mine and that they were sure the Fists weapon was related to the intro sequence where the player animations play. User artifice0 also mentioned that they had seen the Fists weapon in an early Infection mode, but hadn't found a way to reproduce the behavior outside of the mode.
At this point, Makoima himself had joined TSG and chimed in on the conversation; showing images and explaining how he got the Fists to appear. He had used a script that would give you two Energy Sword weapons as you spawned and noted that the Fists only appeared on initial spawn. He theorized that they are using a 3rd inventory slot, similar to how Fusion Coils or objectives do.
Having enough concrete information to back up the theories, we looked deeper into how to grant the Fists without changing mode settings. At this point Implied Skill had also gained an interest in the topic and looked at the Fists weapon tags with IRTV to discover it held the tags "drop on pickup" & "delete on drop", which made granting it to players seemingly impossible as it would just be instantly deleted. He confirmed this by removing the flags and afterwards being able to drop and pick up the Fists.
Compiling known info
As the research for this new weapon type was getting increasingly complex, I created a forum post in TSG where we could compile the info and research it further. The compiled info about the Fists weapon at this point was:
Granting of the Fists
- The Fists are granted to a player during the initial spawn sequence as a 3rd weapon. Granting other weapons to the player during this sequence in a specific way allows you to keep the Fists after the sequence has ended (and gameplay starts).
- To retain the Fists, one must override the starting primary weapon of the player with a single-handed melee class weapon during the Team Intro sequence. These types of weapons include: Swords & the Sandwich.
- One must also give a new weapon to the player with the "Default" or "Swap Primary" addition method during the Team Intro sequence; any weapon will do.
The Weapon Type
- The Fists act like the Sandwich weapon, which is essentially an Oddball, that you can have as a secondary weapon so you won't drop it by switching weapon.
- The Fists can be held as a 3rd weapon in your inventory if a weapon is picked up while the Fists are in the secondary slot of your inventory (unequipped).
- If you are holding 3 weapons (one of them being the Fists), you cannot pick up any more weapons, except gameplay objects like Fusion Coils or a Skull.
Internal Weapon Flags
- The Fists weapon has the internal flags "drop on pickup" & "delete on drop" so even if the Weapon Type of the Fists are grabbed, any attempt to give it to a player will result in the Fists being dropped, leading to it being deleted.
Getting the Fists in practice
- To get the Fists on gameplay start, you need the minimal script shown in the image placed on your map and the player needs to spawn in at the start of the round so the intro animation plays for them.
- Works only in a Custom Game, not Forge.
Some more research was done and I released the script I compiled as a resource called tsg machinimaFists. Although it wasn't what we had fully hoped to end up with since the Fists could not be granted back to the player due to the internal flags in the weapon type, it was the best we could do at this point, and at least share our findings with the machinima community.
The Clone Object node
The research for the Fists weapon sat for three months until the release of the Banished Honor Update for Halo Infinite which saw the addition of a very powerful node called "Clone Object". In essence, this node can clone any object, including the Fists, which would finally make it possible to grant them to players on command.
Continuing the project
Now having a vision of the endgame for this project in sight, I set out to find out a consistent way to reference the Fists object so we could clone it later. I figured out that the Fists were always the last weapon to be added to a player's inventory during the intro animation sequence in any mode, right before Gameplay Start. The Fists would be deleted as gameplay began so they had to be pulled and cloned before that time.
I wrote a script that added all initial weapons of a player to a list and if the list size stayed the same for 0.10 seconds, the last weapon in the list would be the Fists, and it would be stored.
Improving the code
I would go on to improve this logic the next day following some critical examination of my code by Discord user coke_cane, but the core of the logic for storing the Fists weapon remains the same to this day.
The way I improved the code was by removing the unnecessary check of making sure the weapon list size was the same, instead just adding a long enough wait time and then storing the last weapon in the list. I then fleshed out the script with events that give the stored Fists object to the player by forcing the object in their inventory and published it for the community. The published prefabs and modes can be found with this filter link. I even made a silly mode called Knock Out that makes the Fists an integral part of the mode where you can kill players in one punch.
The breakdown for the final Fist weapon granting code is as follows:
- Each added weapon is tracked per player and added to an object list.
- The object list is checked after 1.80 seconds and if the Fists weapon hasn't been stored yet, execution continues.
- The last weapon in the object list is cloned and the clone is stored as the Fists weapon reference.
- This is because the last of the first weapons to be added to a player's inventory is always the Fists weapon.
- The Fists weapon object reference is used to grant a clone of the Fists to the player on command, such as On Gameplay Start and On Player Spawned.
The improved mode
Back to Snowball Fight: With all of my adjustments, here's what the core values of the mode would consist of:
- Must work on all maps with no setup
- Get kills by throwing Plasma grenades that blow up the enemies
- Direct hit or explosion blast
- Showcase new 3rd person view in a PvP-setting
- No "All weapons out of ammo" message on screen
- Cleaner visual experience overall
- Weapons disabled
- Shooting and meleeing disabled
- Vehicles disabled
- Equipment allowed
And since I've spent so much time justifying the changes I'd make to the mode, it'd be dumb of me not to let everyone try out the changes. You can find the mode following the button below and try it out in Halo Infinite for yourself!
Closing
The Snowball Fight gave me a good opportunity to dive into the fun research project that was the Fists weapon granting as well as experiment with improving a dev-made mode.
Another use of the Fists weapon I discovered is that you can have up to four weapons in your inventory by picking up the Fists at the right times and replacing them with other weapons. This was only left as a proof-of-concept though, as it required manual input from the player by picking up the Fists, so it wasn't pursued further as it couldn't be automated.