Sticky Stopper - Make stickies work with moving/dissapearing platforms and props
Long have we sought a way to make stickies work nicely with moving objects in TF2, and today I finally present one possible solution: The Sticky Stopper!
This is an entity setup consisting of a trigger, a filter, some relays, a point_push, and a prop_dynamic with a special parentname that will allow you to make:
The basic rundown is that you build your platforms out of prop_dynamics that are specifically set up to not allow stickies to stick, then use a special trigger called a trigger_vphysics_motion to freeze the stickies in place instead of them truly sticking. When you need them to unstick, you send some special inputs to the trigger_vphysics_motion, and give them a kick with a point_push.
- Moving objects that stickies only stick to when they are stopped
- Platforms that stickies can stick to while they exist and fall when they disappear
I encourage you to open up the .vmf for yourself and take a look at the I/O, there's a lot of specific things you need that are hard to communicate in writing! All necessary entities have documentation written in their comment fields.
- Sometimes the stickies on the disappearing floor setup will get stuck hanging in mid-air. It seems to happen most often if the stickies enter the trigger at a shallow angle. You can partially solve this by making the trigger larger, but it's not an ideal fix since then the stickies will be floating. This does not happen with moving platforms, as their motion seems to help get the stickies unstuck. If anyone can figure this out, let me know and I can update this with a fix!
- Stickies cannot be airblasted or knocked around with explosions in this setup. If we could find a way to detect stickies with a trigger I have a fix for it, but there is currently no known way to do so.
This solution makes use of some hardcoded shenanigans with parentnames that Valve did for Sawmill's sawblades. If a prop has a parentname of sawmovelinear01 or sawmovelinear02, stickies bounce off of it. An unlimited number of prop_dynamics can have this property by sharing a parent, but since there are only two names you can use, there are some limits. With this solution you can do one of the following:
It is possible to have more moving objects that act this way if you make them out of func_brushes instead of using prop_dynamics for the collision, but unfortunately Mad Milk, Jarate and other types of projectiles will bounce off. For that reason I have decided not to include examples of this.
- Have two different sets of moving props with these properties
- Have one set of moving props and unlimited stationary but toggle-able props with these properties
- Have an unlimited number of stationary but toggle-able props with these properties
Special thanks to @A Boojum Snark who partially solved this years ago in this post, @Pdan4 for suggesting trying to use a trigger_vphysics_motion in conjunction with a point_push, and @Another Bad Pun for pushing me to get it working with moving objects, clean up the logic, implement it into Megalo, and release it to the public.