Am I Bhopping Right? (demo Inside)
jammno
Join Date: 2004-01-31 Member: 25832Members
<div class="IPBDescription">A 3.9 meg demo of me Bhopping ( I hope )</div> I made a recording of myself. So far I've been practicing two hours a day for two weeks on how to B hop.
I went to this website to learn how to B hop : <a href='http://fidosrevenge.com/bhop/' target='_blank'>http://fidosrevenge.com/bhop/</a>
I'm following the exact directions given for that website (And for skulks I hold duck so I won't cling to stuff.)
Demo: <a href='http://webpages.charter.net/jammno/jammno.dem' target='_blank'>http://webpages.charter.net/jammno/jammno.dem</a> (Might have to right click - Save as for it to download.)
The demo is 3.9 megs. I use Mouse Wheel down for +jump. I am not using a jump script. I might in the future, but for now I'm trying to learn without scripting.
So can you give me feedback on this demo? I need to know if I'm doing it right. And if you're a pro at bhopping, mind hosting a demo for us to watch and see how it's done?
To watch the demo, just place jammno.dem into your NS directory (Mine is C:/program files/steam/steam apps/my e-mail/ Half-Life / nsp
Then open up ns and type in the console "Playdemo jammno" or "play jammno" Not sure if you have to add .dem to the end though.
Feedback is HIGHLY appreciated. I normally B hop a little better but recording a demo really put a strain on my FPS.
I went to this website to learn how to B hop : <a href='http://fidosrevenge.com/bhop/' target='_blank'>http://fidosrevenge.com/bhop/</a>
I'm following the exact directions given for that website (And for skulks I hold duck so I won't cling to stuff.)
Demo: <a href='http://webpages.charter.net/jammno/jammno.dem' target='_blank'>http://webpages.charter.net/jammno/jammno.dem</a> (Might have to right click - Save as for it to download.)
The demo is 3.9 megs. I use Mouse Wheel down for +jump. I am not using a jump script. I might in the future, but for now I'm trying to learn without scripting.
So can you give me feedback on this demo? I need to know if I'm doing it right. And if you're a pro at bhopping, mind hosting a demo for us to watch and see how it's done?
To watch the demo, just place jammno.dem into your NS directory (Mine is C:/program files/steam/steam apps/my e-mail/ Half-Life / nsp
Then open up ns and type in the console "Playdemo jammno" or "play jammno" Not sure if you have to add .dem to the end though.
Feedback is HIGHLY appreciated. I normally B hop a little better but recording a demo really put a strain on my FPS.
Comments
- Make sure you have a triplejump script bound to either your standard jump key or something convenient like mouse2
- Make sure you're holding crouch
- Aim just a bit below the horizon for better speed-buildup (afaik)
- DONT EVER TOUCH THE GROUND
- DONT TOUCH THAT GROUND
- JUST DONT. If you have to, practice standing still and just constantly jumping with the triplejump. Then practice by starting one jump (doesn't have to be a bhop) down a hallway and just hitting your triplejumpkey and watching yourself not lose any speed as you drift down the hallway without touching keys.
That about sums it up. You have huuuuuuuuge gaps between your jumps. Other than that, you can get around having to hold crouch by learning as a Gorge - which is a bit easier than starting with a Skulk.
Yes, always hold crouch, never hold forward either.
If you turn while Bhopping, turn 45 degrees to the left-right
If your turn is too sharp, your Bhop will stop <!--emo&:(--><img src='http://www.unknownworlds.com/forums/html//emoticons/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo-->
I also have a demo for your Bhopping that you can see, problem is i have no way to host it. Could you host it for me? ^^
Yes, always hold crouch, never hold forward either.
If you turn while Bhopping, turn 45 degrees to the left-right
If your turn is too sharp, your Bhop will stop <!--emo&:(--><img src='http://www.unknownworlds.com/forums/html//emoticons/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo-->
I also have a demo for your Bhopping that you can see, problem is i have no way to host it. Could you host it for me? ^^ <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd-->
I'm out of hosting room, so I can't host for you <!--emo&:(--><img src='http://www.unknownworlds.com/forums/html//emoticons/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo-->
I didn't jump once every so often, I jumped just as I hit the ground <!--emo&:(--><img src='http://www.unknownworlds.com/forums/html//emoticons/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo-->. Maybe it was the demo recording that made me too laggy to notice?
Well, the aim of Bhop is to jump at the EXACT moment you hit the ground.
You're doing this-
The / \ is when you jump
The ___ is when you walk normally
Skulk _____/ \__/ \___
Jump Jump
You need to do this
Skulk _____/ \/ \/ \/ \_____
Jumpjumpjump
Binding jump to your mousewheel really helps, it's how most of the pro's Bunnyhop
Practice makes perfect. (Well, close to it <!--emo&::nerdy::--><img src='http://www.unknownworlds.com/forums/html//emoticons/nerd.gif' border='0' style='vertical-align:middle' alt='nerd.gif' /><!--endemo--> )
- DONT TOUCH THAT GROUND
- JUST DONT. If you have to, practice standing still and just constantly jumping with the triplejump. Then practice by starting one jump (doesn't have to be a bhop) down a hallway and just hitting your triplejumpkey and watching yourself not lose any speed as you drift down the hallway without touching keys. <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd-->
Please tell me how thats possible...
only way i could think was go lerk <!--emo&::nerdy::--><img src='http://www.unknownworlds.com/forums/html//emoticons/nerd.gif' border='0' style='vertical-align:middle' alt='nerd.gif' /><!--endemo--> <!--emo&::lerk::--><img src='http://www.unknownworlds.com/forums/html//emoticons/lerk.gif' border='0' style='vertical-align:middle' alt='lerk.gif' /><!--endemo-->
I actually made a demo type tutorial, if your interested.
AIM me @ DestroyerThe if you want it.
This is why people use either scripts, turbo buttons, or mousewheel to make it so that the timing of their jumps is always on. Otherwise you're concentrating all the time on getting the jump just right, instead of on the map and what's around you. All of these methods involve spamming the jump command in that crucial split second before you touch the ground.
Before Flayra went and decided to bugger up _special, you could create a script that made it so that jump would be spammed endlessly at the press of a button and until you released the button. Now that he decided to alias it out, you can only use the three alternatives. The multiple jump script is basically the jump command repeated several times ("+jump; wait; -jump; wait; +jump; wait; -jump; wait; ... +jump; wait; -jump") and bound to a key. The turbo button requires either a certain mouse driver and/or mouse type, or software that I haven't bothered to find yet. It just does what the _special jump script would do, just without the script itself - instead it does it through the mouse. The mousewheel involves binding mwheelup and mwheeldown to +jump and rolling it rapidly in that crucial split second when you're about to land on the ground.
Yes, always hold crouch, never hold forward either.
If you turn while Bhopping, turn 45 degrees to the left-right
If your turn is too sharp, your Bhop will stop <!--emo&:(--><img src='http://www.unknownworlds.com/forums/html//emoticons/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo-->
I also have a demo for your Bhopping that you can see, problem is i have no way to host it. Could you host it for me? ^^ <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
I'm out of hosting room, so I can't host for you <!--emo&:(--><img src='http://www.unknownworlds.com/forums/html//emoticons/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo-->
I didn't jump once every so often, I jumped just as I hit the ground <!--emo&:(--><img src='http://www.unknownworlds.com/forums/html//emoticons/sad.gif' border='0' style='vertical-align:middle' alt='sad.gif' /><!--endemo-->. Maybe it was the demo recording that made me too laggy to notice? <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd-->
If that were the case, you wouldn't have been going straight sideways at one point. That means that you were moving on the ground for sure - the only time you should be moving along the ground is before the first jump. Strafing for half a second before you takeoff for the first time actually makes it easier.
The 3 main things about bunnyhopping IMO:
Learn how to glide, the same maneuver you are doing in the air but quicker and on the ground, you can get up to about 150% of your base run speed this way even before you make your first jump, from there it is close to the max of 170%(above that your speed will be reset to 170% whenever you land).
Learn how to time your jumps. Friction is only applied when you are on the ground.
Get a feel for how fast you may turn in the air without loosing speed.
Hope <a href='http://hem.bredband.net/soylent/temp/random_bhop.zip' target='_blank'>this</a> helps a little.
Bunnyhopping is framerate dependent, but since it is a feature in this MOD and not an exploit it should'nt be, all we can do is pester the developers I suppose. It's not THAT difficult to remove the framerate dependence but I can see no way to do it that doesn't use a slight bit more CPU than currently(I think it would be an entirely negligible increase. Basically just divide each movement in finer steps, so regardless of framerate you go through the same code an approximately equal number of times per second, to remove granularity this will have to be a somewhat large number, like 500 FPS. Then you have to make some small corrections so that it behaves similar to 50-100 FPS anyway(at a high framerate you can turn very quickly without losing speed, but you will not gain as much speed as those with lower framerates)).
If you have a framerate in the 20-30's it will be difficult to bunnyhop as it is right now.
Nope, it doesn't help at all. If I have a faster framerate I can turn faster than you ever can without loosing speed, this has nothing to do with jump timing.
I'll just copy paste the HLDM code so you can look at it if you don't have the SDK handy:
<!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->
/*
===================
PM_AirMove
===================
*/
void PM_AirMove (void)
{
int i;
vec3_t wishvel;
float fmove, smove;
vec3_t wishdir;
float wishspeed;
// Copy movement amounts
fmove = pmove->cmd.forwardmove;
smove = pmove->cmd.sidemove;
// Zero out z components of movement vectors
pmove->forward[2] = 0;
pmove->right[2] = 0;
// Renormalize
VectorNormalize (pmove->forward);
VectorNormalize (pmove->right);
// Determine x and y parts of velocity
for (i=0; i<2; i++)
{
wishvel[i] = pmove->forward[i]*fmove + pmove->right[i]*smove;
}
// Zero out z part of velocity
wishvel[2] = 0;
// Determine maginitude of speed of move
VectorCopy (wishvel, wishdir);
wishspeed = VectorNormalize(wishdir);
// Clamp to server defined max speed
if (wishspeed > pmove->maxspeed)
{
VectorScale (wishvel, pmove->maxspeed/wishspeed, wishvel);
wishspeed = pmove->maxspeed;
}
PM_AirAccelerate (wishdir, wishspeed, pmove->movevars->airaccelerate);
// Add in any base velocity to the current velocity.
VectorAdd (pmove->velocity, pmove->basevelocity, pmove->velocity );
PM_FlyMove ();
}
<!--c2--></td></tr></table><div class='postcolor'><!--ec2-->
fmove and smove are given the "amount of strafing" you are doing, if ducking this is 3 times smaller in HLDM. If you have a higher top speed for your class this amount is larger.
pmove->forward and pmove->right are vectors pointing in your forward direction and your right direction. What it does is project these on a horisontal plane(by removing their vertical component) and then making their lenght 1 unit.
wishwel is given the velocity you wish to have according to how you are strafing.
Then it copies wishvel to wishdir and normalizes wishdir, gives wishspeed the length of wishvel. It then checks to see if the client wants a speed higher then the server is set to allow and chops it down to size it does. This issue is really specific to HLDM as NS will have set class speeds, in HLDM the client can set their variable for the maximum speed they want, and if the server will allow it they will run faster.
PM_Airaccelerate is called and given the values of wisdir(direction you want to accelerate in(vector with lenght 1)), wishspeed(the speed you want to have, this is just a number, speed has no direction) and pmove->movevars->airaccelerate(a value that determines how quickly you can accelerate in the air).
PM_Airaccelerate will find a new value for you velocity and return. The function then adds in any base velocity from conveyors and such and flymoves your player(move your player in a straight line with your current velocity for the duration of the frame, if the player hits any walls, make the velocity parallell with these walls so you don't enter into them).
It's in PM_Airaccelerate that all the fun stuff happens.
<!--c1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>CODE</b> </td></tr><tr><td id='CODE'><!--ec1-->
void PM_AirAccelerate (vec3_t wishdir, float wishspeed, float accel)
{
int i;
float addspeed, accelspeed, currentspeed, wishspd = wishspeed;
if (pmove->dead)
return;
if (pmove->waterjumptime)
return;
// Cap speed
//wishspd = VectorNormalize (pmove->wishveloc);
if (wishspd > 30)
wishspd = 30;
// Determine veer amount
currentspeed = DotProduct (pmove->velocity, wishdir);
// See how much to add
addspeed = wishspd - currentspeed;
// If not adding any, done.
if (addspeed <= 0)
return;
// Determine acceleration speed after acceleration
accelspeed = accel * wishspeed * pmove->frametime * pmove->friction;
// Cap it
if (accelspeed > addspeed)
accelspeed = addspeed;
// Adjust pmove vel.
for (i=0; i<3; i++)
{
pmove->velocity[i] += accelspeed*wishdir[i];
}
}
<!--c2--></td></tr></table><div class='postcolor'><!--ec2-->
First, if you are waterjumping or dead, you won't be accelerated(waterjumping is HLs weird implementation of swiming, this also lives in PM_shared.c and can be changed if you dislike it in your MOD).
Then there are some commented out lines(nothing is done after a // for the duration of the line).
If the speed you want is bigger than 30 then give it the value 30. Ducking or not you will get a wishspd above 30 unless you are using some kind of analog joystick or something.
A dotproduct gives a number as a result, the length of one vector times the other multiplied by the cosine of the angle between them. This can also be said to be the length of one vector times the length of the other vector projected on the first. E.G. if the vectors are perpendicular you get zero, and when bunnyhopping they are allmost zero(you are strafing allmost perpendicular to your speed, allways, when bunnyhopping). (the reason it is not entirely perpendicular is that you have turned since the last frame allthough your velocity has not yet changed). Your velocity lags behind so to speak, this means that the dotproduct will be negative, and addspeed will be slightly larger than 30.
Addspeed is given wishspd - currentspeed. If you are strafing in the direction of your velocity and your current speed is bigger than 30 units per second the dotproduct will be bigger than 30 units per second and addspeed is given a negative result.
It then checks if addspeed is bigger than 0 and if it isn't it returns. This means that you cannot get a higher velocity than 30 units per second from just jumping straight up and pushing forward. The small velocity that you do get allows you to get up on boxes from standing still and pushing against them.
accelspeed is given the product of the duration of this frame, wishspeed, accel(this is a copy of the value of pmove->movevars->airaccelerate just renamed that the function was called with) and friction(this is generally 1).
Then it checks it gives accelspeed the smallest value of accelspeed and addspeed.
It multiplies accelspeed with the direction you are strafing in and adds this to your current velocity. If you turn too fast your velocity will not keep up with your turning and you will start counteracting your velocity. Since this function is called every frame and addspeed is related to wishspd wish is capped then I can accelerate quicker than someone with a low framerate bunnyhopping to a point, at a high enough framerate the frametime will be so small that accelspeed will never reach that cap when strafing perpendicular to my velocity(for skulks this will be around 100 FPS and it will be a lower value for slower classes (290 * 0.01 * ~10(? not sure if they changed it in NS) * 1 ~ 30) ).
Why bunnyhopping speeds you up might not be apparent right away but try drawing a velocity vector on piece of paper, now imagine you add a small amount of velocity perpendicular to it, and draw it again, it will have turned a bit, but it will be a bit longer now(it forms the hypotenuse in a right angled triangle, apply the pythagorean theorem and you see it is bigger.). If you devise a scheme to remove the framerate dependence by decomposing this acceleration in smaller steps and use quite a few more steps per frame to do this, then you will never reach the cap by addspeed and you will do the same movement in smaller steps, the approximation becomes better and you hardly gain any speed trying to bunnyhop. An ugly hack to fix this is check to see if the players speed has increased after you have run this code and if it has then check how with how much the players speed has increased and use that to determine an amount to multiply the players velocity with so that everything feels like it used to.
corrected some mangled english.
Oh well, I'll just wait till I get a new computer in like three years :-/
How I learned was just you run, you jump, let go of forward, and then strafe left n right in air, and then make a figure 8 with mouse. It worked very well for me.
You practice 2 hours a day? That's an awful long amount of time to dedicate to learn to bhop, you must really want it. It took me like 45 mins to an hour to learn, and another few days of playing CS to perfect it.
Do not use a script to bhop, keep it basic, and keep practicing, you'll become pro.
If you want a in game tutor, msg me, post here, or give me your Steam ID and i'll be happy to help you.
If you want a in game tutor, msg me, post here, or give me your Steam ID and i'll be happy to help you. <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd-->
Thats what we need more GJ!
No I'm saying you gain speed slower so it's more difficult. If you miss by say 0.03 seconds you will automatically miss by the duration of one frame at least(movement logic is run once every frame) which at 10 fps is a whole 0.1 seconds and causes you to slow down alot, while I can miss with say, 2-3 frames which is only 0.03 seconds or so so I slow down alot less.
This really needs to be fixed(and it can be without _that_ much trouble).
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
How I learned was just you run, you jump, let go of forward, and then strafe left n right in air, and then make a figure 8 with mouse. It worked very well for me.
<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
The vertical mouse movement does nothing at all.
<!--QuoteBegin--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td><b>QUOTE</b> </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->
You practice 2 hours a day? That's an awful long amount of time to dedicate to learn to bhop, you must really want it. It took me like 45 mins to an hour to learn, and another few days of playing CS to perfect it.<!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Set fps_max 20 and see if you can still bunnyhop.
Well, I can bhop (Using a script, I must add), and while I'm not particularly Speedy Gonzalez on drugs, it does give me a decent speed most of the time, but ... That was on a good pc, with constant fps 60+. Now, I have to use a P3 for a couple of weeks, and using the same script, I find bhopping neigh impossible, because, you indeed spike sometimes, and every 5 jumps or so, your spike happens at the landing, which, totally fux it up. For me at least.
So to the topic starter; Yeah, you can bhop, but you will never be able to do it constantly, or fast, let alone perfectly.
I feel for ya though...Ive noticed the different between 20-30 fps to that of a 60+ in the last few days, and it's just not fun. It just...puts a hand brake on all your abilities. (fade, skulk, comm, marine...anything). Get a new pc, or beg your parents for one!
I'm too old to beg my parents for a new computer, and I don't even live in a house, let alone an apartment. So a new computer's out of the question.
- DONT TOUCH THAT GROUND
- JUST DONT. If you have to, practice standing still and just constantly jumping with the triplejump. Then practice by starting one jump (doesn't have to be a bhop) down a hallway and just hitting your triplejumpkey and watching yourself not lose any speed as you drift down the hallway without touching keys. <!--QuoteEnd--></td></tr></table><div class='postcolor'><!--QuoteEEnd-->
Please tell me how thats possible... <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd-->
sit on something...like a box or an OC :>
sorry if i'm asking dumb question here i just curiouso <!--emo&:D--><img src='http://www.unknownworlds.com/forums/html//emoticons/biggrin.gif' border='0' style='vertical-align:middle' alt='biggrin.gif' /><!--endemo-->
Only if the server enables it.
Only if the server enables it. <!--QuoteEnd--> </td></tr></table><div class='postcolor'> <!--QuoteEEnd-->
is this for ALL scripts, straight forward
bind "buttom" "+jump;wait;-jump;wait;etc;etc"
and the
alias hop "jump;wait;-jump;wait"
alias 3hop "hop;hop;hop;"
bind "button" "3hop"
things too?