Game Development level design TF2 Mapping

TF2 Mapping – Cow_Dustbowl, KOTC_Prefab


As a novice TF2 mapper, I spent entirely too long trying to come up with game modes that would never be conventionally popular. Perhaps the best example of this is my Cow_ and KOTC_ game modes.

Cow_ Game Mode

Cow_ is an attack/defend mode where the defending team is protecting several wooden cutouts of cows. It is possible for the level designer to determine how many cows are in each stage of a level and how many cows need to be destroyed before moving on to the next area/stage.

The cows can only be knocked over with melee weapons and the defending team can stand next to the cows to make the cows temporarily invincible (marked with a large red “cancel” or “do not enter” symbol).

There are countless problems with the mode; for instance, spies can very easily backstab the cows and the only way the defending team can prevent this is by having someone camp within the protection radius of the cow. As you can imagine, the mode lends itself to having spies on the attacking team and pyros on the defending team.

As a proof of concept, I set up two maps using the mode, cow_activate_a2 and cow_dustbowl. Activate will get its own page in the future and Dustbowl is the standard Dustbowl map with cows instead of control points.

KotC_ Game Mode

KotC stands for King of the Cow. The two teams compete to have control over the cow for the longest amount of time. The cow changes teams when it has successfully been hit by a melee attack without the other team being in the protection radius.

I created a template for this mode but never implemented it into any map.



Cow_Dustbowl on TF2Maps:

My Tumblr post about cow_dustbowl_a1:

Second Tumblr post about cow_dustbowl_a1:

A short video on Youtube of Cow_Dustbowl:

Apparently played as part of April Fools 2013 at TF2Maps

Doctor Who Writing

House in Piranesi and The Doctor’s Wife

Piranesi is a book by Susanna Clarke published in 2020. The Doctor’s Wife is an episode of Doctor Who by Neil Gaiman that aired in 2011. What do they have in common? House. In this essay, I will…

show that the House in Piranesi, a seemingly endless span of rooms containing marble statues and an ocean, is literally the same character as House in The Doctor’s Wife, Season 6, Episode 4 (DWS06E04).

Spoiler Warning: Note that this will contain spoilers for the Doctor Who episode and the book.

This essay assumes that you have read Piranesi more recently than you’ve seen the Doctor Who episode. I will provide a short summary of each and then will provide a play-by-play summary of the Doctor Who episode linking it back to portions of the book. Note that I’ll be skipping a lot of the drama of the TARDIS, which is where a lot of the charm of the episode comes from. After describing the similarities in the two pieces of work, I will “Bring It All Together” (skip there if you don’t want the recap) and refer back to the evidence.

The Doctor’s Wife is a lovely Doctor Who episode where the Doctor is tricked into visiting a pocket universe by a consciousness referred to as House. House is an entity that has tricked many Timelords in the past into visiting and has eaten their TARDISes. After the Doctor lands, the TARDIS’s matrix is removed and inserted into a person named Idris. House posses the shell of the TARDIS with Amy and Rory, the Doctor’s companions, inside while the Doctor works with Idris and gets a chance to speak verbally with the TARDIS matrix for the first time. Magic happens, House is extracted from the TARDIS and the TARDIS matrix is returned by the end of the episode.

Piranesi is an interesting book about Piranesi, a man who has been living in a space he calls House. House is full of marble statues and the ocean tides occasionally sweep through the Halls of the House. Piranesi treats House as something almost religious based on his written descriptions. Piranesi has lost his memory of our world and is visited by several other characters throughout his time in the House. One important figure is the Other (Valentine Ketterly), who is trying to figure out the mysteries of the House and also (unbeknownst to Piranesi at the beginning of the book) trapped Piranesi there in the first place. Laurence Arne-Sayles is the one who teaches Valentine Ketterly and other characters how to get to the House.

Open Systems

DWS06E04: In The Doctor’s Wife, we are introduced to several characters who are in a junk yard. The myriad of clothing they are wearing makes it difficult to tell what time period they might be in. Uncle, a human, is wearing a military outfit. Nephew, an Ood, is wearing a suit. And Aunty and Idris are wearing dresses. The state of their clothing is in disarray, like they have been holding onto this clothing for a while. The place is a junk yard because it’s an open system that allows object from the outside to enter, even though it’s concealed from the outside world.

Piranesi: Compare this to Piranesi, where the characters who make their way into the House are left with nothing except what is on their back. The House exists as a place where there are merely two materials: water and marble. Sea life, birds, humans, and clothing appears to have seeped into the House from Earth. Objects are allowed into the House, even though it’s concealed from the outside world.

Emptying The Mind

DWS06E04: Nephew places his hands over Idris’s ears and, per the script: “Nephew will drain your mind and your soul from your body. And leave your body empty…but soon you’ll have a new soul.” Note that Nephew’s eyes are a green color at this moment and Ood are canonically capable of powers that humans do not possess. This story does take place in the Doctor Who universe, after all.

Piranesi: Something similar happens in the House in Piranesi, albeit more slowly. The characters that enter the House slowly lose their memory and minds. It’s uncertain how long the process takes, and we never see someone properly “empty” in the House. The Other insists he cannot be there for more than an hour, but that seems like more of a precaution than an actual time limit.

A Pocket Universe

DWS06E04: The Doctor receives a “scrumptious little beauty” which is a Timelord Emergency Messaging System. The Doctor says “there are no more Timelords left in the universe, but the universe isn’t where we’re going…” The Doctor pulls some levers, burns up bits of the TARDIS, and they’re outside the universe and have unwittingly landed on House, the villain of the episode.

When Rory inquires about where they are, the Doctor provides a simple metaphor: “Imagine a great big soap bubble with one of those tiny little bubbles on the outside.” The implication that this universe is, as stated above, a pocket universe.

Piranesi: Compared to the method of travel in Piranesi, the Doctor must spend a lot of energy to get to where House is located. The characters in Piranesi are able to reach the House from anywhere on the planet if they’re skilled enough at returning to a childlike state of mind. They’re capable of crossing over by merely meditating. The Prophet suggests that ancient knowledge from the Earth could have seeped into the House over thousands of years and created the halls of the House, and it’s clear that the House is somewhere that could, in a loose sense, be described as a pocket world, if not universe. The House seems to have its own gravity, its own oceans, its own labyrinthine halls that are receptive to creatures from the Earth entering its spaces.

Now, compare this to Piranesi, but perhaps on a different scale. The Earth is the great big soap bubble, and the House is the tiny little bubble on the outside.

What is the House?

DWS06E04: “The House? What’s the House?”

“The House is all around you, my sweet. You are standing on him. This is the House. This world.”

The Doctor looks into a vent at a green light. “I see. This asteroid is sentient.”

“We walk on his back, breathe his air, eat his food, AND DO MY WILL.”

“So you’re like a sea urchin. Hard outer surface, that’s the planet we’re walking on, big squashy oogly thing inside.”

Note that as House is talking, the Ood is holding up his translation sphere, which glows green along with the Ood’s eyes. The implication here is that the House is both a physical object (asteriod) and a consciousness, but despite both of these, he still requires the Ood translation sphere to be capable of speech. House will talk later in the episode when he is in control of the TARDIS, but we know from other episodes that the TARDIS is capable of producing its own noises and has at least one speaker.

Uncle also states clearly that: “Too late. House is too clever.” The fact that House has tricked many Timelords into visiting so he can eat their TARDISes certainly implies a certain devious cleverness. Had the Doctor not been the last of the Timelords, it is entirely possible he would not have escaped from his situation.

Piranesi: It is difficult to get a good grasp of what exactly House is in the book, but it is clear that is what Piranesi calls the world around him. The ocean, the statues, and the halls, all of it is “House.” It is also clear from the book that being in this space has resulted in Piranesi losing bits and pieces of his memory; filled with something else. In the canon of the book, people who reside too long within the House are susceptible to losing their short term (and long term) memory. Piranesi, who has been in the House far longer than the other characters we see in the book, not only loses bits and pieces of his memory and connects this change to him becoming a different person:

“This, I suppose, is where I differ from both Matthew Rose Sorensen and Piranesi; I find I do not care greatly about clothes.”

“But I, who am not Piranesi – or at least not only him- realise that this wouldn’t go down too well.”

What if the House isn’t only a physical object, but a consciousness that presses its way into the inhabitants of the space?

The Consciousness

DWS06E04: During the episode, House is able to push his consciousness into the (now empty) TARDIS and talk to Amy and Rory and simultaneously take control of the TARDIS. House discusses his plans to leave the pocket universe to seek out additional TARDISes, which implies that the House isn’t bound to the physical asteroid from. It is capable of existing separately as a consciousness and transferring from one physical object to another.

Piranesi: The last words of the book are: “The Beauty of the House is immeasurable; its Kindness Infinite.” Throughout the book, Piranesi views the House and its halls as something akin to religion, nowhere more than this last sentence. It reads as if Piranesi views the House as a conscious being capable of kindness. At different points in the book, Piranesi alludes to the House “providing” for him, as though it has a mind of its own.

Corridors and Halls

DWS06E04: When House takes control of the TARDIS, he states “Corridors. I have corridors. So much to learn about my new home.” House learns to appreciate the architecture of the TARDIS, which is an improvement over a round asteroid junkyard covered in bits of old TARDISes.

Piranesi: The House in Piranesi takes the form of innumerable rooms containing marble statues.

The Powers of the House

DWS06E04: “Why shouldn’t I just kill you now?” “Because…killing us quickly wouldn’t be any fun. And you need fun, don’t you?” “You need to be entertained, and killing us quickly wouldn’t be entertaining.”

As Amy and Rory run though the TARDIS, House is able to make them hallucinate and experience time jumps and, potentially, time dilation. It’s unclear in the episode if this is a capability of House on its own or if it’s only possible because House is controlling the TARDIS. What is clear, is that House is capable of “messing with our heads” as Rory states.

Piranesi: Consider for a moment that characters losing their short term memory and James Ritter’s longing to return to the House aren’t latent properties of the House, but a power that the consciousness of the House is capable of. What if the “consciousness” of the House is capable of causing characters to lose their short and/or long term memory and causes the characters to want to return to the House (ie James Ritter, Raphael, Ketterly, Laurence Arne-Sayles, Piranesi)

A Servant

DWS06E04: After taking control of the TARDIS, Nephew is the only character that the House brings with him from the pocket universe. Aunty and Uncle collapse to the floor when House decides he’s done with them. This makes sense because the Ood appears to have more capabilities than Aunty and Uncle, as clearly shown earlier in the episode where Nephew removes the consciousness from Idris.

Piranesi: The House in the book can be said to have many servants. Each person who teaches someone else to get into the House is helping extend the House’s influence. Laurence Arne-Sayles helps Valentine Ketterly, James Ritter, and Sarah Raphael get into the House. Ketterley helps Matthew Rose Sorensen get into the House and Sorensen helps James Ritter into the House. It is unclear if Matthew Rose Sorensen will help anyone else into the House, but it is clear that multiple characters know how to make it into the House and that the knowledge can be spread.

Our Universe

DWS06E04: The House asks why he shouldn’t just kill the Doctor and his companions and the Doctor rebuts that he is the only hope for House to get out of the pocket universe into the Doctor’s universe. By deleting rooms, as recommended by the Doctor, House successfully makes it out of the pocket universe. With the rooms deleted, the Doctor, Idris, Amy, and Rory are transported back to the main TARDIS control room, Idris dies and the TARDIS matrix is released back into the TARDIS. The TARDIS matrix pushes House out of the TARDIS. House pleads “Stop this! Make her stop! Make her stop!” and is last heard of in the episode with a groan that fades away. It is unclear where exactly House went. It was clearly pushed from the TARDIS, but is House dead? Or has the consciousness merely been pushed out of the TARDIS and floating about into our universe?

Bringing It All Together

Assume for a moment that Doctor Who and Piranesi exist in the same universe and please continue reading.

The Doctor’s Wife has just ended. The Doctor, Amy, and Rory celebrate in the TARDIS, which has returned to its usual self after pushing House out. House, a disembodied consciousness, floats through space. But House is a clever entity; the Doctor said so himself. House focuses inward and makes plans for the future. He can feel that this place is vast and he will take his time.

As happens in so many Doctor Who stories, House gravitates to planet Earth and starts anew. House knows the best place to hide is in A Pocket Universe, and so either creates one or stumbles upon the location in Piranesi. This new pocket universe resembles the one we see in The Doctor’s Wife. Think of it as a great big soap bubble that is attached to the earth instead of attached to the outside of Our Universe. It’s an Open System, where objects and creatures can get in and out if they know how. At House’s old pocket universe, Time Lords, Ood, and other creatures crashed or landed and House gobbled them up. In this new place, birds, sea creatures, and (eventually) humans will stumble in. Most unwittingly, but a few will enter intentionally.

From the book, we know that several humans have stumbled in and died. It’s unclear how long ago each human stumbled into the space. We know from the story that people who spend a long time in the House slowly start to lose their short term memory, and, potentially their minds. It’s unclear from the book what is causing this, but what if the House itself was responsible for slowly Emptying the Mind of each human that entered the space? Without an Ood to do its bidding, House isn’t capable of speeding up the process as we saw with Nephew and Idris.

The architecture of the house does not resemble the junkyard asteroid that we saw in the Doctor Who episode for several reasons. First off, House is not relying on luring ships to land or crash land on the surface. Secondly, House has finally some experience with architecture from his stay in the TARDIS. It may be a bit of leap to say that House saw the corridors of the TARDIS and decided to make the Halls of the House (See Corridors and Halls heading above), so we will perform some speculation here. If House’s little bubble started as not much more than a drain hole on earth, it would have allowed salt water and small sea creatures to enter. With shells from the sea creatures and a bit of time, it would be possible for House to form limestone and marble rocks. Now, it’s unclear how long House has been around, but Laurence Arne-Sayles claims it has been around since ancient times. What if House had fashioned itself sets of corridors to trap unsuspecting people who made it inside? And what if one of the people who ended up inside of House were a marble sculptor from the Roman Empire?

It’s unclear what The Powers of the House are in the context of the book, but if we link House to the Doctor Who episode, it seems that the House has some ability to influence his world. If House is able to form marble from the materials he’s given, who is to say that House can’t form halls and statues? It seems a stretch to say that the seemingly infinite halls and statues of the house were formed by a human hand, so it makes more sense that House has the ability to fashion the world, albeit maybe a bit slower than The Consciousness would like. House also knows that The Doctor is out there, so he purposely takes things slower than he typically would.

This brings us back to an important question: What is the House? In the Doctor Who episode, it is a creature that tricks its prey and eats. It doesn’t really have plans for world dominance or anything of the sort. In Piranesi, it’s unclear what the House might want, but from the context of the book, it appears that the House is responsible for wiping the memory of Matthew Rose Sorensen.

After all is said and done, Piranesi/Matthew Rose Sorensen returns to human society with knowledge on how to help others get to the House. Will he enjoy his time with the rest of the humans or will he want to return to the House? We do know from the end of the book that he does help James Ritter return, so it isn’t a leap to assume that he might eventually help other people get to the House. Unwittingly, Piranesi has become A Servant to the House will perpetuate the cycle of guiding more and more people into its Halls.

In case you are not convinced that the House from The Doctor’s Wife is the same entity as the House in Piranesi, please take a moment to note that the Doctor Who episode was released in 2011, approximately 9 years before the release of Piranesi in 2020. Additionally, Susanna Clarke has made it apparent she is familiar with Doctor Who by referencing “‘Timey-Wimey: Steven Moffat, Blink and J.W. Dunne’s theories of Time’, Journal of Space, Time, and Everything, Volume 64: 42-68, University of Minnesota Press” on page 165 of the book.

House has found a new servant to lure humans into its halls and has a direct connection to the United Kingdom of all places. One day, the Doctor will uncover what House has been doing, and we’ll see just how clever the House really is.


The Art of GIF-making (Including “That’s a penis”)


I have made a number of GIFs that I’ve posted on tumblr. Most of them are very, very dated at the point in time. I’m going to link them (all?) on a separate page and try to categorize them a bit.

Most of these GIFs were developed for Tumblr from a period of 2010 to 2018(?) for use as reactions and some were requested from friends.

This blog post will discuss how I made these GIFs in the past and how I make them in the present. Note that the GIFs were made specifically for posting on tumblr so they meet the file size and dimensions required for tumblr through the years.

The Old Method:

After finding a video that you want to make a GIF of, the first step is to get the frames or screenshots. This used to be the most difficult part of GIF making. I previously used a program called ZScreen (this program has been depreciated since), to take rapid fire screenshots of clips of TV shows, movies, and YouTube videos. I would start the screenshot function and pick the approximate limits I wanted the gif to show, then take the screenshots. The “best” way to do this was to rapidly hit the “last region” screenshot hotkey as fast and as regularly as possible. Once this was complete, I’d have a folder with a bunch of still frames from the video, hopefully about 0.1 seconds apart.

Next, I used Photoscape, which helpfully released in 2008 to create the animated GIFs. Photoscape has an easy drag and drop interface and lets you pick the speed to display the frames at. Typically a duration of around 0.1 seconds per frame or 10 frames per second is what “looks” good. It all depends on the action. Faster movement requires more frames to look right.

Photoscape also has a convenient Batch Editor which lets you crop and add text, images, etc. to multiple images simultaneously without having to open each image in an image editor. This is mostly how I would get text on my GIFs, and I had some old favorite settings that I can’t remember anymore.

Once the frames are cropped and captioned they are put into the Animated GIF function of Photoscape. The last thing left (in the old days) was to pick a frame rate, which is more of a feel rather than actually trying to match the speed of the original media and the speed that the screenshots were taken at.

The next step is to confirm the size requirements for the website the GIF is being uploaded to. The size limits on tumblr varied through the years, so I found the easiest way to reduce the file size was to simply reduce the scale of the GIF. The more frames the GIF has, the smaller it’ll have to be. There’s a bit of compromise here, as it’s usually possible to delete a few “in-between” frames that aren’t necessary to capture the action that’s happening in the GIF. A lot of the final editing to fit down to size restrictions is just done by feel.

The New Method:

Kids these days are super spoiled because basic GIFs can now be made with a single program and just a few clicks. There’s not nearly as much fuss with getting the screenshots correct and now many online video players feature options to speed up or slow down media. Slowing down the media helps you get more frames easier.

Now-a-days I use ShareX, which is the latest version of ZScreen. ShareX has a lot of different options for capturing screenshots of your screen and comes with a handy little GIF feature that lets you pick a region of your screen to record. Simply hit the “Capture” then “Screen Recording (GIF)” buttons and highlight the region and the program will record a video of that region, cut frames every ~0.1 seconds, and compile the frames into an animated GIF. Unfortunately, since the output is already in GIF format, it’s not possible to use Photoscape’s Batch Editor to crop or add text.

I still use Photoscape to make final adjustments to the GIF following the same steps as above. If I really need to add text or get frames, I typically set up a hotkey in ShareX for “Last Region” and make sure that the program is set to repeat an action every 0.1 seconds. Then I just take an initial screenshot of a region and hold the “Last Region” key to get the frames needed at a decent rate. I personally find it works best to slow down media if possible so that you can double or triple the frames you’re getting.

That’s A Penis!

In 2011, I was at the height of my GIF making career (if it can be called that [it can’t]) and making many GIFs while watching the series How I Met Your Mother. In Season 2, Episode 6, there is a scene where Ted shows off a design for a building to a client and the client reacts with “That’s a penis!”

On January 30th, 2011, I created the GIF and expressed that it was “hard” to use. I later coordinated with a friend who made a post of some artwork that was very penis-looking so that I had an excuse to post the GIF, rather than wait for an opportunity that might never come. Unfortunately, that original use of the GIF is no more. The earliest version of the GIF that exists today is from February 3rd, 2011.

Here’s the original GIF in all its glory:

Note that this version is much more zoomed in than future versions because I had to work with the tumblr size limit.

The image became more popular after it was reposted on Soup and then Facebook in June, 2011. In August, 2011, was the first occasion where someone reversed the GIF using a GIF reversing website that unfortunately left a watermark on it. One of my friends sent the reversed (watermarked) GIF my way, so I obviously went and manually reversed the original version and posted that on tumblr.

Here’s the original reversed GIF in all its glory:

I also remade both in a larger size when tumblr changed GIF limits:

In 2020 when I started doing “research” for this WordPress, I noticed there was a “Know Your Meme” page for the GIF so I submitted my tumblr posts and finally claimed my small throne as the original creator of the That’s A Penis GIF.

And the rest, they say, is history.

[Link to the rest of my GIFs, organized, eventually]

Half-Life Musical

Half-Life Musical: 1 – “Song of the Black Mesa Transit System”

Return to Summary Page

[Gordon Freeman enters stage left. He stands for a moment in his scientist outfit and opens his mouth to speak.]

Barney [off stage]:
Gordon Freeman, is that you?
Aha! I knew it was.
The boys in blue are inviting you
to join us and get buzzed

Scientist [enter stage right]:
Gordon Freeman! There you are!
Looks like you’re early for once.
[whispered, to another scientist]
He always shows up late,
Can’t believe they hired this dunce

[Gordon shuts his mouth, vaguely dejected, and continues off stage right]

[Alarm blares]

Robotic Voice:
Gordon Freeman to Training Facility for Hazardous Environment Training

[Freeman enters stage left again and looks away from the audience. He checks his watch and taps his foot and a tram arrives from stage left.]

[Music builds as the tram gets closer. The doors open in front of Freeman and he steps in.]

[As the song continues, actors, props, etc. travel from stage right to stage left to give the illusion of movement]

Welcome to the Black Mesa Transit System
We’ve got facts and safety tips galore
Please keep your hands inside the vehicle
We’re traveling from the surface to the Reactor Core

Press the button to request an exit
And if you miss yours don’t be vexed
Our trams run every ten minutes
Through the entire complex

We’ll get you safely to your destination
There hasn’t been an injury in [Robotic Voice] TEN [return to normal voice] days
Here at BMTS that’s a personal best
So don’t forget to give the technicians your praise.

Now sit back, relax, and you’re on your way
It’s not the time to worry about your government pay
And don’t you worry about any delay
This is BMTS wishing you a fabulous day.

~~~ ~~~

Disclaimer: Half-Life and Black Mesa and the associated characters are owned and copyrighted by Valve Software

Half-Life Musical

Half-Life Musical: 0 – Summary Page

Author’s note: There are no plans to continue this project at this time.

On February 8, 2021, Marc Laidlaw (writer on the Half-Life series) posted a tweet about finding song titles for the non-existent “Half-Life Musical.” The song titles are in the image at the bottom of this post.

I have no plans on writing all of these songs, but that doesn’t mean that I won’t accidentally try.

The song titles are shown below. Please follow the song links for lyrics and stage direction for each song.

01 – Song of the Black Mesa Transit System
02 – Test Chamber Music
03 – Resonance Cascade
04 – Hearts and Headcrabs
05 – The Cavalry is After Me
06 – Quiet! The Beast Can Hear You!
07 – The Interminable Corridors of Love
08 – Barney’s Song
09 – Three Scientists in Peril Are We
10 – Lambda Lab
11 – Xen Again
12 – So You Think I’m a Big Baby, Do You?
13 – G-Man’s Etude

Feb 8th, 2021 10:26pm
List of Song Titles by Marc Laidlaw

Disclaimer: Half-Life and Black Mesa and the associated characters are owned and copyrighted by Valve Software

Game Development level design

Going up together? AKA btmap1_rc

Teamwork Required.

In the Days of Olde, Portal 2 did not have the Perpetual Testing Initiative, which means that making Portal 2 maps required one to go into Hammer, get things set up for Portal 2, and generally scour the “Thinking With Portals” forum for information.

While playing Portal 2, the level designer in me decided “time for me to make some puzzle-y maps!” And from there btmap1_rc was created. I decided my first released Portal 2 map before the workshop would be a co-op map because I have little to no self control when it comes to aiming high.

btmap1_rc was iterated a few times and tested entirely on my own using the Portal 2 splitscreen feature. It was also the first time I used “instances” in Hammer. Overall, the map wasn’t difficult to make or design, which is why I would go on to make a number of other Portal 2 maps. This is still the only co-op Portal 2 map that I’ve created and it was also the first; so it has a sweet spot in my brain and heart.

After the Perpetual Testing Initiative, I recreated the map as “Going up together?” I still have the original version of the map, but the Workshop version is much more accessible.

Let me know if you give the map a try! (Link to Steam Workshop below)

Puzzling things out.


Scooter on Youtube (Approved method of making it to the top level)
coopcrowd on Youtube (Slightly cheeky way of completing the map; they rated the map 8/10)
Djinndrache on Youtube (Also a valid solution)


Going up together? on Steam Portal 2 Workshop
btmap1_rc on Thinking With Portals

level design TF2 Mapping Zombie Fortress

Zombie Fortress – ZF_Industry


Zombie Fortress is a mod for Team Fortress 2 that’s been around since 2008 (Official 1.0.0 release on September 20, 2008). The earliest reference to “Zombie Fortress” I’ve found is from July 2008, where Lurk (also known as Sirot) posted about a Zombie class on the Penny-Arcade TF2 forums (honestly I’m not sure of the context).

Sirot would go on to iterate on the server mod in an effort to make the mode fun. There were some complaints from other forum members, but one issue with the mod was that we were running it on standard TF2 maps rather than a map made for Zombie Fortress. Sirot created a Blogspot website where he kept a nearly daily account of the project as it went forward.

Overview of one of the ZF_Industry variants.


On August 15, 2008, Sirot posted a map concept for ZF_Industry, pictured below.

Original map concept by Sirot

Sirot asked if anyone would make a map for the mode and I offered to try running with the rough concept above. I had some rough experience making maps for TFC and some playful maps for TF2 and figured I could make a halfway decent map that was at least partially designed with Zombie Fortress in mind.


I don’t know exactly how long I spent on zf_industry, but I can assure you it ended up being a much larger project than I anticipated. I created the Train Station, labeled “T” on the map above and set up a train to drive through the station. The Warehouse, labeled “W” on the map was placed in a lower area with multiple areas for the zombies to attack from. The Mines, labeled “M” on the map, was never created because I wasn’t confident in my abilities with displacements and never seriously tried making it.

I also created a parking garage structure to get between the zombie spawn and the Mines. Not entirely sure how I ended up with the parking garage.

ZF_Industry screenshots were posted on September 6, 2008 and the initial release candidate ZF_Industry_RC1 was released on GameBanana (Formerly RPGBanana/FPSBanana) on September 21, 2008.

ZF_Industry was the first and only map for Zombie Fortress for a little while there and I made a mistake by adding a capture point area over the entire site which meant the zombies could prevent the players from winning really easily. I remedied this by removing the control points in a ZF_Industry_CPLESS version of the map released on September 28, 2008.

1,996 downloads, 5,436 views


On September 19, 2010 (about two years after release) I found Zombie Fortress again and looked into the ZF_Industry map and found a few interesting things.

The Train God:
I stopped working on the map after the initial release, but a forum called (defunct as of 2020) continued playing my map and the Zombie Fortress game mode. Apparently the train on my map was called “The Train God” at some point and inspired a Steam Group with the name “The Order of the Train God” with 174 members.

There was also a poem on with a reference to the Train God.

The “Order of the Train God” Steam Group

Undead Garrison:
I also stumbled upon Gang Garrison 2, which is a demake of Team Fortress 2 in 2D. Apparently, some people had created a mod called “Undead Garrison” which was basically Zombie Fortress in the demake. I can’t vouch for how far the Undead Garrison mod went, but I do know that someone recreated ZF_Industry in 2D for the mod and that someone else looked at it for long enough to remind the original creator that there’s hills in the background of ZF_Industry.

Undead Garrison version of ZF_Industry without hills.
Undead Garrison version of ZF_Industry after the creator was reminded by someone else that there are supposed to be hills in the background.

On March 8, 2010, a remake of ZF_Industry called ZF_Industry_v2_1b2 was posted on RPGBanana/GameBanana by Kontata54. Someone (probably the uploader) decompiled my map and made some adjustments to it, including: a secret room that can explode, the map now takes place at night, and there’s additional details added throughout.

The creator of this remake did not contact me, but he at least did reference that I was the one who made the original in his post.

ZF_Industry_v2_1b2 (nighttime!)

Here’s a short video of the map “in a nutshell” showing the secret room and the explosion.

Short Story:
The remake of the map inspired someone to write a short horror story about it. The story features some screenshots from the map and references specific features of the map. It’s wild.

Image by USMValor from here

Statistics (Updated 12-10-2020):

Teamwork.TF is a website that aggregates and summarizes information collected from TF2 servers. The following is some fun facts about peak players and when the map was last seen as of December 2020.

ZF_Industry_RC1: 3 concurrent players on 26-Jun-2017, last seen on 2018-12-10 (happy anniversary!)
ZF_Industry_RC1_cpless: 30 concurrent players on 11-Jun-2017, last seen on 2020-12-09 (???)
ZF_Industry_RC1_cpless_MAG: 28 concurrent players on 04-Nov-2017, last seen on 2019-06-28 (I attest to not actually knowing where this came from and it apparently is only being played in Asia)
ZF_Industry_V2_1B2: 30 concurrent players on 10-May-2017, last seen on 2020-12-10 (???)
ZF_Industry_V2_1B4: 24 concurrent players on 06-May-2019, last seen on 2020-03-01

“Final” Words:

I released ZF_Industry back in 2008 and did some brief research to see how it was doing back in 2010. A lot of this information comes from the initial search. Zombie Fortress has grown in popularity, but TF2 as a whole has decreased in popularity over the last 12 years. I’m still amazed that anyone played a map I made and *waves arm at all of the above*.

It warms my heart to have released something that had a surprising impact on the TF2 community.

If you have any stories about Zombie Fortress or screenshots or YouTube videos that I haven’t found in my search, please let me know and I might add a link to it here. I’ve got archived copies of old websites and screenshots and videos living on my external hard drive to look back on in another 10 years.

Game Development Unreal Engine 4

UE4 – The Maskening


During the COVID-19 pandemic of 2020, Allen Pan created a launcher that launches masks onto people’s faces. Around this time, I was experimenting with Unreal Engine 4 and decided the scope of my project was too large.

A Discord server I’m on linked to the Reddit post and highlighted one of the comments:


It occurred to me that this would be a “quick” project to approximate in UE4, so I asked the team if it would be better as an FPS or third-person. Karva said “The only problem is that once this is all over the game would be out of date” and “third person so you can customize your mask.” I came up with the cringeworthy phrase: “maskrotransactions.”

I knew I wouldn’t get to any sort of mask customization, but I started up a new UE4 project with the Third Person Template and got to adding some basic functionality for a Tower Defense game.


Basic customer pathfinding/following

After getting basic pathfinding into the game, I created path through some rectangles that would eventually be shelves inside a store. I realized I’d need the AI to do a bit of crowd control, since there were potentially going to be a lot of customers so I used the “Detour Crowd AI Controller” which has some embedded functionality for avoiding other objects. A list of YouTube tutorials that came in handy are at the bottom of this post.

After getting AI pathfinding to work, I wanted to incorporate the mask launching. I followed a few tutorials related to adding a weapon to third person and found it was a bit more involved than expected (as is everything). I did a quick mask model using primitive objects in Asset Forge and threw it onto the default mannequin for the player model, then copied that onto the customer models.

I used Joe Wintergreen’s debug lines tutorial to emulate bullet trails so you could vaguely tell where you were shooting since there was no crosshair and the mask launcher was literally a cylinder in the mannequin’s arms.

When the mask is applied to a customer, I adjust the visibility on the mask and apply a blue hue to the customer’s material so it’s easier to tell at a distance.

Launching masks onto customers

I posted the gif on Twitter and Allen Pan (the guy who made the original video) commented on it. I am admittedly not an artist, so I went onto the UE4 Marketplace and found a few grocery store/convenience store looking assets and made some very minor edits.

My computer/UE4 has a weird error where I had to turn off screenspace reflections otherwise there were some pretty horrendous reflections off the pavement.

Screenspace reflections turned on is bad for me

“Final” Product:

The Maskening was certainly an interesting side project and ended up taking a lot more time than I thought it would. As of November 4, 2020, the map loads with 2 maskless customers who pick a random route through the store. There’s a trigger you can step on to spawn additional enemies and you’ve got 50 masks in your launcher. The words “Wave 1 of 10” display at the top and there’s no functionality there.

Maskening two rude customers that decided to come out without masks

Will I ever work on this again? Probably not! But it was fun and challenging in ways I wasn’t expecting.


Basic Pathfinding and Detour Crowd AI Controller:
UE4 Detour Crowd AI Controller Tutorial by Gustavo Reis
Detour Crowd AI Controller : Unreal Engine 4 Game Engine by Peter L. Newton
UE4 Quick Tutorial – Ai Waypoints by LemonFrost Games
Unreal Engine 4 Tutorial – AI – Part 4 Patrolling NPC by Ryan Laley Games
Unreal Engine 4 Tutorial – AI – Part 5 Patrolling NPC Continued by Ryan Laley Games

Firing and adding masks to customers:
UE4 tute: Drawing debug lines with constructionscript by Joe Wintergreen
UE4 Third Person Shooter Game Project SetUp Part 1 by SG Unreal Creation
UE4 TPS Game Add Weapon and Equip Weapon Part 3 by SG Unreal Creation
Animation Assets – #2 Unreal Engine 4 Animation Essentials Tutorial Series by DevSquad

UI Widgets:
UE4 / Unreal Engine 4 UMG / Widgets – #01 Custom UMG by Dev Enabled

Screenspace Reflections Issue:

Unreal Engine Forum Topic by BrokenTripod

level design Mapbase

Mapbase – “Fears and Phobias”


Map Labs (@MapLabsComps) held the Test Tube #11 Halloween Horror 3 Bone Room, mapping competition from October 11th-19th, 2020 with the themes of “Halloween Horror” and “One Room.”

I had not made anything with Hammer since 2016, so I went about setting up Mapbase and gave Hammer a spin. After a few days of poking at Hammer to confirm I still knew how to draw brushes, add textures, and had a vague understanding of entities and input/outputs, I started coming up with map ideas.


Initial Concept:
My initial concept for the competition was going to have the player in a large room that required the player to look at specific objects/entities to change the look of the room. Each corner of the room would have a puzzle that directed the player to stand in a specific space and look at a specific object. The areas between the corners of the room would be filled with strange objects that turned to follow the player. They would slowly make their way towards the player to give a sense of dread while trying to solve the “look at this object” puzzles.

The primary issue with this idea is that it requires me to come up with several puzzles, detail several areas, and there was no way for me to easily create an object that traveled towards the player. I found out that there was no way to travel towards the player after about a day and a half and went back to the drawing board.

Final Concept:

During a screening of Crimson Peak, I daydreamed about other concepts and finally did a quick search for common fears and phobias. Equipped with a list of 20 phobias, I evaluated which ones would theoretically be possible in Hammer with the limited resources of the HL2/HL2:Episodes assets.

The 10 phobias I was trying to incorporate into the map:

  • Hippopotomonstrosesquippedaliophobia (fear of long words)
  • Hemophobia (fear of blood)
  • Necrophobia (fear of dead things)
  • Trypophobia (fear of holes)
  • Astraphobia (fear of thunder and lightning)
  • Agoraphobia (fear of open spaces)
  • Nyctophobia (fear of darkness)
  • Claustrophobia (fear of tight/crowded spaces)
  • Acrophobia (fear of heights)
  • Thanatophobia (fear of death)

I planned on linking the concepts together in a large single room; guiding the player from one area/fear to the next via small text messages in the distance.

Final Product:

The “Fears and Phobias” map ended up spanning a total of 5 fears/phobias and was submitted to the MapLabs contest on October 18, 2020. According to Steam, it took me roughly 21 hours total, including setting up MapBase and getting my bearings in Hammer again. Some of this time is also me accidentally leaving Hammer open, so it’s likely closer to 10-12 hours spent actually working on the map. The link to play the map and the rest of the contest is/will be posted below. I recommend playing it before continuing to read, as I will be giving away everything.

The level starts with the camera zooming in on the crowbar and a brief title sequence with a vague flickering lighting. The intent is for the player to take the crowbar, but it’s technically optional. The purpose of the crowbar is for the player to feel like they will need to fight off some enemies (they won’t actually have to).

Title Sequence

After grabbing the crowbar, the player sees: “There’s no coming back here. / It’s time to face some fears. / What are you afraid of?” which is flare text to make the player think about what scares them and also let them know that they won’t be able to pick up the crowbar again.

The player at this point will notice that the only direction to go is down; a short fall where the landing area is shrouded in darkness. The player doesn’t have a flashlight or anything at this point, so it’s a bit of a leap of faith. The words “1. Nyctophobia – Fear of Darkness” appear on the screen right before the player steps over the edge.

Fear 1 – Nyctophobia

Once in the darkness, the player is met with two headcrabs who may or may not notice the player. This serves as a jump-scare and implies that the dark isn’t safe; the player will need the crowbar (but they won’t). The words “Come here.” display nearby.

Once the player reaches the words; they words hop to another part of the map. As the player wanders in almost complete darkness, they are met with groans from headcrab zombies and the ambient noises from Ravenholm.

After the player reaches the third “Come here.” message, the lights turn on and it’s revealed that the player is in a large warehouse and was in no danger the whole time. The player picks up an SMG and is greeted with an elevator.

When the player has gotten onto the elevator, the words “2. Hippopotomonstrosesquippedaliophobia” appear on the screen followed by a brief pause, then “A Fear of Long Words.” This is a brief joke; as the player is supposed to think the long word has something to do with elevators.

The elevator stops short of the platform it appears to be aiming for; sparks fly from the track. The words “(save recommended)” appear, because I wasn’t confident on how to set up auto-saving and the title/dark sequence is a bit long if you die a lot at the next part. As the player looks for a way to get up to the platform; they will notice a headcrab zombie torso on top of some explosive barrels. The hope is that they will try to shoot the explosive barrels.

Fear 2 – Hippopotomonstrosesquippedaliophobia

If the player shoots at the barrels or tries to step off the elevator, they are greeted with an invisible floor. I ended up using the “fog” texture and setting it to “not rendered” to get the effect I wanted of blocking bullets but also creating brief smoke clouds.

If the player walks onto this invisible floor, the words “3. Acrophobia – Fear of Heights” appears, as the player floats high above the rest of the level. The player navigates an invisible maze, three stories in the air, by firing a gun at the invisible floor. SMG ammo is provided at regular intervals so it’s more of a patience thing rather than guessing where to go and keeping track of ammo left. The words “Watch your step.” appear in the distance at a ventilation shaft as a brief joke and to give the player a goal to aim for.

When the player reaches the ventilation shaft and steps inside, the words “4. Claustrophobia – Fear of Tight Spaces” appear on the screen, followed by “(save recommended).” There’s technically no way for the player to actually die at the next part, so the save is meant to instill a feeling that the player could make an incorrect decision.

Fear 4 – Claustrophobia

As the player reaches the end of the shaft, they see an odd “caution” striped piece of metal on the left and two floating text messages on the right: “Option 1” and “Option 2” at branching shafts. Technically it doesn’t matter which the player chooses because the result is the same; giving the player the option is intended to imply that the player can get this “wrong” and die and have to start over.

Once the player makes a decision and starts down the shaft, the player is greeted with the words “Don’t look back now.” If they decide to turn back, they will notice the “caution” striped piece of metal has started moving towards them, following them down the shaft, which is obviously unpleasant.

If the player looks straight ahead and continues at their slow pace down the shaft, they may notice that the walls of the shaft are tapered in a way that seems like the walls are closing in. This effect may be too subtle but it caused a bunch of issues while I was making it. The effect is achieved by using player clips to constrain the player to the center of the screen and then using func_illusionary brushes that the player’s collision box can clip into. This lets me shrink the vent down to a space of about 16×16, even though the player can only fit in a space of 33×37.

As the player reaches a dead end in the shaft, the words “5. Thanatophobia – Fear of Death” appears. If they turn around, they should have at least 5 seconds or so to see the metal piece slowly approaching them to, presumably, crush them to death. When the metal piece gets close enough, a crushing sound plays and the screen goes black.

The words “The End” appear over the black screen and the player is done with the map.


Halloween Horror 3 was posted on October 30, 2020 and “Fears and Phobias” scored 19th place out of 23 entries (not including the bonus entries) with an average score of 25.667. So that means I was in the Top 20!



ModDB Link to Halloween Horror 3

level design TF2 Mapping

TF2 Mapping – MVM_Redbrier

MVM_Redbrier was initially posted about on August 26, 2012 and eventually was uploaded to as a Beta 3 version on January 29, 2016 and the file has been downloaded 232 times. The map has also been uploaded to the TF2 Workshop where it currently has 478 subscribers. These numbers were gathered on 2020-09-27.

A Japanese blog rated a number of custom TF2 maps and MVM_Redbrier was the hardest; with only a ~1/8.5 win-rate. I didn’t intend to make the map as difficult as it was; but I’m happy to see it’s not a 0% win-rate. According to the stats page on “Sushi Server,” MVM_Redbrier was played 2,001 times with 110 wins for a ~5% completion rate.

This map started as a remake of the Meet the Medic video but it quickly morphed into its own map which supports 2 tanks at the same time. The population file is a bit rough because I was mostly winging it and comparing health values between the different bots. The map started as mvm_hospital, then became mvm_ward around 2012-08-23 before switching to “Redbrier.”

The name “Redbrier” is derived from “The Greenbrier,” a luxury resort in West Virginia that opened in 1913. The resort is also home to “Project Greek Island,” which is a massive underground bunker. I previously looked up the floor plan and bunker plan to try to design the interior set piece, but it was easier to place a few of the large rocket props inside rather than try to emulate anything from screenshots of the actual location. I changed the word “Green” to “Red” since the RED team defends in TF2 and the rest is history.

The map features 2 separate locations for tanks and enemy drops, which means it’s easy for the enemy to get behind you in the forward area. Once inside the base, there are still two separate routes with a number of shortcuts for the players to take to transfer from one route to the other. The 6th wave is generally taken to be the hardest due to the fast giant scout bots. The 7th is more of a matter of DPS.

The map consists mostly of standard props, though I did create a custom texture of a pile of robot parts which can be seen in the 4th image in the gallery (many of these images courtesy, a Russian gaming community).

If you decide to play this map or upload a video to YouTube or elsewhere, please let me know!

TheReplayScout on YouTube created a playlist beating all 7 waves in 2014:
XoblinhasGamers on YouTube played the map with 10 people in 2013:

User “goosmurf” on the FacePunch forums says: “Probably my favourite of the community made maps so far. What I like about this is that the two bot spawns are reasonably far apart so it’s not too easy to choke them.”

This is the only MVM map that I released to the public. According to backups, there might be a B5 version, but I’ll look into that at a later date.

There’s apparently a “mvm_redbrier_b3_666_calamatic_r” version of the map which probably changes the population but I haven’t been able to download and test a copy of this.

Tumblr search for “Redbrier”