Counter-Strike 2

Counter-Strike 2

Not enough ratings
How to make a Time Travel map
By Keplyx
In this guide, I'll show you how to make a Time Travel map. Some knowledge of hammer is needed to follow this guide, and it will be illustrated by images and an example/demo map.

I'll cover the basics, then it's up to you to decide your map theme, layout...

I'll first explain quickly what we are going to do (if you are used to hammer, this will allow you to be faster), then explain the details if you have trouble.

I made a demo map you can download as a .vmf, so if you are too lazy to read the guide, just load the map in Hammer, compile it and start it in csgo to see how things work. You can also use the map as a complement, to help you understand better the guide.
   
Award
Favorite
Favorited
Unfavorite
What's Time Travel?
Time Travel isn't a gamemode itself, but a concept you can adapt to a lot of maps:
On each new round, players will be teleported to a random "Time", which is in fact a random map part. All parts represent the same place, but at a different time, allowing the map to be less repetitive.

I made a 1vs1 map using this concept, that you can download on the workshop
General Layout
Download the map as .vmf (replace space after mega.nz)
mega.nz /#!09dUQA4R!c4yIjyd90eCKRHqF6nXX50o0s6ldP-lN74ODoaVpVhI

First, let's make the basic map layout for a map with 3 different times. You can use more/less times, but be careful, the more times you have in the map, the more time it will take to compile.

What are we going to do:
Create 3 map part (times) and spawns connected together.



Step by step:
So first, make a box for players to spawn. Separate the CT from T.








Then make a box representing the first map part, the first time. Don't worry about the layout yet, you will be able to do that after. Then do the same for every time you want (here 3).






Now connect all the parts (times + spawns) with a corridor (with nodraw textures to speed up compiling). Now the map parts are linked together to make a single map, allowing future optimization.







The layout ready, we'll start working on the logic.
Teleporter Logic
The map logic is fairly simple.

What are we going to do:
Use a logic_auto to trigger a logic_case randomly on Map start, which will then select a correct logic_relay, which will take care of setting the right tp destination to the teleporter.

Step by step:

Create a trigger_teleport around T spawn and an other around CT spawn, and give them different names. Set the property Start Disabled to Yes







Create 2 info_teleport_destination on each map part, each time: one for CT and one for T, and give them different names.







Create a logic_auto, a logic_case (give it a name), and 3 logic_relay (give them a name, each one will manage the teleportation to one "time, one map part)






In the logic_auto create the following output: OnMapSpawn | "your_logic_case_name" | PickRandom










In the logic_case, create one output for each logic_relay: OnCase# | "your_relay#" | Trigger
This will then select randomly a map part to tp to. If you want the players to play more on a part, put more OnCase# with this relay, it will then have more chances to be triggered.







On each relay, create an output setting the tp destination to the right map part: OnTrigger | "trigger_teleport_name" | SetRemoteDestination | "info_teleport_destination_name"
Then create an output to enable the trigger_teleport after a specified time (time to by weapons for example): OnTrigger | "trigger_teleport_name" | Enable and set the right delay
Optimization [IMPORTANT]
If you leave the map as it is, players will have to render all maps parts when playing in one. This can make their fps drop a lot if the map is big/detailed or if you have a lot of parts/times.

To prevent this fps drop you have to use areaportals. Areaportals prevent stuff you are not looking at to render.

So in this map create a brush in each corridor leading to a part so it takes the whole height and width, apply the areaportal texture, select the brush, press CTR+T to make it an entity and set its classname to func_areaportal, and set the initial state to Closed.

Teleportation Effects [OPTIONAL]
What are we going to do:
Play a sound and fade the screen when teleporting.

Step by step:
Create an ambient_generic, give it a name, set all its flags to 1, choose a sound (I used training/startwam.wav) and set the volume to your liking.






Then on each logic_relay, add the outpu: OnTrigger | "your_ambient_generic_name" | PlaySound








Now create an env_fade entity, give it a name, set all its flags to 0, choose the fade color you want, and the fade in/out duration.










Now on each logic_relay, add the following outputs:
OnTrigger | "your_env_fade_name" | Fade, and set the delay at : the delay to enable the trigger_teleport minus the fade in duration.
Then add the output: OnTrigger | "your_env_fade_name" | FadeReverse, and set the delay to the same as the one to enable the trigger_teleport.





This will make the screen fade before the teleportation and fade back when the teleportation is finished.

You can look in the logic_auto in the demo map for more useful outputs.
Downloads
Download the map as .vmf (replace space after mega.nz)
mega.nz /#!09dUQA4R!c4yIjyd90eCKRHqF6nXX50o0s6ldP-lN74ODoaVpVhI