A bunnyhop (bhop) server is a movement server: players chain jumps to build speed, and a timer records how fast they clear a course. CS 1.6 has no built-in "bhop mode" — you assemble it from an engine that allows the movement, a plugin that makes jumps chain reliably, and a timer plugin that records times. This walks through a clean setup on ReHLDS.
1. Start on ReHLDS + ReGameDLL
Bhop servers live or die on movement consistency, so run the maintained stack: ReHLDS with ReGameDLL_CS underneath. ReGameDLL gives you clean control over the movement code and the cvars below behave predictably. Add Metamod-r and AMX Mod X 1.9 on top, because the bhop and timer plugins are AMXX plugins.
2. Set the movement cvars
Two engine cvars shape how bhop feels. Put them in server.cfg:
sv_airaccelerate 100 sv_maxspeed 320
sv_airaccelerate controls how fast you can gain speed while strafing in the air; stock CS uses 10, and bhop/KZ servers raise it (100 is a common value) so strafing actually accelerates you. sv_maxspeed caps ground speed — leave it at the CS default of 320 unless you deliberately want a faster feel. Do not confuse this with a bunnyhop cvar; CS 1.6 has no stock "enable bhop" switch, which is why you need the plugin in the next step.
3. Install an auto-bhop plugin
On stock CS, the engine inserts a small penalty that makes perfectly-timed manual jumps hard, so most bhop servers run an auto-bhop plugin that fires the jump the instant you land while holding jump — the classic "hold space to bhop" behaviour. Our GPL implementation is CSB Bhop Enable. Drop its .amxx into the plugins folder and register it — see installing plugin files and plugins.ini load order:
bhop_enable.amxx
Most such plugins expose a cvar to toggle auto-jump and a per-player say command so purists can turn it off and hop manually. If you want stacked jumps for movement gimmicks, CSB Multi-Jump grants a configurable number of mid-air jumps.
4. Add a timer for records
What makes it a bhop server rather than just a mod is the timer: a run starts when the player leaves the start zone and stops at the end zone, and the plugin stores the time and a leaderboard. Use CSB KZ-Timer, which times runs, shows a live speedometer and clock on the HUD, and keeps per-map records. Add it to plugins.ini:
kz_timer.amxx
The timer keys records by SteamID, so on a non-Steam server make sure Reunion is handing out stable ids — otherwise two players share a record and the leaderboard is meaningless.
5. Load bhop or KZ maps
Bhop courses are custom maps (typically prefixed bhop_, and KZ climbing maps kz_). Put the .bsp files in cstrike/maps/, add them to mapcycle.txt, and serve them over FastDL so players download them quickly on join. These maps have start and end zones the timer reads, so use maps built for timing rather than generic community maps.
6. Tune the server for movement
Movement players are sensitive to registration, so raise the rates. In server.cfg:
sys_ticrate 1000 sv_maxupdaterate 100 sv_maxrate 100000
A high sys_ticrate keeps the server frame time low so jumps land consistently, and generous rate caps let clients run 100 updates/sec. Turn friendly fire off and set a long mp_timelimit or none — bhop players want to stay on a map and grind a time, not rotate every 20 minutes.
Common errors
- Jumps do not chain / feel sticky — no auto-bhop plugin, or
sv_airaccelerateleft at the stock10. Add the plugin and raise airaccelerate. - Timer never starts — the map has no start/end zones the timer recognises. Use maps built for the timer plugin.
- Two players share the top time — colliding non-Steam SteamIDs. Fix identity with Reunion.
- Speed feels capped no matter what — a plugin or config is clamping
sv_maxspeed; read it back in the console and trace what re-sets it. - Choppy movement under load —
sys_ticratetoo low or the box is CPU-starved. Raise ticrate and check server FPS.
Verification
Load a bhop_ map, hold jump, and confirm you chain hops and build speed — the speedometer from the timer should climb as you strafe. Cross the start zone and confirm the clock starts, then the end zone and confirm it stops and records a time. Reconnect and check your record survived, which proves the timer is keying by a stable id. When hops chain, the clock runs, and records persist, the server is complete.









