Not open for further replies.


This is a reference guide for Skial specific features for Zombie Escape.

If you are new to mapping please refer to this guide instead.

Available point_servercommands

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.
  • Colors can be found here
  • Example: ze_map_say {olive}[MAP INFO]{default} xyzmessage
  • Example: ze_map_say {pink}Hello {green}there {default} blah
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 no matter how many seconds were left.
  • Example: ze_map_timer 0 this will hide the countdown.
  • Add the option to extend the map again. Default extension count for every map is currently 1. Every time you run this command, it will go up by 1 so don't keep using this command.
  • Please don't use this unless you are absolutely sure your map takes more than 1 hour to clear.
  • Example: sm_extend_map_add_extension
ze_map_boss_bar {name of something that has HP like base_boss or func_breakable or math_counter}
  • Display a TF2 boss HP bar on the screen. Will disappear when hp is down to 0.
  • You will need to run this command again if the bar hits 0 and you added hp to the boss later.
  • Also makes grenades explode when it comes in contact with the first entity. Normally grenades bounce off everything except a base_boss.
  • ONLY 1 bar can show at a time. Running this command again will switch the bar to the newest boss.
  • To manually hide the bar, use ze_map_boss_bar without a name.
  • This can't be used on a template unless you use the preserve names flag (because templates add &randomnumber on the name).
  • Example: ze_map_boss_bar boss_breakable1
ze_map_boss_connect {name of prop_dynamic func_physbox func_physbox_multiplayer func_breakable maybe more} {name of math_counter} {optional damage multiplier}
  • Connects something that takes damage and subtracts that damage from a math_counter
  • This is used for many bosses that use OnHealthChanged to subtract 1 from the boss. If you replace this system, be sure to delete the OnHealthChanged output and scale the HP of the boss up.
  • Also makes grenades explode when it comes in contact with the first entity. Normally grenades bounce off everything except a base_boss.
  • You can connect different objects to a single math counter. However you cannot connect the same object to different math counters.
  • DOES NOT display a boss bar.
  • This can't be used on a template unless you use the preserve names flag (because templates add &randomnumber on the name).
  • Example: ze_map_boss_connect boss_phys1 boss_counter1
  • Optional damage multiplier can be a negative number to heal the boss.
    • To heal the boss: ze_map_boss_connect boss_phys1 boss_counter1 -1
    • To take 2x damage: ze_map_boss_connect boss_phys1 boss_counter1 2
ze_map_boss_grenade_on {name of an entity}
ze_map_boss_grenade_off {name of an entity}

  • Makes grenades explode when they touch the specified entity. This is because grenades normally bounce off everything except base_boss and many maps do not use that.
  • You can turn on grenade explosions on as many objects as you want.
  • This can't be used on a template unless you use the preserve names flag (because templates add &randomnumber on the name).
ze_map_toggle_physbox toggle enable {name of func_physbox or func_physbox_multiplayer}
ze_map_toggle_physbox toggle disable {name of func_physbox or func_physbox_multiplayer}

  • Enable or disable physboxes. Disabling them makes them invisible and have no collision.
  • This can't be used on a template unless you use the preserve names flag (because templates add &randomnumber on the name).
  • Checks every player for rendermode "do not render". If the player has this set, it will find every wearable owned by the player and make those invisible too. Every player that switched from "do not render" to something else will have their cosmetics changed to rendermode "normal" making them visible again.
  • Execute this command any time you make a player invisible or visible by changing rendermode.
  • This is a somewhat expensive command. Do not use more than 2-3 times per second.
  • Sets the enzyme level of all players to 0
ze_map_enzymes {0 or 1}
  • Turns enzymes on or off. Defaults to 1 (on).
  • Resets to 1 (on) at the end of the map.
  • Example: ze_map_enzymes 0
ze_map_player_collision {0 or 1}
  • Turns player collision on or off. Defaults to 1 (on).
  • Number needs to be set before a player spawns. If you do it after, it will not be set. This can be changed if there is demand.
  • Example: ze_map_player_collision 0
Convars (also used through point_servercommands)

ze_map_healing {number from 0 to 1}
  • Multiply healing from tf2 mechanics like medigun and dispensers (not map I believe) by this number.
  • Setting it to 0 disables healing completely. Setting it to 1 effectively disables this feature.
  • It is reset to 1 at the start of each round.
  • Be sure to set it back to 1 when you are done with it, like after a boss dies.
  • Example to reduce healing by 70%: ze_map_healing 0.3
ze_map_zombie_respawn_time {seconds}
  • Set the respawn time for zombies in seconds. Decimals are ok.
  • This is reset to the default at the start of each round.
  • Set it to -1 to use the default respawn time.
  • Example: ze_map_zombie_respawn_time 12.34
ze_disable_doublejump {0 or 1}
  • Disable double jump on scouts.
  • Set to 0 to enable double jump.
  • Set to 1 to disable double jump.
  • Default value is 0.
ze_map_infect_ratio {0 to 1}
  • Number of zombies to be created at the beginning of the round.
  • Number of zombies = Total Players x ze_map_infect_ratio rounded to the nearest whole number.
  • If number of zombies is 0, it is set to 1, unless ze_map_infect_ratio is 0.
  • There will always be at least 1 human, even if you set the ratio very high.
  • Default is 0.15 and reset at the start of the map.
ze_map_fall_damage {any number}
  • Multiply fall damage by this amount.
  • Set to 0 for no fall damage, set to 1 for normal amount. You can use fractions or negative numbers.
  • Default is 1 and resets at the start of the map.

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 anywhere to make it a climbable ladder. Example: blah_zeladder_123.

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 survivor or zombie in their name.
  • These ladders can be disabled and they will be invisible to sight and touch until enabled.
  • Leave the solidity as Toggle. The ladder will not work if set to non-solid.
  • You must set Render Mode to Don't Render if you use a trigger texture instead of nodraw.
  • You can delete these brushes and players will fall off. Players that change teams on a team specific ladder will remain on the ladder.

Here is an example:


Multiple Stages

Do you want multiple stages in your map where if you beat 1 stage, you'll go on to the next stage? And start at the same stage if failed and not the very first stage?

UPDATE - It is now recommended to use vscripts now that TF2 has vscripts

Create an entity that doesn't reset between round restarts. info_target is recommended.

To change the level, you can send the input RunScriptCode with a parameter like stage = 2.

You then add a vscript to the info_target with a keyvalue like this

"vscripts" "bottiger/ze_some_map/stages.nut"

Then make the file tf/tf/scripts/vscripts/bottiger/ze_some_map/stages.nut
And have something like this.

stage <- 1;
function Start()
    if(stage == 1)
        // do something
    else if(stage == 2)
        // do something else

Now use a logic_auto or a team_round_timer to send RunScriptCode to your info_target and call Start() when the round starts.

Do something only when the map starts and not between round changes.

Make an info_target, add the actions as "OnUser1" inputs. Add one to delete itself.

Then in a logic_auto, fire the User1 output to the info_target in OnMapSpawn.

The object will delete itself and won't be recreated on subsequent rounds because info_targets are "persistent" entities that aren't delete and recreated between round. A similar track is used for a multi-stage map.

Getting difficulty from the plugin

You can make a logic_case named ze_plugin_difficulty. Whenever the round starts or the difficulty is changed, the plugin will send the difficulty number to this entity with the InValue input.
  • -1 noob mode
  • 0 regular mode
Pickups / Items

Please contact me for details


Unlocked Features

Making players faster or slower

You can use player_speedmod on our servers.

We recommend you use trigger_stun if you just want to slow players down though. player_speedmod is the only way to make players faster though.

Multiple trigger_teleport destinations

You can use multiple info_teleport_destination with the same name. trigger_teleports will randomly pick one. Landmarks and info_targets are not currently supported.

func_rotating func_movelinear unblockable by players

You may need to use this vscript command to make it unblockable if you don't want to damage players, but it may cause players to be pushed into the map.

Last edited:
  • Like
Reactions: Sore and VentureDev
Not open for further replies.