16 years, that’s how long some of us have
been playing TF2, which is older than many of the people that actually play this game. And over these 16 years, mapmaking as a whole
has experienced major innovation. But despite all of the incredible things we’re
able to do now in free-to-use software like Blender and Unreal Engine, TF2’s Source
Engine has stayed strong. 16 years later, and its mappers are still
using the same engine to create maps, releasing banger after banger each season. And this time around, thanks to the implementation
of VScript, we got many more. But to my surprise, this map called Corruption
uses regular old Source logic. It’s a Payload map created by MegapiemanPHD,
Billo, erk, Pancakebro, and Rhamkin, and it was accepted into the 2023 Scream Fortress
update. Its underworld features something never before
seen in a TF2 map: procedural generation. I’ve always admired the creativity of mappers
with how they’ve handled the underworld in their Halloween maps. Los Muertos’ is themed after Day of the
Dead, Laughter holds these carnival-themed rooms, Cursed Cove has this underwater lagoon
with a sunken ship, and Farmageddon– the inside of a mad pumpkin. But Corruption does something that I never
thought was possible. Its underworld is randomly generated every
time you hear a bell ring and see these portals open up. And on the other side is a series of corridors
and staircases in a haunted asylum. Find your way to the exit portal, and you’re
thrown back into the map out of these hanging cages, rewarded with several seconds of uber,
speed, and crits. The map is a reskin of its non-Halloween counterpart
made by Billo called Eruption, which is a volcanic lair centered on a tropical island. When the time came to make a Halloween map,
he brought in some mappers to transform it into this haunted asylum. Now I’m gonna be honest, the reason why
I decided to review this map is because of the underworld, but after looking around the
overworld, there’s some pretty cool stuff there too that I want to talk about first. Usually, Halloween maps in TF2 have a bunch
of pumpkins, spells, and lava. And while you can find some pumpkin bombs
scattered throughout the map, there aren’t that many, nor are there any spellbooks or
lava. This ultimately makes Corruption feel more
like a regular map and less like a Halloween spin-off, not to bash the reskins of maps
that have a million pumpkin bombs, spellbooks, and lava, but it’s cool to see something
different. Besides the underworld, what I like the most
about this map is its details, especially those just outside of the playable space. Right behind Blu’s first spawn, you can
see a washed-up rowboat and a couple of barrels, meaning some unfortunate soul got trapped
on this island. And I think I know where… If you look above the spawn on this hill,
you’ll see this little outhouse, and on the inside… yeah… he must’ve had some
pretty bad diarrhea... Another great case of attention to detail
is inside of these two cells. The one on the right was made to accommodate
more than just your regular patient, made apparent by this tiny piece of cheese, which
is actually part of this mousetrap model, but the mapper cleverly hid that part underground
and manually adjusted the lighting origin of the prop to keep it from turning black
from this nodraw brush. In the other cell is a giant hole, both in
the ground and the wall presumably dug over time by a patient with this shovel who used
their wooden bunk to keep it hidden. I wonder how he got the shovel, but more importantly,
I wonder where he is now… I love these kinds of details because they
tell stories. It’s one thing to see an area and be like
“Oh, that’s a graveyard, cool,” but it’s another thing to see a place where
you know something disturbingly specific went down, and that was fully embraced in the creation
of this map. So much so that I speculate whether this video
is gonna get demonetized. But, not all details on the map are disturbing… Take the rain. Corruption is the only Halloween map that
has it. And having worked with snow in the past, I
can understand why. Instead of having a universal setting for
weather like rain and snow, you have to use info_particle_system entities. In Corruption, these entities are configured
to emit this env_rain_512 one and are used to cover the area of a circle 512 units in
diameter, meaning you have to place many of them spaced apart throughout the map. And for those narrow parts where the map transitions
from outdoors to indoors, the mappers used a special type of rain particle that collides
with the world, that way the rain doesn’t fall through the ceilings. You can also find a cool little detail related
to the rain inside the caves on the stalactites. Some of them drip water with this little splash
animation at the bottom. This particular one even has this stain overlay
where the water drips, which is extremely subtle in-game, but amazing attention to detail. erk told me that this map received a lot of
inspiration from outside sources, including Outlast, One Flew Over the Cuckoo’s Nest,
and Shutter Island. The Outlast reference is rather obvious, but
something a little more subtle is this lighthouse. It might look familiar, and that’s because
it’s the same one found on cp_sunshine. And, while my uncultured self had no idea
what “Shutter Island” was, it turns out that the actual setting and theme of Corruption
is almost identical to that of the film, whose setting is described as “a fortress-like
insane asylum located on a remote, windswept island.” Some could argue that this type of inspiration
takes away from the originality of a map, but to me, it adds a sense of character and
realism that makes the map feel more immersive with a hint of familiarity. There’s one more thing I want to go over
before moving on to the underworld. Next to the last point is this elevator. And while it doesn’t work or operate like
the one you see on Sanitarium, one of the zombie infection maps, you can use it to quickly
ascend to the upper floor, thanks to this trigger_catapult entity. However, if you’re afraid of elevators,
like I once was, there’s no need to worry. You can use the stairs instead. Okay, let’s finally dive into the maze,
which was mostly created by Pancakebro. After going through the portals, Blu and Red
are teleported into this starting area through these info_teleport_destination entities and
have to escape through this randomly generated series of rooms, one of which holds the portal
back to the overworld. In Hammer, this is what the area looks like. On the left is the portal, and on the right
are all of the different rooms that can generate. Despite being made mostly out of brushes,
each of these rooms is its own separate model with all of the textures and lighting baked
in. This makes it easier to set up the logic behind
these rooms, which keeps things nice and tidy. This also allows the rooms to spawn at any
orientation while maintaining the proper shading. But looking at this area in Hammer, there’s
one thing that might confuse you. Why are there a bunch of lights scattered
throughout the area? Well, since this entire region is boxed in
by these black brushes as opposed to skyboxes, there’s no light from the light_environment
entity that can make it in, so in order to prevent the entities such as the props from
going black, there needs to be a relatively universal source of light that doesn’t compromise
the baked lighting of the generated rooms. These keep the rooms properly shaded and light
up the players and models. While traditionally used to reduce the amount
of detail on-screen to increase performance, this fog enhances the feeling of being trapped
and raises anxiety, almost as if you were being chased. In fact, there were actually plans to implement
a creature of some sort that’d chase you through the maze, but this idea was scrapped
due to uncertainty about how the creature should roam around, as well as deadline constraints. So, now we know why the maze looks the way
it does, but how does it generate? This is a little more complicated, but thankfully,
Pancakebro gave me this simple 3-step breakdown, which I’ll add on to. Step 1: Spawn a random node with 3 branches
outside of spawn. There are three such rooms, each with a point_template
entity that have an equal chance of getting matched up with this entity maker in the spawn
room. This selection is, of course, random, so you’ll
only find one of these rooms per level. This all starts with this logic_relay called
“maze_start,” which uses the PickRandom input on this logic_case entity to pick one
of three cases, or rooms, to teleport to this env_entity_maker. Step 2 is generating the other rooms attached
to this one. In this step, two of the three branches, or
exits, are randomly assigned two of three different dead ends, and the last branch,
one of these three staircases, or connectors. This selection process also uses the same
PickRandom and Case setup as the first room, but instead of using the entity maker at the
start, it uses the entity makers located at the end of the branches. This takes us to Step 3, which just repeats
the whole process starting from the staircase, but this time, ending with a portal at the
top of the newly generated staircase that takes you back to the overworld. If there was no portal, this type of generation
could go on forever, which would look something like this, but the whole setup is limited
to two node rooms, or floors. It’s actually a lot simpler than I initially
thought, but the brilliance of it all is the execution. Pancakebro and the rest of the team not only
brought this idea to fruition but did so in a manner consistent with the map’s setting. These scenes that tell stories, the immersive
attention to detail, and the genius that distinguishes this map’s underworld from all others make
what is in my opinion, a truly original TF2 Halloween Map, 16 years after release. And with that, I applaud their work and commend
Valve for selecting this map to be a part of the Scream Fortress pool. Thank you for watching, this is LED, switching
off. While running through the maze, you’ll notice
this thick black fog you don’t see on the main map. This comes from this “env_fog_controller”
entity, whose fog color is set to black with a very small range.