티스토리 뷰

CounterStrike

[CS 1.6] 카스 NFD, 점프버그: Jumpbug

rhyshan

Xtreme-Jumps.eu ROTW #39 kayne on kz_ep_gigablock_b01

15. Jumpbug: written by faker

The jumpbug is, next to the edgebug we learnt in the last chapter, the most famous technique of falling down a pretty long distance without taking any damage and/or dying.
Therefore, using this technique gives the jumper a considerable advantage on maps without a health charger. Perhaps the most amazing benefit is the fact that you can use the jumpbug in areas where edge-bugs are impossible (because there is no edge at all). The technique was discovered by tjubby and changed quite a lot in the KZ World, since it obviously made a lot new shortcuts possible that were impossible or at least very hard to do with edgebugs (and landing on the very same edge afterwards), just like the big shortcut in kz_ep_gigablock for example.

Okay, so lets try to find out how this technique is even possible and how it is possible to trigger the bug.

In an attempt to discover how the jumpbug functions, we must first break down the CS engine. The Counter-Strike engine uses two different collision models. In this case the upper collision model is located slightly above the lower one, and as long as the upper collision model does not make contact with the ground, then the player will not take fall damage at all. If you use +duck the lower collision model will sink down about 4 units. The funny thing is, that this is the exact collision model used for the +jump command too, so if you duck while you are falling down and jump off within an area of 4 units above the ground, you've never even touched the ground for the engine. You have to release the +duck key (to move the collision box back up) and jump at the very same moment, about 0.01 seconds before you would touch the ground and die, to trigger the bug and land without taking any damage.

Summing it up again: You have to jump, fall down, duck (hold the duck key), jump and release duck at the very same moment (at the place you are supposed to land).

So well.. Is it just coincidence, or can we learn it?

Well, it's all about the right timing and the fps. Regarding FPS Issues there are 3 different possibilities:

1. constant 100,0 fps: If you have the right height difference, perfect timing and all the requirements are met (to see what the requirements are about check the equation E3 in the article) your chances are 100% to do it.
2. inconstant fps: If your FPS are inconstant it is pure coincidence if you will be able to do the jumpbug or not. Perfect timing does not necessarily mean that you will be able to trigger the bug successfully! BUT: jumpbugs are possible with any height difference in this case (the height difference does not restrict the possibility to be able to do a jump-bug like it did in case 1.). To calculate how likely you will be able to trigger a jump-bug with inconstant fps check equation E5 in the article (link can be found below).
3. constantly AND <100 fps: Pretty similar to case 1., but its harder (more unlikely) to trigger the bug. To calculate the possibility you have to use the same equation (E3) but with bigger steps (0,01*(100/fps) instead of 0,01)

Another aspect is the height difference : The higher the jump is (and therefore the bigger the height difference) the harder it will become to trigger the bug.

-> Note: More facts, mostly equations for the math geeks, can be found in the original article located in the article section.


Original eDark's Article: Pure Facts (for the math geeks)

The falling speed can be calculated with this equation:

E1: v(t)=268.25units/s-800units/s^2*t

This will help you to calculate the height difference per frame.

Height difference per frame (= A frame is an entity used for calculations within the engine. 100 fps means 100 frames per second):

E2: v(t)/fps

You have to hit the jump command and release the duck key within an area of 4 units above the ground in ONE frame before landing (~0,01 seconds @ 100 fps [=1/fps]).

And finally the equation, which needs to be fulfilled to hit the jump-bug successfully with constantly 100,0 fps:

E3: h2+4units>h(t)=h1+268.25units/s*t-0.5*800units/s^2*t^2>h2
In frames @ 100 fps: E4: h2+4units>h(f)=h1+2.6825 units/f*f-0.5*8units/f^2*f^2>h2

-> Illustration: h1 = height (jump off), h2 = height (landing), t = time, f = frames
-> t is quant sized by the engine into (1/fps) seconds

If the fps are not constant you have to use this equation:

E5: 400/sqrt(71958.0625+1600*hd)

-> Illustration: sqrt = square root, hd = height difference
-> E5 must be scaled with the fps of the frame in which you are doing the bug to get the correct probability: E5*(fps/100)

Ok, so that's the theory. Let's try to find out some facts about it how probable is to get this in a run.


So how can I estimate or calculate the probability?

Our beloved coder and expert eDark made an equation for that:

 


 


Thanks for this cryptic equation goes to eDark.


Let's break it down to a little example: the famous kz_cg_wigbl0ck demo.

The first jumpbug is (or should be) done after 43s, the second jumpbug is done after 75s and the last jumpbug is done after 126s. So how probable is it to get this in a row and in a run/demo?

Depends much on the probablity (p) in which you are able to do a jumpbug. 15% means 15 times out of 100, obviously. So here we go:

p = 15% => T = 4h
p = 10% => T = 13h
p = 8% => T = 25h
p = 6% => T = 58h
p = 5% => T = 100h


Too much facts and theory? I agree. Let's cool down and get some practical tips from the famous player and jumpbug pro spr1n.

-> Tips by spr1n:
Okay, lets start with some basic facts and knowledge about jumpbugs:

Jumpbugs can be perfomed on any solid surface (ground, another player, solid entity).
Jumpbugs can be performed from any height, with any vertical and horizontal speed.
Right after the jumpbug is done the horizontal speed is slowed down to 50-150 units/s.
The jump height right after performing jumpbug is 63 units (just like a normal jump).
You can't jump higher than 63 units with jumpbug even if it was perfomed from ~2 units above the ground.

Practical tips for learning the jumpbug:

1. The jumpbug is a pretty hard technique, so it's better to start with slow falling speed (choose ordinary 512 units block sections for example). Falling doesn't affect performing the jump, the only important thing is to press the right keys in the very right moment. However, the higher the falling speed is, the harder it is to make a jumpbug (with legal settings the maximum falling speed is 2000 units/s.)
2. Catching the moment between 0 and 2 units above the ground is pretty hard and most common problem. But its not as hard as it might seem at first, its pretty similar to catching the block's edge while longjumping. Step on the place where you want to make jumpbug, remember it. Now you have a picture of 0 units level. After that you have to try and perform the jumpbug when you are just about to enter the area you have remembered before. Seems hard at first, but after good training most people are able to see if they have atleast performed jumpbug too early or too late.
3. Timing to press the keys is a problem aswell. even if you will learn to release duck at the right moment, you also should time the jump too.
Scrolling for jump is a good solution, but still it doesn't send jump command every moment and has little pauses. The best way to learn the key timing and to analyze it is Jumpbug trainer plugin by Numb. You will see your mistakes immediately and you will be able to correct them right away, which makes practise more effective.


I guess this extended statement might be very helpful for everyone who's going to learn performing the jumpbug. Last but not least, we have a recap video of how the jumpbug is done correctly, of course:


15. 점프버그: Translated by RhyshaN

점프버그는 지난 챕터에서 배운 엣지버그 다음으로 유명한 기술로, 높은 곳에서 떨어져도 데미지를 입거나 죽지 않는 기술입니다.
따라서, Health Charger없는 맵에서 점프버그는 고려해 볼만한 이점을 제공합니다. 아마도 점프버그가 주는 최고의 이점은 엣지버그 사용이 불가능한 장소에서(엣지가 전혀 없기에) 점프버그를 사용할 수 있다는 점일 것입니다. 이 기술은 tjubby가 발견했으며 Kreedz 세계를 매우 많이 변화시켰습니다. 불가능 했거나 최소한 엣지버그로 해내기 매우 어려웠던 새로운 지름길들을 가능하게 만들었기 때문입니다. 그 예로, kz_ep_gigablock의 끝내주는 지름길이 있습니다.

좋습니다. 이 기술이 가능하기는 한 기술인지, 어떻게 버그를 유발하는지 알아봅시다.

점프버그가 어떻게 일어나는지 알기 위해서는, 카스엔진을 먼저 파악해야 합니다. 카운터스트라이크의 엔진은 두 개의 다른 충돌 모델을 가지고 있습니다. 여기에서 상부 충돌 모델은 하부 충돌 모델보다 약간 위에 위치하는데, 상부 충돌 모델이 땅에 닿지 않는 한 플레이어는 추락으로 인한 데미지를 전혀 입지 않습니다. 덕을 하게 되면 하부 충돌 모델이 4유닛 정도 가라앉게 되는데, 재미있는 점은 점프 명령을 했을 때 역시 정확히 같은 충돌 모델을 사용해 똑같이 하부 충돌 모델이 4유닛 가라앉게 된다는 점입니다. 따라서, 만약 떨어지는 동안 덕을 하고 땅에서 4유닛 높이가 되었을 때 뛰어오르면, 엔진에게 있어서는 땅에 닿지 않은 것과 같아집니다. 땅에 떨어져 죽기 약 0.01초(100fps) 전에 덕키를 떼고(충돌 박스를 원상태로 복구시키기 위해) 점프를 하는 두 동작을 거의 동시에 해내야 버그를 유발시키고 데미지 없이 착지할 수 있습니다.

다시 정리하면: 뛰고, 떨어지고, 덕을 하고(덕키는 계속 누른 상태로) 점프를 함과 동시에 덕을 떼어주면 됩니다.


그래서.. 그저 우연히 되는 기술인가요, 아니라면 배울 수 있는 기술인가요?

음..글쎄요, 이 모든 것들은 적절한 타이밍과 fps의 문제입니다. 그리고 fps에 있어서는 3가지 다른 가능성이 있습니다.

case1. 일정한 100.0fps: 만약 일정한 높이변화량을 가진다면, 완벽한 타이밍을 위한 모든 요구조건은 갖춘 셈입니다(요구조건이 무엇인가에 대해서는 article의 공식 E3를 확인하세요). 이 case1의 경우에 해당된다면 점프버그를 해내기 위한 기회는 100% 갖춰졌습니다.

case2. 일정하지 않은 fps: 만약 당신의 fps가 일정하지 않다면 점프버그를 할 수 있고 없고는 순전히 운에 달렸습니다. 점프버그를 유발하기 위한 완벽한 타이밍은 의미가 없습니다! 
하지만: 일정하지 않은 fps가 주는 어떤 높이 변화량에서도 점프버그는 당연히 가능합니다(case1에서 그러했듯 높이 변화량은 점프버그의 가능성을 제한하지는 않습니다). 일정하지 않은 fps에서 점프버그가 발생할 가능성을 계산하고 싶다면 article의 공식 E5를 확인하기 바랍니다(링크는 아래에서 찾을 수 있습니다).

case3. 일정하지만 100보다는 낮은 fps: case1과 매우 비슷하지만 버그를 유발하기엔 더 어려운 조건입니다(가능성이 더 낮습니다). 가능성을 계산하기 위해 같은 공식 E3를 이용하지만 1fps 당 더 큰 높이 변화량을 갖고 떨어질 것입니다(100fps에서는 0.01초당 한 번 떨어지지만 낮은 fps에서는 0.01 x (100/fps)초당 한 번 떨어지게 되므로)

높이 변화량의 또 다른 특성으로: 점프를 시작한 높이가 높을수록(따라서 초당 높이 변화량이 커지게 되므로) 점프버그를 유발하기는 더 어려워 집니다.

-> Note: 더 많은 팩트, 아마도 수학벌레(math geeks)를 위한 공식들은 Xtreme-Jumps.eu article 섹션의 원본 article에서 찾을 수 있습니다.

/* 현재는 찾을 수 없습니다. */

원본 eDark의 Article: 있는 그대로의 팩트(수학벌레들을 위해)

추락속도는 아래의 공식으로 계산할 수 있습니다:
E1: v(t) = 268.25units/s - (800units/s^2) x t

/* sv_gravity 800 */

아래의 공식으로 프레임당 높이변화를 계산할 수 있습니다(프레임은 엔진에서 계산을 위해 사용하는 단위로, 100fps는 초당 100프레임을 의미합니다):
E2: 프레임당 높이 변화 = v(t) / fps

점프버그를 해내기 위해서는 착지 1프레임 전(100fps에서 ~0.01초 [=1/fps]), 땅에서 ~4유닛 높이에서 덕을 떼고 점프를 해야합니다.

그리고 일정한 100.0fps에서 성공적인 점프버그를 위해 충족되어야 하는 최종공식 E3입니다.

E3: h2 + 4units > h(t) = h1 + (268.25units/s) x t - 0.5 x (800units/s^2) x t^2 > h2

100fps에서 E4: h2 + 4units > h(f) = h1 + 2.6825units/f x f - 0.5 x (8units/f^2) x f^2 > h2

-> 범례: h1 = 추락시작 높이, h2 = 착지지점 높이, t = 시간, f = 프레임
t는 엔진에 의해 (1/fps)초 단위로 나뉜 시간 값.

만약 fps가 일정하지 않다면 아래의 공식을 사용해야 합니다:

E5 = 400 / sqrt(71958.0625 + 1600hd)
-> 범례: sqrt = 제곱근, hd = 높이 변화량
-> 정확한 점프버그의 성공 가능성을 얻어내기 위해 E5는 fps와 함께 계산되어야 합니다: E5 x (fps/100)

자, 그래서 이론은 됐습니다. 이제 점프버그를 사용하기 위해 점프버그가 어느 정도의 가능성을 갖는지에 대한 팩트를 알아보도록 하겠습니다.


그래서 가능성을 어떻게 추측하거나 계산할 수 있을까요?

우리의 사랑받는 코더이자 전문가인 eDark가 이에 대한 공식을 만들었습니다:

 

 


이 공식을 분석해 봅시다: 유명한 kz_cg_wigbl0ck 데모를 예로 들겠습니다.

첫 점프버그는 43초에 일어났고(혹은 일어나야 하고), 두 번째는 75초에, 마지막 점프버그는 126초에 일어났습니다. 그렇다면 한 번의 시도나 데모에서 이러한 연이은 점프버그를 얻어낼 확률이 어느 정도나 될까요?

그것은 점프버그를 성공할 확률 (p)에 달려있습니다. 15%는 당연히 100번 중 15번을 의미합니다. 그렇다면:

p = 15% => T = 4시간
p = 10% => T = 13시간
p = 8% => T = 25시간
p = 6% => T = 58시간
p = 5% => T = 100시간

/* 점프버그의 발견으로부터 위 데모가 업로드 된 시점까지의 시간을 T로 두면, 대략의 p값을 뽑아낼 수 있을지 모른다는 분석으로 보면 될까요? */

너무 팩트와 이론이 많은가요? 동의합니다. 잠시 쉬어가며 유명한 플레이어이자 점프버그 프로인 spr1n에게 몇 가지 실용적인 팁들을 얻어보도록 합시다.

Tips by spr1n:
좋습니다. 점프버그에 대해 알려진 기본적인 팩트들과 지식들로부터 시작합시다:

점프버그는 어떠한 딱딱한 표면에서도 가능합니다(땅, 다른 플레이어, 딱딱한 물체)
점프버그는 수직/수평속도에 관계 없이 어떠한 높이에서도 가능합니다.
점프버그가 발생한 직후의 수평속도는 50~150units/s로 줄어들게 됩니다.
점프버그가 발생한 다음 점프의 높이는 63유닛입니다(보통 점프와 같은 값).
땅에서 ~2유닛 위에서 점프버그가 발생했다 하더라도 63유닛보다 높이 뛸 수는 없습니다.

점프버그를 배우는 데 있어 실용적인 팁:

1. 점프버그는 매우 어려운 기술이므로, 낮은 추락속도로 시작하는 것이 좋습니다(예를 들면, 보편적인 512유닛 블록 구간을 선택). 가장 중요한 것은 올바른 키를 올바른 순간에 누르는 것 뿐입니다. 점프버그로 인해 '추락'은 점프를 하는 데 있어 어떤 영향도 줄 수 없을 것이지만 추락속도가 높을수록, 점프버그를 발생시키기는 더 어려울 것입니다(정식 세팅에서 추락속도의 최고값은 2000units/s입니다).
2. 점프버그에 있어 0~2유닛 사이의 순간을 잡아내는 것은 매우 어려운, 흔한 문제입니다. 하지만 그것은 처음 보기보다 그리 어렵지 않으며, 롱점프시에 블록의 엣지를 잡아내는 것과 매우 유사합니다. 점프버그를 발생시키고자 하는 장소에 서서, 그 순간을 기억하면 당신은 0유닛 높이의 그림을 가진 셈이 됩니다. 그 다음 점프버그를 시도하고 구사할 순간은 이전에 기억했던 그림에 진입하려는 그 순간이 됩니다. 처음에는 어려워 보이지만, 충분한 연습이 받쳐준다면 대부분의 사람들은 점프버그를 최소한 너무 일찍 했거나 너무 늦게 했다는 사실 정도는 알 수 있게 됩니다.
3. 키를 누르는 타이밍 또한 중요합니다. 덕을 푸는 올바른 순간을 배웠다 하더라도, 점프를 하는 순간 또한 맞춰야 합니다. 점프를 위해 스크롤휠을 굴리는 것이 좋은 해법이 될 수도 있지만, 모든 순간에 대해 점프명령을 내려주지는 못하며 약간의 대기시간도 가지므로 적당하지 않습니다. 중요한 순간의 감을 잡고 연구하는데 있어 최고의 방법은 Numb의 점프 트레이너 플러그인을 이용하는 것입니다. 실수를 즉시 알 수 있게 되고 즉시 수정할 수 있기에, 연습을 더욱 효과적으로 할 수 있을 것입니다.

이 긴 글이 점프버그를 배워보고자 하는 모든 이들에게 큰 도움이 되었을거라 생각합니다. 마지막으로, 점프버그의 올바른 사용예를 담은 영상을 첨부합니다.





This video shows a recap of how the jumpbug is done correctly. Thanks to saier.


그저 fakereDark의 글이란 사실만으로 믿고 넘어갈 수도 있겠지만..
공식이 완전하지 못하고 중간과정이나 유도과정이 생략되어 있어, 이를 통해 나온 확률을 믿기도 애매합니다.
또 전 위 공식이 실제적으로 어떤 가능성을 의미할 수나 있는지 의문입니다. 너무 많은 변수들이 빠져있는게 아닌가 싶네요.

특히 E5의 경우 t값을 유도해낸 뒤 대충 때려맞춘 듯한 느낌을 지울 수가 없습니다.
원본 글이 Xtreme-Jumps.eu의 article섹션에서 삭제된 이유와 연관이 있는건 아닐까 생각해 봅니다.

그래서 전 지금은 이 정도로, 점프버그는 0.01초 차이로 성공/실패가 갈리므로 매우 어렵다!는 정도로만 이해하고 정리하려 합니다.



TAG

댓글
댓글쓰기 폼