Discussion in 'Mapping and Modeling' started by LordM, May 1, 2020.

Thread Status:
Not open for further replies.
  1. LordM

    LordM Mildly Menacing Medic

    Updated by Bottiger

    Hello. I am LordM, currently an admin and also mapper for the ZOMBIE ESCAPE US server. A lot of players have asked me how to go about making their own ZE maps, not sure what they should do or how to even start.

    I am going to start off this tutorial with a section for beginners to not just ZE map making, but mapping altogether.


    The software used to create maps for Team Fortress 2 is called Hammer Editor. The default version of this software released by Valve is deep within your file directories.

    Go to C:\Program Files (x86)\Steam\steamapps\common\Team Fortress 2\bin in your PC, and scroll through the bin folder until you see a file called hammer.exe.

    This is the default Hammer, which in order to use it you need to create a shortcut of it, and drag that shortcut to your Desktop. Open the shortcut, and hammer will open on your computer.

    I would definitely not recommend using this version of hammer released by Valve at all, and instead would advise you to download this:

    Installation instructions:
    *Move the contents of the /bin/ folder to /Team Fortress 2/bin/, and the shader folder to /Team Fortress 2/tf/, or merge the .zip's contents with the /Team Fortress 2/ folder
    **Your paths should be /Team Fortress 2/tf/shaders/, and /Team Fortress 2/bin/hammer_slammin.exe after this
    *Create a shortcut for hammer_slammin.exe, enter the shortcut's properties and edit the Target box to have <existing parameter> -game <directory your hl2.exe is in>. An example of what this will look like afterwards is "C:\Program Files (x86)\Steam\steamapps\common\Team Fortress 2\bin\hammer_slammin.exe" -game "C:\Program Files (x86)\Steam\steamapps\common\Team Fortress 2". Do the same with your steam shortcut's properties if launching from there
    *Launch hammer from this shortcut

    When you download Slammin Hammer, open it the same way you opened normal Hammer, create a shortcut and drag it to your desktop.

    From this point on, if you have hammer open and don't know what you are doing at all with the software, you should look up tutorials on how to use hammer, and find websites or videos that help you learn how to use it.

    UEAKCrash has made a great series of videos that teach you the basics about hammer.

    Now, for people who know how to use Hammer, and have made their own TF2 maps before, I will teach you about the basic structure of maps in ZE, how to use commands that the server has in your map, and how to make your ZE map the best it can be.


    In this tutorial I am mainly going to be using Jungle Lab, a public map currently on the server, for reference.
    You can download Jungle Lab here:

    Doors in Zombie Escape generally use trigger entities to activate a door, and open it after a certain amount of time.

    Trigger once is the most popular trigger used, for the simple fact that it deletes itself after being triggered, and that it is very easy to activate, you just walk into it and it activates. Some doors also use func_button, for a more realistic way of having to press a button in order to open a door rather than just walking up towards it.

    Here is an example of how trigger_once is used in Jungle Lab to open the Biodome doors.



    What is going on here is that when you walk up to the button in the first picture, the trigger filters the player using the filter_activator_tfteam entity which in this instance is named filter_team_blu. If the player is on the blu team, they will activate the trigger_once entity. In the object properties tab, the OnStartTouch output is sent out when the player first starts touching the trigger entity. It calls the server, which in hammer is referenced with the point_servercommand entity, to display a message in chat using the say command. Our server has a different command that is used in more recently updated maps, called ze_map_say. It works similarly to the say command but with extra input. Then after it calls the server, it sends all of its other outputs through the I/O chain. What is most important here though, is the delay parameter. That is how doors open after a given amount of time. If you look at all the outputs that have the delay parameter equal to 20 seconds, those are all the outputs that get fired after 20 seconds, including the input sent to door_biodome, which opens the door and lets the survivors proceed.


    How each team wins a round is determined by the game_round_win entities. You need 2 of them in each map, which you should probably know if you have made TF2 Maps before. However, in Zombie Escape, the game_round_win entity which represents the RED team, aka the zombies, should only be activated when the clock runs out.


    Here is the object properties outputs tab of the team_round_timer entity used on Jungle Lab.


    The OnFinished output sends a RoundWin input to the round_win_red entity, which is the game_round_win entity for red team. You need this in every single ZE map you make, because it is the only other way for zombies to win besides killing all of the survivors.


    This is something every map needs, but not every map uses or has enough of. Force ahead teleports are necessary to ensure progression throughout the map, instead of allowing players to stay behind and camp, and delay the round while their team continues. In order to make these, you need to use the trigger_teleport brush entity, and the info_teleport_destination entity.

    I am going to use an example from Skyrim, a very popular map on ZE and one that I brought to the server.


    This is the trigger_teleport used to force players ahead in the first part of Whiterun.

    These teleports need to start out disabled, obviously to prevent players from being teleported when they are not supposed to be teleported.


    The first whiterun forceahead teleport only gets activated 80 seconds after the gate into whiterun is destroyed by the bomb. I use the trigger_once entity, set the delay to 80 seconds for this OnStartTouch output, and enable the teleport.


    Here is the info_teleport_destination entity which the Whiterun forceahead has its destination set to. When the teleport is activated, and players get teleported by it, they end up here. Ideally, you should try to make your teleports activate not too early, to give players enough time to retreat from the area, but not too long, or else a significant amount of players can be far behind, which makes the experience less fun and exciting.


    Right now, here are all the commands the server has on it.

    ze_map_say {message}

    • It sends a message to the chat, so that players can read it and get info/instructions through the chat.
    • It is similar to the say command, but has extra features.
    • COMMAS ARE NOT ALLOWED. Anything after the comma disappears. I am not sure if this can be fixed by escaping or quoting.
    • You can change the color of the text using brackets [color]
    • EX: ze_map_say {olive}[MAP INFO]{default} xyzmessage
    • ANOTHER EXAMPLE: ze_map_say {olive}[MAP INFO]{default} Holdout infront of Dragonsreach until the doors are blown open!
    Here is an example of it being used in skyrim:


    This is an OnStartTouch output from a trigger_once entity, which is sent to the point_servercommand entity in skyrim, named, server. You can then create a Command input, from which you can send commands to the server. In this instance, the delay is zero because it is a message that is sent as soon as the trigger_once is activated, and i have the Fire Once Only option set to yes, to prevent messages from being spammed in the chat.

    ze_map_timer {seconds}
    • It creates a countdown on the hud that is at the top of players screens.
    • The countdown text says "Defend for X" seconds.
    • It disappears when it reaches 0.
    • You can run this command even if the previous timer hasn't reached 0 yet.
    • Example: ze_map_timer 30 this will set a countdown of 30 seconds.
    • Example: ze_map_timer 0 this will hide the countdown.
    ze_map_boss_hp_entity_name {name of base_boss or func_breakable}
    • Display a TF2 boss HP bar on the screen. Will disappear when hp is down to 0.
    • Example: ze_map_boss_hp_entity_name alduin1_hp
    ze_map_hook_gameui {gameuientityname} {cooldowntime} {activationkey} {teamnum}
    • This command hooks any and all Game_UI entities currently in the map with the given name.
    • Game_UI entities are mainly used in ZE to keep track of button presses.
    • You should call this command right after you spawn any Game_UI entities you want hooked in your map.
    • In skyrim, the Game_UI entity is used to make the helmet powerup, which grants you the power of Dovahkiin and lets you activate the powerup with the RELOAD button.
    • Currently, Game_UI entities have a limited amount of button presses it can detect.
    • ze_map_hook_gameui lets you hook a game_ui, and includes support for:
    • Item cooldown time(-1.0 = no cooldown, must be a float)
    • Item activation key( 1= reload, 2 = special attack, 3 = use)
    • Item team(-1 = all teams, 1 = spectator, 2 = red, 3 = blue)

    • The server will detect when a player is using the entity and if the player presses a button that corresponds with the entity's name.
    • When a button press is detected for UIs that detect reload, it will send a FireUser1 input to that UI.
    • When a button press is detected for UIs that detect special attack (M3), it will send a FireUser2 input to that UI.
    • When a button press is detected for UIs that detect USE, it will send a FireUser3 input to that UI.
    • When a UI's cooldown ends it will send FireUser4 input to the UI.
    • EX: ze_map_hook_gameui item_holder_5 -1.0 reload 3 (this is the name of the helmet's game_ui entity.)
    ze_map_add_gameui_cd {gameuientityname} {cooldowntime}
    • adds time to the gameui's cooldown
    • EX: ze_map_add_gameui_cd helmet_ui 5.0
    ze_map_subtract_gameui_cd {gameuientityname} {cooldowntime}
    • subtracts time from the gameui's cooldown
    • EX: ze_map_subtract_gameui_cd helmet_ui 7.0
    ze_map_end_gameui_cd {gameuientityname}
    • ends the gameui's cooldown so it can be used again
    • EX: ze_map_end_gameui_cd helmet_ui
    Fancy Ladders

    func_ladder does not work on TF2, so here is a way to make a decent replacement. Make a func_brush, with the name "zeladder" to make it a climbable ladder.

    To climb these ladders, you just look up and press W. To climb down, release all keys, or look down and press W.

    If you want to make ladders only climbable by a certain team, you need to include "survivors" or "zombies" in their name.

    The entities that you plan to make climbable ladders have to be solid entities, or be solid when they are meant to be used.

    Here is a working example.



    If you spawn your ladder in the middle of the round you will need to run the command ze_map_hook_ladders right after it is created to hook it.


    The server's plugin allows you to mark certain entities that you want to make equippable for the player by pressing E, aka calling for medic. In order to do this, you need to name a specific entity "ze_carry". You are also able to filter out survivors or zombies from picking it up by adding "survivors" or "zombies" in the name of the ze_carry entity. You should make ze_carry entities only be either prop_physics_multiplayer, prop_physics, func_physbox, or func_physbox_multiplayer. This is because these physics entities are ideal for dealing with being constantly picked up, dropped, and moved around the map. You can also reliably parent entities to physics entities. All of your triggers, particles, or any other entities you use in your custom pickup must be parented to its ze_carry entity.

    In Skyrim, all of the powerups are ze_carry entities.


    Here is the Elder Scrolls item, which has it's carry entity named ze_carry_survivors_elderscrolls. Ze_carry means it can be picked up, and survivors means that it is only picked up by the BLU team. This prop_physics has its alpha set to 0, so you don't see the crate model in game, but the crate model is essentially the elder scrolls pickup-box, it defines the elder scrolls pickup area.


    These are the flags I have for the elder scroll's carry entity. You should always have start asleep, don't take physics damage, and the debris flag checked. The prevent pickup flag does not apply to TF2, it only applies to the gravity gun in GMOD. There is no need to check or uncheck that flag.

    For now, those are the main things that you must know in order to make maps for the Zombie Escape gamemode.

    For porting maps from CS:S or CS:GO

    You will need a trigger multiple like this to make players smaller since players are smaller in CS.

    "OnTrigger" "!activator,SetModelScale,0.74,0,-1"

    Our plugin will automatically detect the word "SetModelScale" and automatically resize players, so it doesn't even need to cover the whole map.
    Last edited by a moderator: Jul 22, 2020
Thread Status:
Not open for further replies.
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice