For April Fools Day 2016, I and a group of other content creators released a map called af_rapture which, while not particularly funny in the end, was quite a technical undertaking. After some interest, I decided I would make a thread explaining some of the unique logic in the map as well as its creation. The Meteors The original idea for the map was purely the original mid impact. Players would think the map was a koth, flock to the point and immediately be struck from orbit by a meteor. This idea changed almost immediately since while there was almost certainly a punchline there, there was nothing after it. Over time the idea was expanded to a constant meteor shower and then to that being part of the game in a variant of player destruction, instead of being a simple koth. During this evolution the idea lost a lot of its humor but I was committed to making a map that was bombarded by meteors. Once the idea was solidified I broke it up into individual requirements, so that I could figure out a timeline to work to, and find collaborators to work with. Exactol was the particle guy pretty much from the start, after he showed off his meteor shower particles. As such, the first assets completed for the map were the indicator, tail and impact particles. The meteors themselves are a stack of entities in a point_template. When the env_entity_maker is triggered it spawns everything in the point_template at once, and the logic_relay immediately starts telling the entities what to do. Play the indicator and tail particles Detonate a tf_bomb_generic with the impact particle on a delay (manually defined to sync with the tail) Play audio of impact (because the tf_bomb_generic doesn't let you change volume) Shake the screen Create the pickup Clean up the leftover entities so we don't stack useless entities and kill TF2 Kill the pickup if it hasn't been picked up after 30 seconds Surprisingly most of this worked almost immediately, the problematic entity was the pickup. Player Destruction logic let me spawn flags but they had 0 value, and only flags dropped by dead players had any value. This was doubly a problem because the meteors were supposed to be the only scoring method, if you could get points from killing players but not from collecting meteors then the gamemode was never going to work. On the bright side, however, Valve's Jill was hanging around in the chat a lot at the time, and a quick chat and an email later, and Player Destruction entities were updated to make this gamemode possible. Now you can tell players to drop no bonus flags, and give scores to manually spawned flags. To make the meteors feel like part of a larger event, theres a bunch of meteors in the skybox that fly overhead without landing. Making it feel like there's something greater going on that the map is just a small part of aids suspension of disbelief and provides a context to an otherwise out-there situation. In future the meteor damage and radius will be nerfed, as players complained of being unable to escape them sometimes. First Impact The original idea of the point being trashed by a meteor impact made it into the final map as the moment gameplay starts. Instead of unlocking the point, the point is hit by a meteor, destroying the building its in, opening up the capture zone and signaling the start of the meteor shower. This is one of the simpler parts of the map, half of the building is just a brush that can be killed alongside some particles and explosions. In a future version this could be replaced with a physics-animated prop for a realistic impact, however this feature is more likely to be scrapped in future versions as it isn't fun for the new players who get caught in it, and it isn't obvious what just happened from inside. In my opinion, while it was the original idea the map was built around, it is one of the weakest elements of the map. Random Spawning The next unique mechanic required for the gamemode was randomly spawning the meteors in. If the meteors were predictable they could easily be avoided to prevent damage, and camped for easy pickups. I had to come up with a way to spawn the meteors at a vast number of locations to make nowhere open safe, with variation enough to make it unpredictable. My solution to this is possibly the part of Rapture I'm most proud of, and also the part I think people will find most useful: Throughout the map are these skip brushes indicating areas of the map designated as "impact zones". The skip brushes are there purely for orientation and measurements, as its the brushes and entity in the corner down there that do the real work. There are two func_doors there, one an X axis and one a Y. They move the distances I read off the skip brush, with speeds set to ensure they are neither in sync nor in any oft-repeated pattern. Parented to them is an env_entity_maker which will spawn the meteor stack wherever it is at the moment it gets triggered. These impact areas are zoned into 3 sections; the spawn yard, the transitionary area between spawn and mid, and mid itself. These are of course repeated on the opposite side of the map. Meteors spawn on a timer which speeds up and slows down for waves, with a set of logic_cases first picking a side, then a zone (weighted toward mid), then a specific impact area. The Announcer I knew I was going to need a custom announcer from the moment I decided on doing a custom gamemode, and after the memetic status of the WillFromAfar announcer in pd_watergate, I knew it needed to be a real person. After making a publiccall for voice actors, originally intending to just get someone from TF2Maps, UEAKCrash put me in contact with his friend, UEAKCarnage (the voice of Crash's Trainsawlaser and Tribute). To determine what lines the gamemode needed, I broke it down into everything that needed explaining to players. Announcements explaining concepts as they were introduced, and nags guiding players to complete the objective without seeming like a tutorial. Introduction (both Lore and Gameplay, explains goal and context) First Impact (Lore, reiterates goal and makes light of something ocurring in the game, makes announcer feel involved in the situation) New wave announcement (lets players know meteor frequency is picking up, designates the current goal as collecting) End wave announcement (lets players know meteor frequency is letting up, designates the current goal as depositing) Friendly capture announcement (lets players know their team are capping, reminds them to defend) Enemy capture announcement (lets players know the enemy are capping, reminds them to attack) Finale reaction (Lore, announces the end of the game and provides some black humour) All lines have variants to ensure they don't get repetitive and I gave Carnage free reign to ensure they were humourous and interesting. Initially players found the radio filter obscured the audio too much, but when we removed it people missed it. Hopefully we'll find the happy medium some day. The Gamemode Being a custom gamemode, which I tentatively call "collect" (it will likely use a co_ prefix in later versions), Rapture required logic telling it what to do every step of the way. I was able to use the Player Destruction gamerules and entities, but scouring the map for resources to capture instead of killing other players for them made for a gamemode that needed constant input to function. This pile of entities are responsible for almost everything that happens in the game. A lot of tasks are broken up into seperate logic_relays, the way a programmer puts things into functions even if they aren't called multiple times, just to make things easier to edit. I'm not really sure what to say about this, it's a bunch of logic_relays triggering and reacting to each other, making the meteors spawn, the announcer talk, and generally everything work. The Finale To tie the whole apocalypse thing together, no matter which team wins, everyone dies at the end as an extinction-level meteor flies overhead and crashes in the skybox, wiping out all life on earth. Players are killed, the map whites out, and when the noise quiets down, the victory/loss music plays. The finale itself is fairly simple but also results in the longest I/O in the map as it cancels gamemode stuff, plays appropriate lines and triggers appropriate sequences. In Conclusion I learnt a lot from making this but primarily, logic_cases and env_entity_makers are incredible for creating logic-heavy maps, and there's a workaround for almost anything you don't think you can do. Plus it's always worth talking to valve about things that are currently not possible even with logic. I hope people find this as interesting to read as I found it to work on.