Counter-Strike 2

Counter-Strike 2

Not enough ratings
How to Make a Bounce Parkour map
By Keplyx and 1 collaborators
Bounce parkour (bp for short) is a new gamemode created by Keplyx and Masi, similar in some ways to bhop and kz : you must complete parkours, but by going from jump pad to jump pad. It got way more success than we expected, and as some people requested it, here's a guide on how to make a map for this gamemode/minigame. This is very easy, don't worry, but basic knowledge in map making is necessary.

Please credit Keplyx and Masi if you make a map for this gamemode (just in the map description).
   
Award
Favorite
Favorited
Unfavorite
What's bp?
Little video showing the gameplay of bounce parkour on the map Bounce Parkour | Beginner
"Install" the script
This gamemode needs a script to work, to create the bounce effect.
Download the script: (remove the space after "mega.nz)
mega.nz /#!51dFhbKS!hL2z6ipdUOaE2aEEXnrjsHkd3j9gcUygGU8c1f15kjU
Please, credit Keplyx if you use it for whatever reasons.

Once downloaded (the script should be named setvelocity.nut), move the script in the {Counter-Strike Global Offensive folder}/csgo/scripts/vscripts.


If you don't know where is your Counter-Strike Global Offensive folder, go in steam, right click on the game in the library, select Properties/Local Files/Browse Files.

This is it, you can now use the scrpt in hammer.
What the script does
Download the test map:
- On workshop
- As a .vmf: (remove the space after "mega.nz)
mega.nz /#!gkFUTDYI!ny-FSHqwgURzr-e7oKGZrRcWDhQeTDo48YQzfKBinE8

Before showing you how to use this script, let me explain what it exaclty does. If you opened the script, you may have noticed 3 functions: bounceXYZ(), relBounceXYZ(), and boostXYZ().

You can try them in the test map, just at your right when you spawn. The jump pad against the wall uses bounceXYZ(0, 0, 400), the one next to it relBounceXYZ(0, 0, 1), and the last boostXYZ(0, 0, 400).

Try them, jump on them, walk on them, while reading the folowing to understand what they do!

bounceXYZ
The first one, when used in a trigger, will make the player bounce in the direction and the speed you specified when calling bounceXYZ() (eg : bounceXYZ(0, 0, 400) to bounce up with a speed of 400).
This will create a basic jump pad.


relBounceXYZ
The second one will make the player bounce relative to his speed while hitting the trigger.
For example, relBounceXYZ(0, 0, 1) will make the player bounce up with the opposite speed of the one he had while entering the trigger. So if he hits it with a Z speed of -400 (falling player), he will bounce with a Z speed of 400. If you enter relBounceXYZ(0, 0, 1.5), you will bounce up with 1.5 times your speed, if you enter relBounceXYZ(0, 0, 2), you will bounce up with 2 times your speed....
This is why you don't bounce when you walk on it in the test map, you have 0 Z speed, so the script will give you a speed of -0 Z(still 0 tho).
To specify which direction you want the player to bounce, you have to put the speed muliplier you want for the right direction, as the function parameter (relBounceXYZ(0, 0, 0) will do nothing, relBounceXYZ(0, 0, 3) will bounce up 3 tmes your previous Z speed).
In short, this function does the same as the first one, but you can't really choose the bounce speed, it depends on the player (you'll probably won't use it that much, but I'm sure some of you will find it some use).


boostXYZ
The last one is the additive version of bounceXYZ(). What it means is, instead of overriding you current speed like with the bounce function, it will add velocity to your current speed. For example, if you use boostXYZ(200, 0, 0), when you enter the trigger, it will add 200 to your X velocity. This can be useful if you want to boost the player, make him go faster , without setting him to a specific speed.
So if you enter the trigger at 200 X speed, you will get out of the trigger with 400 X speed. If you used a a regular bounceXYZ(200, 0, 0), you would enter with 200 X speed, and get out with 200 X speed.
This can also be used to create a barrier, allowing only players with a speed greater than, for example 200 X, to pass (make him enter a trigger with boostXYZ(-200, 0, 0), if his speed is less than 200, he will bounce off the barrier).




Now in the test map, you may be wondering: why am I not bouncing the same height if I jump on the pad or if I walk on it? Well, this is because I called the function with the output OnTrigger, so it gets called every 0.01s. So if you jump on it, you will call the function only once (sort of), but if you walk on it, you may call it several times (and as it is additive, your speed will be 400 + 400 + ...). Usually, you will want to call this function with OnStartTouch.
So this function can create boost pads/rings/zones but also speed barriers.


Don't forget to test them as you read, this will be easier to understand.
Use script in Hammer
Now we'll start mapping. If you already know how to use hammer, you probably don't need to read the following.

Download the map as a .vmf: (remove the space after "mega.nz)
mega.nz /#!gkFUTDYI!ny-FSHqwgURzr-e7oKGZrRcWDhQeTDo48YQzfKBinE8

You first need to have the script in the map. To do so, create a new entity, open it's properties and select the class logic_script. Give it a name (like bounce), and select the script: click on Entity Script, Manage Scripts, then navigate to the folder you put the script. Select it, then in the script manager window, select it and hit apply. The name of the script should be written in the box.


Now, to create a jump pad, make a platform with a brush. Duplicate it just above, apply the trigger texture, and make it a trigger_multiple (select the brush, press CTRL+T, then select the class trigger_multiple). Now, go in the output tab, and create a new one. It should be as following: (eg for simple bounce up)
"OnStartTouch"
"The name of your logic_script"
"RunScriptCode"
"bounceXYZ(0, 0, 400)"





Replace bounce by the function you want to use (see 2 if you don't know how they work).


There you go, you have a simple jump pad!
Pack the script
See this guide on how to pack your vscript into your map

This is really important, you will need to do this each time you want to update your map!
Basics to make a bp map
You need some more stuff in the map to make it a "real" bp map (jump pads are not enough!!)

- Remove fall damage
In this gamemode, you jump high, and sometimes, with connection issues, the player hits the pad, then bounces off, and you don't want the players to die while jumping.
So, you need a new entity: filter_damage_type.
Create one, give it a name, in Filter mode, select "disalow ...", in Damage Type, select FALL.


Then create a trigger_muliple covering all spawns (with delay before reset set to 0). Add the output:
"OnTrigger"
"!activator"
-> this will be in red, but don't pay attention to it.
"SetDamageFilter"
"the name of your damage filter"




- Tp the player to the start/checkpoint if they fall off the level
This is very easy, just make a trigger_teleport on the ground with a brush (give it trigger textures and tie it to an entity), and make an info_teleport_destination at the start/checkpoint. Give it a name, and use this name in the trigger_teleport, in the remote destination.


This is it, you have a basic bp map, but if you want to make it even better, continue reading.
Advices to make a good map
Having jump pads, tp, and no fall damage is good, but you can make the map better if you follow those steps:

- Use a different color for each type of jump pad
For example, make all the bounce pads red, the relBounce green, and the boost blue! Also, give warmer colors to pads bouncing harder than the others, and rotate the pads in the direction they will bounce the player at. So the player will know what to expect before hitting the pads.


- Play a sound when you hit a pad
Audio feedback may seem useless, but it is really important. Imagine csgo without footsteps, or UI sounds ^^. Don't use the entity ambient_generic for that, as it will play for every player around. Instead, create a point_clientcommands entity, give it a name, then on each trigger, add the output:
"OnStartTouch"
"The name of your clientcommands"
"Command"
"Play soundname"


To find the sound you want, create an ambient_generic, click browse sounds, select Raw files, then when you find a good sound, copy his name with the path, and paste it after "Play" in the output. The sound must be a .wav, and if it does not work in-game, try replacing the \ with /.


- Make a satisfying finish line!
Don't end the map with a simple tp to the start, congratulate the player for completing the map!

- Enable bhop
See screenshots. You would want to increase air acceleration, max velocity, and disable stamina, to allow the player to have more air control in the parkour.


- Make players be on only one team, so they don't kill/block each others
Just create spawns for one team, and be sure to set "mp_solid_teammates 0" in your config file. That way players will be only CT or T, and will not block each other while playing.

- Disable autokick and autoteambalance
Create a logic auto, a point_servercommand, and in the logic_auto's output, add call the command mp_autokick 0 and mp_auto_team_balance 0. Also remove warmup (same as autokick, but use the command mp_warmup_end) -> see screenshot above


- Create a custom config file
Remove bots (bot_quota 0), disable team collisions (mp_solid_teammates 0), make the round last (mp_roundtime 60 for 60 min rounds), remove freeze time (mp_freezetime 0).
If you don't know how to create a custom config file, see here.
Then to launch your map using this config, enter in the console map YOURMAPNAME custom
When you upload it, make sure you tick custom in the gamemode type.




Hope this guide was useful, and if you read all the way to here, nice job! And if you make maps for this gamemode, post them here!
Downloads
Map on Workshop

Map as a .vmf: (remove the space after "mega.nz)
mega.nz /#!gkFUTDYI!ny-FSHqwgURzr-e7oKGZrRcWDhQeTDo48YQzfKBinE8

Download the script: (remove the space after "mega.nz)
mega.nz /#!51dFhbKS!hL2z6ipdUOaE2aEEXnrjsHkd3j9gcUygGU8c1f15kjU
Updates
7/08/2017
  • Fixed broken links

15/11/2016

9/11/2016
  • Updated relBounceXYZ function thanks to /u/Cheeky Peake
  • Improved What the script does section
7 Comments
Keplyx  [author] 9 May, 2020 @ 8:44am 
one or the other works I think
Dan 9 May, 2020 @ 7:58am 
do i have to buy it or just get level 21?
Keplyx  [author] 17 Apr, 2020 @ 12:36pm 
You need a premium CSGO account
Dan 17 Apr, 2020 @ 8:30am 
how to get the hammer editor? lol
neo 7 Jan, 2018 @ 9:14pm 
Love this. Amazing guides. I want to donate you some skins for this. Please add me.
Keplyx  [author] 14 Apr, 2017 @ 8:49am 
If you make a map, tell me, I would love to try it
Phaeton 14 Apr, 2017 @ 8:45am 
Thanks, going to make use of it. Great job.